#include #include #include #include #include #include #include #include #include #include #include "logging.h" #include "netpkt.h" NetPkt::NetPkt(int size) :size(size) { LogSystem::log(LOG_DEBUG, "NetPkt()"); data = (char*)malloc(size); } NetPkt::~NetPkt() { free(data); LogSystem::log(LOG_DEBUG, "~NetPkt()"); } int NetPkt::readFromSocket(int fd) { socklen_t i = sizeof(struct sockaddr_in); return recvfrom(fd, this->data, this->size, 0, (struct sockaddr *)&this->addr, &i); } int NetPkt::show(char* buf, int size) { return snprintf(buf, size, "(%s:%d) %d bytes", inet_ntoa(this->addr.sin_addr), ntohs(this->addr.sin_port), this->size); } NetPkt* NetPkt::createFromSocket(int fd) { int recvsize = 0; if (ioctl(fd, FIONREAD, &recvsize) == -1) { LogSystem::log(LOG_WARNING, "NetPkt::createFromSocket()"); return NULL; } NetPkt* retval = new NetPkt(recvsize); retval->readFromSocket(fd); return retval; }