Added more error code to Packet class

This commit is contained in:
Jocke
2015-12-17 17:32:49 +01:00
parent 000adb198f
commit db5b6ad519
2 changed files with 23 additions and 6 deletions
+6 -1
View File
@@ -20,6 +20,10 @@ public:
template<typename T> template<typename T>
void AddPrimitive(T val) 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)); memcpy(m_Data + m_Offset, &val, sizeof(T));
m_Offset += sizeof(T); m_Offset += sizeof(T);
} }
@@ -28,7 +32,7 @@ public:
T PopFrontPrimitive() T PopFrontPrimitive()
{ {
if (m_Offset < m_ReturnDataOffset + sizeof(T)) { 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; return -1;
} }
T returnValue; T returnValue;
@@ -51,6 +55,7 @@ private:
char* m_Data; char* m_Data;
unsigned int m_ReturnDataOffset = 0; unsigned int m_ReturnDataOffset = 0;
int m_Offset = 0; int m_Offset = 0;
unsigned int m_MaxPacketSize = 128;
}; };
#endif #endif
+17 -5
View File
@@ -16,7 +16,11 @@ Package::Package(MessageType type, unsigned int& packageID)
Package::Package(char* data, const int sizeOfPackage) Package::Package(char* data, const int sizeOfPackage)
{ {
// Create message // Create message
// Resize message
m_MaxPacketSize = sizeOfPackage;
m_Data = new char[sizeOfPackage]; m_Data = new char[sizeOfPackage];
// Copy data newly allocated memory
memcpy(m_Data, data, sizeOfPackage); memcpy(m_Data, data, sizeOfPackage);
m_Offset = sizeOfPackage; m_Offset = sizeOfPackage;
} }
@@ -29,14 +33,18 @@ Package::~Package()
void Package::AddString(std::string str) void Package::AddString(std::string str)
{ {
// Message, add one extra byte for null terminator // Message, add one extra byte for null terminator
memcpy(m_Data + m_Offset, str.data(), (str.size() + 1) * sizeof(char)); int sizeOfString = str.size() + 1;
m_Offset += (str.size() + 1) * sizeof(char); 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) void Package::AddData(char * data, int sizeOfData)
{ {
if (m_Offset + sizeOfData > 128) { if (m_Offset + sizeOfData > m_MaxPacketSize) {
LOG_WARNING("Package::AddData(): Data size in package exceeded maximum package size.\n"); LOG_WARNING("Package::AddData(): Data size in packet exceeded maximum package size.\n");
} }
memcpy(m_Data + m_Offset, data, sizeOfData); memcpy(m_Data + m_Offset, data, sizeOfData);
m_Offset += sizeOfData; m_Offset += sizeOfData;
@@ -46,7 +54,7 @@ std::string Package::PopFrontString()
{ {
std::string returnValue(m_Data + m_ReturnDataOffset); std::string returnValue(m_Data + m_ReturnDataOffset);
if (m_Offset < m_ReturnDataOffset + returnValue.size()){ 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"; return "PopFrontString Failed";
} }
// +1 for null terminator. // +1 for null terminator.
@@ -56,6 +64,10 @@ std::string Package::PopFrontString()
char * Package::PopData(int SizeOfData) 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; unsigned int oldReturnDataOffset = m_ReturnDataOffset;
m_ReturnDataOffset += SizeOfData; m_ReturnDataOffset += SizeOfData;
return (m_Data + oldReturnDataOffset); return (m_Data + oldReturnDataOffset);