diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2015-03-31 10:35:51 +0200 |
---|---|---|
committer | Loic Blot <loic.blot@unix-experience.fr> | 2015-03-31 11:01:08 +0200 |
commit | 1fe4256462826c218ed9bf171be4c07e0db33e25 (patch) | |
tree | 8c07a04333c23599376327e847d030cfe6bec162 /src/network/networkpacket.cpp | |
parent | ab77bf98ee320835e5dc50ed9b013442221f96e8 (diff) | |
download | minetest-1fe4256462826c218ed9bf171be4c07e0db33e25.tar.gz minetest-1fe4256462826c218ed9bf171be4c07e0db33e25.tar.bz2 minetest-1fe4256462826c218ed9bf171be4c07e0db33e25.zip |
Connection::Receive(): receive Network Packet instead of SharedBuffer<u8>.
Because we get a Buffer<u8> from ConnectionEvent, don't convert it to SharedBuffer<u8> and return it to Server/Client::Receive which will convert it to NetworkPacket
Instead, put the Buffer<u8> directly to NetworkPacket and return it to packet processing
This remove a long existing memory copy
Also check the packet size directly into Connection::Receive instead of packet processing
Diffstat (limited to 'src/network/networkpacket.cpp')
-rw-r--r-- | src/network/networkpacket.cpp | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/network/networkpacket.cpp b/src/network/networkpacket.cpp index 85d39d91d..d7487af40 100644 --- a/src/network/networkpacket.cpp +++ b/src/network/networkpacket.cpp @@ -22,17 +22,6 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "exceptions.h" #include "util/serialize.h" -NetworkPacket::NetworkPacket(u8 *data, u32 datasize, u16 peer_id): -m_read_offset(0), m_peer_id(peer_id) -{ - m_read_offset = 0; - m_datasize = datasize - 2; - - // split command and datas - m_command = readU16(&data[0]); - m_data = std::vector<u8>(&data[2], &data[2 + m_datasize]); -} - NetworkPacket::NetworkPacket(u16 command, u32 datasize, u16 peer_id): m_datasize(datasize), m_read_offset(0), m_command(command), m_peer_id(peer_id) { @@ -50,6 +39,20 @@ NetworkPacket::~NetworkPacket() m_data.clear(); } +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]); +} + char* NetworkPacket::getString(u32 from_offset) { if (from_offset >= m_datasize) |