diff options
Diffstat (limited to 'src/Net/Packet.h')
-rw-r--r-- | src/Net/Packet.h | 45 |
1 files changed, 16 insertions, 29 deletions
diff --git a/src/Net/Packet.h b/src/Net/Packet.h index 1062d4a..e64f37b 100644 --- a/src/Net/Packet.h +++ b/src/Net/Packet.h @@ -23,6 +23,7 @@ #include <cstdlib> #include <cstring> #include <netinet/in.h> +#include <stdint.h> namespace Mad { namespace Net { @@ -36,63 +37,49 @@ class Packet { }; struct Data { - unsigned short type; - unsigned short requestId; - unsigned short reserved; - unsigned short length; - unsigned char data[0]; + uint16_t type; + uint16_t requestId; + uint16_t reserved; + uint16_t length; + uint8_t data[0]; }; protected: Data *rawData; - public: - Packet(Type type, unsigned short requestId, const void *data = NULL, unsigned short length = 0) { - rawData = (Data*)std::malloc(sizeof(Data)+length); - - rawData->type = htons(type); - rawData->requestId = htons(requestId); - rawData->reserved = 0; + void setLength(uint16_t length) { rawData->length = htons(length); - if(length) - std::memcpy(rawData->data, data, length); - } - - Packet(const Packet &p) { - rawData = (Data*)std::malloc(p.getRawDataLength()); - std::memcpy(rawData, p.rawData, p.getRawDataLength()); + rawData = (Data*)std::realloc(rawData, getRawDataLength()); } - Packet& operator=(Packet &p) { - if(&p == this) - return *this; - - std::free(rawData); + public: + Packet(Type type, uint16_t requestId, const void *data = 0, uint16_t length = 0); + Packet(const Packet &p) { rawData = (Data*)std::malloc(p.getRawDataLength()); std::memcpy(rawData, p.rawData, p.getRawDataLength()); - - return *this; } virtual ~Packet() { std::free(rawData); } + Packet& operator=(const Packet &p); + Type getType() const { return (Type)ntohs(rawData->type); } - unsigned short getRequestId() const { + uint16_t getRequestId() const { return ntohs(rawData->requestId); } - unsigned short getLength() const { + uint16_t getLength() const { return ntohs(rawData->length); } - const unsigned char* getData() const { + const uint8_t* getData() const { return rawData->data; } |