Stop NetworkPacket methods from producing bloated packets
authorJay Arndt <jayarn27182@windstream.net>
Mon, 4 May 2015 09:53:41 +0000 (04:53 -0500)
committerest31 <MTest31@outlook.com>
Mon, 4 May 2015 23:47:41 +0000 (01:47 +0200)
src/network/networkpacket.cpp
src/network/networkpacket.h

index a4a481db48352c313c4acaa82be4109f5660b0b9..1e4b6e23eec92e7d36e25727b4880eac12c05df1 100644 (file)
@@ -72,8 +72,8 @@ char* NetworkPacket::getString(u32 from_offset)
 
 void NetworkPacket::putRawString(const char* src, u32 len)
 {
-       if (m_read_offset + len * sizeof(char) >= m_datasize) {
-               m_datasize += len * sizeof(char);
+       if (m_read_offset + len > m_datasize) {
+               m_datasize = m_read_offset + len;
                m_data.resize(m_datasize);
        }
 
@@ -95,7 +95,7 @@ NetworkPacket& NetworkPacket::operator>>(std::string& dst)
        dst.reserve(strLen);
        dst.append((char*)&m_data[m_read_offset], strLen);
 
-       m_read_offset += strLen * sizeof(char);
+       m_read_offset += strLen;
        return *this;
 }
 
@@ -108,13 +108,7 @@ NetworkPacket& NetworkPacket::operator<<(std::string src)
 
        *this << msgsize;
 
-       if (m_read_offset + msgsize * sizeof(char) >= m_datasize) {
-               m_datasize += msgsize * sizeof(char);
-               m_data.resize(m_datasize);
-       }
-
-       memcpy(&m_data[m_read_offset], src.c_str(), msgsize);
-       m_read_offset += msgsize;
+       putRawString(src.c_str(), (u32)msgsize);
 
        return *this;
 }
@@ -128,13 +122,7 @@ void NetworkPacket::putLongString(std::string src)
 
        *this << msgsize;
 
-       if (m_read_offset + msgsize * sizeof(char) >= m_datasize) {
-               m_datasize += msgsize * sizeof(char);
-               m_data.resize(m_datasize);
-       }
-
-       memcpy(&m_data[m_read_offset], src.c_str(), msgsize);
-       m_read_offset += msgsize;
+       putRawString(src.c_str(), msgsize);
 }
 
 NetworkPacket& NetworkPacket::operator>>(std::wstring& dst)
@@ -189,7 +177,7 @@ std::string NetworkPacket::readLongString()
        dst.reserve(strLen);
        dst.append((char*)&m_data[m_read_offset], strLen);
 
-       m_read_offset += strLen*sizeof(char);
+       m_read_offset += strLen;
 
        return dst;
 }
index 9ad16988860962811affe827c7f4e7f3be649c76..0d2015e7fd1cb84c3f743c0fb640614c3557298e 100644 (file)
@@ -114,7 +114,7 @@ private:
                template<typename T> void checkDataSize()
                {
                        if (m_read_offset + sizeof(T) > m_datasize) {
-                               m_datasize += sizeof(T);
+                               m_datasize = m_read_offset + sizeof(T);
                                m_data.resize(m_datasize);
                        }
                }