From db5b6ad51908cdf1603ec02a4fc00c2675b1150d Mon Sep 17 00:00:00 2001 From: Jocke Date: Thu, 17 Dec 2015 17:32:49 +0100 Subject: [PATCH 1/4] Added more error code to Packet class --- include/Engine/Network/Package.h | 7 ++++++- src/Engine/Network/Package.cpp | 22 +++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/include/Engine/Network/Package.h b/include/Engine/Network/Package.h index 9b45101d..2d9f766f 100644 --- a/include/Engine/Network/Package.h +++ b/include/Engine/Network/Package.h @@ -20,6 +20,10 @@ public: template void AddPrimitive(T val) { + // Check if we are trying to add more than the package can fit. + if (m_MaxPacketSize < m_Offset + sizeof(T)) { + LOG_WARNING("Packet AddPrimitive(): You are trying to add more than we have allocated for!"); + } memcpy(m_Data + m_Offset, &val, sizeof(T)); m_Offset += sizeof(T); } @@ -28,7 +32,7 @@ public: T PopFrontPrimitive() { if (m_Offset < m_ReturnDataOffset + sizeof(T)) { - LOG_WARNING("Package PopFrontPrimitive(): You are trying to remove more than what exists in this package!"); + LOG_WARNING("Packet PopFrontPrimitive(): You are trying to remove more than what exists in this package!"); return -1; } T returnValue; @@ -51,6 +55,7 @@ private: char* m_Data; unsigned int m_ReturnDataOffset = 0; int m_Offset = 0; + unsigned int m_MaxPacketSize = 128; }; #endif \ No newline at end of file diff --git a/src/Engine/Network/Package.cpp b/src/Engine/Network/Package.cpp index 43c28837..be99e4a3 100644 --- a/src/Engine/Network/Package.cpp +++ b/src/Engine/Network/Package.cpp @@ -16,7 +16,11 @@ Package::Package(MessageType type, unsigned int& packageID) Package::Package(char* data, const int sizeOfPackage) { // Create message + + // Resize message + m_MaxPacketSize = sizeOfPackage; m_Data = new char[sizeOfPackage]; + // Copy data newly allocated memory memcpy(m_Data, data, sizeOfPackage); m_Offset = sizeOfPackage; } @@ -29,14 +33,18 @@ Package::~Package() void Package::AddString(std::string str) { // Message, add one extra byte for null terminator - memcpy(m_Data + m_Offset, str.data(), (str.size() + 1) * sizeof(char)); - m_Offset += (str.size() + 1) * sizeof(char); + int sizeOfString = str.size() + 1; + if (m_Offset + sizeOfString > m_MaxPacketSize) { + LOG_WARNING("Package::AddString(): Data size in packet exceeded maximum package size.\n"); + } + memcpy(m_Data + m_Offset, str.data(), sizeOfString * sizeof(char)); + m_Offset += sizeOfString * sizeof(char); } void Package::AddData(char * data, int sizeOfData) { - if (m_Offset + sizeOfData > 128) { - LOG_WARNING("Package::AddData(): Data size in package exceeded maximum package size.\n"); + if (m_Offset + sizeOfData > m_MaxPacketSize) { + LOG_WARNING("Package::AddData(): Data size in packet exceeded maximum package size.\n"); } memcpy(m_Data + m_Offset, data, sizeOfData); m_Offset += sizeOfData; @@ -46,7 +54,7 @@ std::string Package::PopFrontString() { std::string returnValue(m_Data + m_ReturnDataOffset); if (m_Offset < m_ReturnDataOffset + returnValue.size()){ - LOG_WARNING("Package PopFrontString(): Oh no! You are trying to remove things outside my memory kingdom"); + LOG_WARNING("packet PopFrontString(): Oh no! You are trying to remove things outside my memory kingdom"); return "PopFrontString Failed"; } // +1 for null terminator. @@ -56,6 +64,10 @@ std::string Package::PopFrontString() char * Package::PopData(int SizeOfData) { + if (m_Offset < m_ReturnDataOffset + SizeOfData) { + LOG_WARNING("packet PopData(): Oh no! You are trying to remove things outside my memory kingdom"); + return nullptr; + } unsigned int oldReturnDataOffset = m_ReturnDataOffset; m_ReturnDataOffset += SizeOfData; return (m_Data + oldReturnDataOffset); From 97f8be1915f4f7ed426cf5c3a6915c1b417bbefd Mon Sep 17 00:00:00 2001 From: Jocke Date: Fri, 18 Dec 2015 10:21:56 +0100 Subject: [PATCH 2/4] Made Network.h's Start() and Update pure virtual and removed cpp. Removed unnecessary code from NetworkDefinitions.h. Renamed sizeOfPackage to sizeOfPacket in Packet.cpp. --- include/Engine/Network/Client.h | 5 +++-- include/Engine/Network/Network.h | 9 +++------ include/Engine/Network/NetworkDefinitions.h | 12 ------------ include/Engine/Network/Server.h | 5 +++-- src/Engine/Network/Client.cpp | 2 +- src/Engine/Network/Network.cpp | 13 ------------- src/Engine/Network/Packet.cpp | 17 +++++++++-------- 7 files changed, 19 insertions(+), 44 deletions(-) delete mode 100644 src/Engine/Network/Network.cpp diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 1bf2f059..743f7510 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -5,6 +5,7 @@ #include #include +#include #include "Network/MessageType.h" #include "Network/NetworkDefinitions.h" @@ -21,8 +22,8 @@ class Client : public Network public: Client(); ~Client(); - void Start(World* world, EventBroker* eventBroker); - void Update(); + void Start(World* world, EventBroker* eventBroker) override; + void Update() override; void Close(); private: // Assio UDP logic diff --git a/include/Engine/Network/Network.h b/include/Engine/Network/Network.h index d6447a3c..31c6b8b0 100644 --- a/include/Engine/Network/Network.h +++ b/include/Engine/Network/Network.h @@ -8,12 +8,9 @@ class Network { public: - Network(); - ~Network(); - virtual void Start(World* m_world, EventBroker *eventBroker); - virtual void Update(); -protected: - + virtual ~Network() { }; + virtual void Start(World* m_world, EventBroker *eventBroker) = 0; + virtual void Update() = 0; }; #endif \ No newline at end of file diff --git a/include/Engine/Network/NetworkDefinitions.h b/include/Engine/Network/NetworkDefinitions.h index 5a86c50d..336daf86 100644 --- a/include/Engine/Network/NetworkDefinitions.h +++ b/include/Engine/Network/NetworkDefinitions.h @@ -1,20 +1,8 @@ #ifndef NetworkDefines_h__ #define NetworkDefines_h__ -#include -#include -#include "Network/Packet.h" - - -#define BOARDSIZE 16 #define MAXCONNECTIONS 8 #define INPUTSIZE 128 #define PLAYERSPEED 0.2f; -typedef boost::shared_ptr socket_ptr; -typedef boost::shared_ptr string_ptr; -typedef boost::shared_ptr> messageQueue_ptr; - - - #endif \ No newline at end of file diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index 17ca7136..092c3be0 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -5,6 +5,7 @@ #include #include +#include #include "Network/MessageType.h" #include "Network/NetworkDefinitions.h" @@ -18,8 +19,8 @@ class Server : public Network public: Server(); ~Server(); - void Start(World* m_world, EventBroker *eventBroker); - void Update(); + void Start(World* m_world, EventBroker *eventBroker) override; + void Update() override; void Close(); private: diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index ade0c00e..4966b477 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -5,7 +5,7 @@ using namespace boost::asio::ip; Client::Client() : m_Socket(m_IOService) { - m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.2"), 13); + m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.6"), 13); // Set up network stream m_NextSnapshot.InputForward = ""; m_NextSnapshot.InputRight = ""; diff --git a/src/Engine/Network/Network.cpp b/src/Engine/Network/Network.cpp deleted file mode 100644 index 51a93407..00000000 --- a/src/Engine/Network/Network.cpp +++ /dev/null @@ -1,13 +0,0 @@ -#include "Network/Network.h" - -Network::Network() -{ } - -Network::~Network() -{ } - -void Network::Start(World * m_world, EventBroker * eventBroker) -{ } - -void Network::Update() -{ } \ No newline at end of file diff --git a/src/Engine/Network/Packet.cpp b/src/Engine/Network/Packet.cpp index 4a9b77ae..328e0d12 100644 --- a/src/Engine/Network/Packet.cpp +++ b/src/Engine/Network/Packet.cpp @@ -12,14 +12,15 @@ Packet::Packet(MessageType type, unsigned int& packetID) packetID++; } - +// Create message Packet::Packet(char* data, const int sizeOfPacket) { - // Create message - // Resize message - m_MaxPacketSize = sizeOfPackage; + m_MaxPacketSize = sizeOfPacket; // Copy data newly allocated memory + m_Data = new char[sizeOfPacket]; + memcpy(m_Data, data, sizeOfPacket); + m_Offset = sizeOfPacket; } Packet::~Packet() @@ -39,7 +40,7 @@ void Packet::WriteString(std::string str) } void Packet::WriteData(char * data, int sizeOfData) -{ +{ if (m_Offset + sizeOfData > m_MaxPacketSize) { LOG_WARNING("Packet::WriteData(): Data size in packet exceeded maximum packet size.\n"); } @@ -50,10 +51,10 @@ void Packet::WriteData(char * data, int sizeOfData) std::string Packet::ReadString() { std::string returnValue(m_Data + m_ReturnDataOffset); - if (m_Offset < m_ReturnDataOffset + returnValue.size()){ + if (m_Offset < m_ReturnDataOffset + returnValue.size()) { LOG_WARNING("packet ReadString(): Oh no! You are trying to remove things outside my memory kingdom"); return "PopFrontString Failed"; - } + } // +1 for null terminator. m_ReturnDataOffset += returnValue.size() + 1; return returnValue; @@ -68,4 +69,4 @@ char * Packet::ReadData(int SizeOfData) unsigned int oldReturnDataOffset = m_ReturnDataOffset; m_ReturnDataOffset += SizeOfData; return (m_Data + oldReturnDataOffset); -} +} \ No newline at end of file From 30db0b10fdcb464eea3dc919d0bfb1d880082fa5 Mon Sep 17 00:00:00 2001 From: Jocke Date: Fri, 18 Dec 2015 10:36:14 +0100 Subject: [PATCH 3/4] Removed NetworkDefinitions.h and moved #define MAXCONNECTIONS 8 #define INPUTSIZE 128 to Network.h. --- include/Engine/Network/Client.h | 1 - include/Engine/Network/Network.h | 3 +++ include/Engine/Network/NetworkDefinitions.h | 8 -------- include/Engine/Network/Server.h | 1 - 4 files changed, 3 insertions(+), 10 deletions(-) delete mode 100644 include/Engine/Network/NetworkDefinitions.h diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 743f7510..bf421ecc 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -8,7 +8,6 @@ #include #include "Network/MessageType.h" -#include "Network/NetworkDefinitions.h" #include "Network/PlayerDefinition.h" #include "Network/SnapshotDefinitions.h" #include "Network/WinLeakCheck.h" diff --git a/include/Engine/Network/Network.h b/include/Engine/Network/Network.h index 31c6b8b0..0f7baefe 100644 --- a/include/Engine/Network/Network.h +++ b/include/Engine/Network/Network.h @@ -5,6 +5,9 @@ #include "Core/EventBroker.h" #include "Network/Packet.h" +#define MAXCONNECTIONS 8 +#define INPUTSIZE 128 + class Network { public: diff --git a/include/Engine/Network/NetworkDefinitions.h b/include/Engine/Network/NetworkDefinitions.h deleted file mode 100644 index 336daf86..00000000 --- a/include/Engine/Network/NetworkDefinitions.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef NetworkDefines_h__ -#define NetworkDefines_h__ - -#define MAXCONNECTIONS 8 -#define INPUTSIZE 128 -#define PLAYERSPEED 0.2f; - -#endif \ No newline at end of file diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index 092c3be0..a081ec00 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -8,7 +8,6 @@ #include #include "Network/MessageType.h" -#include "Network/NetworkDefinitions.h" #include "Network/PlayerDefinition.h" #include "Core/World.h" #include "Core/EventBroker.h" From 002e1d8c5a434002e1ddc131117de8871719f293 Mon Sep 17 00:00:00 2001 From: Jocke Date: Fri, 18 Dec 2015 10:52:46 +0100 Subject: [PATCH 4/4] Removed magic number from Packet constructor in Packet.cpp. --- src/Engine/Network/Packet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Engine/Network/Packet.cpp b/src/Engine/Network/Packet.cpp index 328e0d12..52b15065 100644 --- a/src/Engine/Network/Packet.cpp +++ b/src/Engine/Network/Packet.cpp @@ -2,7 +2,7 @@ Packet::Packet(MessageType type, unsigned int& packetID) { - m_Data = new char[128]; + m_Data = new char[m_MaxPacketSize]; // Create message header // Add message type int messageType = static_cast(type);