diff options
author | Loic Blot <loic.blot@unix-experience.fr> | 2015-01-12 17:01:41 +0100 |
---|---|---|
committer | Craig Robbins <kde.psych@gmail.com> | 2015-02-10 20:04:08 +1000 |
commit | a704c04f00bfea4b77550169fa08105c2ee0dfd0 (patch) | |
tree | f0f56c7845a14d0e583628f026e59eb1f4cfc7b5 /src/network/networkpacket.h | |
parent | 15c037614f6f7193cef4bfd1da45d83ef2fef393 (diff) | |
download | minetest-a704c04f00bfea4b77550169fa08105c2ee0dfd0.tar.gz minetest-a704c04f00bfea4b77550169fa08105c2ee0dfd0.tar.bz2 minetest-a704c04f00bfea4b77550169fa08105c2ee0dfd0.zip |
Network Layer 7 rework (Packet handling)
* Move networkcode to a dedicated directory
* Rename clientserver.h to network/networkprotocol.h (Better name) and sanitize some includes
* Create object NetworkPacket
* It stores command (opcode) and data separated
* It also stores peer_id
* Data reading can be done by using a streaming interface
* Change packet routing analysis
* Remove old conditional analysis
* Now uses function pointed analysis and add connection state ({Client,Server}::handlers)
* Connection state permit to categorize condition to handle before analyze packets
* Create a handler for depreciated messages, instead of duplicating code
Diffstat (limited to 'src/network/networkpacket.h')
-rw-r--r-- | src/network/networkpacket.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h new file mode 100644 index 000000000..c9f7e3cde --- /dev/null +++ b/src/network/networkpacket.h @@ -0,0 +1,86 @@ +/* +Minetest +Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com> +Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr> + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation; either version 2.1 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef NETWORKPACKET_HEADER +#define NETWORKPACKET_HEADER + +#include "util/numeric.h" +#include "networkprotocol.h" + +class NetworkPacket +{ + +public: + NetworkPacket(u8 *data, u32 datasize, u16 peer_id); + ~NetworkPacket(); + + // Getters + u32 getSize() { return m_datasize; } + u16 getPeerId() { return m_peer_id; } + + // Data extractors + char* getString(u32 from_offset); + NetworkPacket& operator>>(std::string& dst); + NetworkPacket& operator>>(std::wstring& dst); + std::string readLongString(); + + char getChar(u32 offset); + NetworkPacket& operator>>(char& dst); + + NetworkPacket& operator>>(bool& dst); + + u8 getU8(u32 offset); + NetworkPacket& operator>>(u8& dst); + + u8* getU8Ptr(u32 offset); + u16 getU16(u32 from_offset); + NetworkPacket& operator>>(u16& dst); + u32 getU32(u32 from_offset); + NetworkPacket& operator>>(u32& dst); + u64 getU64(u32 from_offset); + NetworkPacket& operator>>(u64& dst); + + float getF1000(u32 offset); + NetworkPacket& operator>>(float& dst); + NetworkPacket& operator>>(v2f& dst); + NetworkPacket& operator>>(v3f& dst); + + s16 getS16(u32 from_offset); + NetworkPacket& operator>>(s16& dst); + s32 getS32(u32 from_offset); + NetworkPacket& operator>>(s32& dst); + + NetworkPacket& operator>>(v2s32& dst); + + v3s16 getV3S16(u32 from_offset); + NetworkPacket& operator>>(v3s16& dst); + + v3s32 getV3S32(u32 from_offset); + NetworkPacket& operator>>(v3s32& dst); + +protected: + u8 *m_data; + u32 m_datasize; + u32 m_read_offset; +private: + u16 m_peer_id; +}; + +#endif |