std::stringstream ss;
ss << "Reading outside packet (offset: " <<
from_offset << ", packet size: " << getSize() << ")";
- throw SerializationError(ss.str());
+ throw PacketError(ss.str());
}
}
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);
}
dst.reserve(strLen);
dst.append((char*)&m_data[m_read_offset], strLen);
- m_read_offset += strLen * sizeof(char);
+ m_read_offset += strLen;
return *this;
}
*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;
}
*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)
dst.reserve(strLen);
dst.append((char*)&m_data[m_read_offset], strLen);
- m_read_offset += strLen*sizeof(char);
+ m_read_offset += strLen;
return dst;
}