summaryrefslogtreecommitdiffstats
path: root/src/Net/Packet.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/Net/Packet.h')
-rw-r--r--src/Net/Packet.h45
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;
}