From 1594d4babf02a853761e89e970aa466c33322743 Mon Sep 17 00:00:00 2001 From: Cloaked9000 Date: Tue, 3 Jan 2017 18:10:26 +0000 Subject: [PATCH] Added signed types to packet --- include/frnetlib/Packet.h | 66 +++++++++++++++++++++++++++++++++++++++ src/Socket.cpp | 2 +- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/include/frnetlib/Packet.h b/include/frnetlib/Packet.h index c5ad648..1689c01 100644 --- a/include/frnetlib/Packet.h +++ b/include/frnetlib/Packet.h @@ -132,6 +132,72 @@ namespace fr return *this; } + /* + * Adds a 16bit variable to the packet + */ + inline Packet &operator<<(int16_t var) + { + buffer.resize(buffer.size() + sizeof(var)); + var = htons((uint16_t)var); + memcpy(&buffer[buffer.size() - sizeof(var)], &var, sizeof(var)); + return *this; + } + + /* + * Extracts a 16bit variable from the packet + */ + inline Packet &operator>>(int16_t &var) + { + memcpy(&var, &buffer[0], sizeof(var)); + buffer.erase(0, sizeof(var)); + var = ntohs((uint16_t)var); + return *this; + } + + /* + * Adds a 32bit variable to the packet + */ + inline Packet &operator<<(int32_t var) + { + buffer.resize(buffer.size() + sizeof(var)); + var = htonl((uint32_t)var); + memcpy(&buffer[buffer.size() - sizeof(var)], &var, sizeof(var)); + return *this; + } + + /* + * Extracts a 32bit variable from the packet + */ + inline Packet &operator>>(int32_t &var) + { + memcpy(&var, &buffer[0], sizeof(var)); + buffer.erase(0, sizeof(var)); + var = ntohl((uint32_t)var); + return *this; + } + + /* + * Adds a 64bit variable to the packet + */ + inline Packet &operator<<(int64_t var) + { + buffer.resize(buffer.size() + sizeof(var)); + var = htonll((uint64_t)var); + memcpy(&buffer[buffer.size() - sizeof(var)], &var, sizeof(var)); + return *this; + } + + /* + * Extracts a 64bit variable from the packet + */ + inline Packet &operator>>(int64_t &var) + { + memcpy(&var, &buffer[0], sizeof(var)); + buffer.erase(0, sizeof(var)); + var = ntohll((uint64_t)var); + return *this; + } + /* * Adds a float variable to the packet */ diff --git a/src/Socket.cpp b/src/Socket.cpp index 3c2661d..4677ca7 100644 --- a/src/Socket.cpp +++ b/src/Socket.cpp @@ -103,6 +103,6 @@ namespace fr { //todo: Perhaps allow for these settings to be modified int one = 1; - setsockopt(get_socket_descriptor(), SOL_TCP, TCP_NODELAY, &one, sizeof(one)); + setsockopt(get_socket_descriptor(), SOL_TCP, TCP_NODELAY, (char*)&one, sizeof(one)); } } \ No newline at end of file