diff options
author | Jay Arndt <jayarn27182@windstream.net> | 2015-05-04 04:53:41 -0500 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2015-05-05 01:47:41 +0200 |
commit | 2923eafaca929e129ba81504676d3770cff5f681 (patch) | |
tree | b13ec22f08639fce6e93c40947a81ac2f8b07e8d /src | |
parent | 3ee854cf25c846e535857281fea0e5d1541cb212 (diff) | |
download | minetest-2923eafaca929e129ba81504676d3770cff5f681.tar.gz minetest-2923eafaca929e129ba81504676d3770cff5f681.tar.bz2 minetest-2923eafaca929e129ba81504676d3770cff5f681.zip |
Stop NetworkPacket methods from producing bloated packets
Diffstat (limited to 'src')
-rw-r--r-- | src/network/networkpacket.cpp | 24 | ||||
-rw-r--r-- | src/network/networkpacket.h | 2 |
2 files changed, 7 insertions, 19 deletions
diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index a4a481db4..1e4b6e23e 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -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; } diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 9ad169888..0d2015e7f 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -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); } } |