summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Arndt <jayarn27182@windstream.net>2015-05-04 04:53:41 -0500
committerest31 <MTest31@outlook.com>2015-05-05 01:47:41 +0200
commit2923eafaca929e129ba81504676d3770cff5f681 (patch)
treeb13ec22f08639fce6e93c40947a81ac2f8b07e8d
parent3ee854cf25c846e535857281fea0e5d1541cb212 (diff)
downloadminetest-2923eafaca929e129ba81504676d3770cff5f681.tar.gz
minetest-2923eafaca929e129ba81504676d3770cff5f681.tar.bz2
minetest-2923eafaca929e129ba81504676d3770cff5f681.zip
Stop NetworkPacket methods from producing bloated packets
-rw-r--r--src/network/networkpacket.cpp24
-rw-r--r--src/network/networkpacket.h2
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);
}
}