+void NetworkPacket::checkReadOffset(u32 from_offset, u32 field_size)
+{
+ if (from_offset + field_size > m_datasize) {
+ std::stringstream ss;
+ ss << "Reading outside packet (offset: " <<
+ from_offset << ", packet size: " << getSize() << ")";
+ throw PacketError(ss.str());
+ }
+}
+
+void NetworkPacket::putRawPacket(u8 *data, u32 datasize, u16 peer_id)
+{
+ // If a m_command is already set, we are rewriting on same packet
+ // This is not permitted
+ assert(m_command == 0);
+
+ m_datasize = datasize - 2;
+ m_peer_id = peer_id;
+
+ // split command and datas
+ m_command = readU16(&data[0]);
+ m_data = std::vector<u8>(&data[2], &data[2 + m_datasize]);
+}
+
+const char* NetworkPacket::getString(u32 from_offset)