X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Fnetwork%2Fnetworkpacket.h;h=a8b741374f8b32d2d2ca678dd5d201e5580e9cac;hb=b994a35d978d3f1dd172ff9a77515d4fcba5e89c;hp=9ad16988860962811affe827c7f4e7f3be649c76;hpb=113bdd3ec0608655d1ab36886b4708bb8ccb7870;p=dragonfireclient.git diff --git a/src/network/networkpacket.h b/src/network/networkpacket.h index 9ad169888..a8b741374 100644 --- a/src/network/networkpacket.h +++ b/src/network/networkpacket.h @@ -17,118 +17,120 @@ 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 +#pragma once #include "util/pointer.h" #include "util/numeric.h" #include "networkprotocol.h" +#include class NetworkPacket { public: - NetworkPacket(u16 command, u32 datasize, u16 peer_id); - NetworkPacket(u16 command, u32 datasize); - NetworkPacket(): m_datasize(0), m_read_offset(0), m_command(0), - m_peer_id(0) {} - ~NetworkPacket(); + NetworkPacket(u16 command, u32 datasize, session_t peer_id); + NetworkPacket(u16 command, u32 datasize); + NetworkPacket() = default; - void putRawPacket(u8 *data, u32 datasize, u16 peer_id); + ~NetworkPacket(); - // Getters - u32 getSize() { return m_datasize; } - u16 getPeerId() { return m_peer_id; } - u16 getCommand() { return m_command; } + void putRawPacket(u8 *data, u32 datasize, session_t peer_id); - // Data extractors - char* getString(u32 from_offset); - void putRawString(const char* src, u32 len); + // Getters + u32 getSize() const { return m_datasize; } + session_t getPeerId() const { return m_peer_id; } + u16 getCommand() { return m_command; } + const u32 getRemainingBytes() const { return m_datasize - m_read_offset; } + const char *getRemainingString() { return getString(m_read_offset); } - NetworkPacket& operator>>(std::string& dst); - NetworkPacket& operator<<(std::string src); + // Returns a c-string without copying. + // A better name for this would be getRawString() + const char *getString(u32 from_offset); + // major difference to putCString(): doesn't write len into the buffer + void putRawString(const char *src, u32 len); + void putRawString(const std::string &src) + { + putRawString(src.c_str(), src.size()); + } - void putLongString(std::string src); + NetworkPacket &operator>>(std::string &dst); + NetworkPacket &operator<<(const std::string &src); - NetworkPacket& operator>>(std::wstring& dst); - NetworkPacket& operator<<(std::wstring src); + void putLongString(const std::string &src); - std::string readLongString(); + NetworkPacket &operator>>(std::wstring &dst); + NetworkPacket &operator<<(const std::wstring &src); - char getChar(u32 offset); - NetworkPacket& operator>>(char& dst); - NetworkPacket& operator<<(char src); + std::string readLongString(); - NetworkPacket& operator>>(bool& dst); - NetworkPacket& operator<<(bool src); + char getChar(u32 offset); + NetworkPacket &operator>>(char &dst); + NetworkPacket &operator<<(char src); - u8 getU8(u32 offset); + NetworkPacket &operator>>(bool &dst); + NetworkPacket &operator<<(bool src); - NetworkPacket& operator>>(u8& dst); - NetworkPacket& operator<<(u8 src); + u8 getU8(u32 offset); - u8* getU8Ptr(u32 offset); + NetworkPacket &operator>>(u8 &dst); + NetworkPacket &operator<<(u8 src); - u16 getU16(u32 from_offset); - NetworkPacket& operator>>(u16& dst); - NetworkPacket& operator<<(u16 src); + u8 *getU8Ptr(u32 offset); - NetworkPacket& operator>>(u32& dst); - NetworkPacket& operator<<(u32 src); + u16 getU16(u32 from_offset); + NetworkPacket &operator>>(u16 &dst); + NetworkPacket &operator<<(u16 src); - NetworkPacket& operator>>(u64& dst); - NetworkPacket& operator<<(u64 src); + NetworkPacket &operator>>(u32 &dst); + NetworkPacket &operator<<(u32 src); - NetworkPacket& operator>>(float& dst); - NetworkPacket& operator<<(float src); + NetworkPacket &operator>>(u64 &dst); + NetworkPacket &operator<<(u64 src); - NetworkPacket& operator>>(v2f& dst); - NetworkPacket& operator<<(v2f src); + NetworkPacket &operator>>(float &dst); + NetworkPacket &operator<<(float src); - NetworkPacket& operator>>(v3f& dst); - NetworkPacket& operator<<(v3f src); + NetworkPacket &operator>>(v2f &dst); + NetworkPacket &operator<<(v2f src); - NetworkPacket& operator>>(s16& dst); - NetworkPacket& operator<<(s16 src); + NetworkPacket &operator>>(v3f &dst); + NetworkPacket &operator<<(v3f src); - NetworkPacket& operator>>(s32& dst); - NetworkPacket& operator<<(s32 src); + NetworkPacket &operator>>(s16 &dst); + NetworkPacket &operator<<(s16 src); - NetworkPacket& operator>>(v2s32& dst); - NetworkPacket& operator<<(v2s32 src); + NetworkPacket &operator>>(s32 &dst); + NetworkPacket &operator<<(s32 src); - NetworkPacket& operator>>(v3s16& dst); - NetworkPacket& operator<<(v3s16 src); + NetworkPacket &operator>>(v2s32 &dst); + NetworkPacket &operator<<(v2s32 src); - NetworkPacket& operator>>(v3s32& dst); - NetworkPacket& operator<<(v3s32 src); + NetworkPacket &operator>>(v3s16 &dst); + NetworkPacket &operator<<(v3s16 src); - NetworkPacket& operator>>(video::SColor& dst); - NetworkPacket& operator<<(video::SColor src); + NetworkPacket &operator>>(v3s32 &dst); + NetworkPacket &operator<<(v3s32 src); + + NetworkPacket &operator>>(video::SColor &dst); + NetworkPacket &operator<<(video::SColor src); + + // Temp, we remove SharedBuffer when migration finished + SharedBuffer oldForgePacket(); - // Temp, we remove SharedBuffer when migration finished - Buffer oldForgePacket(); private: - void checkReadOffset(u32 from_offset); - - template void checkDataSize() - { - if (m_read_offset + sizeof(T) > m_datasize) { - m_datasize += sizeof(T); - m_data.resize(m_datasize); - } - } + void checkReadOffset(u32 from_offset, u32 field_size); - template void incrOffset() - { - m_read_offset += sizeof(T); + inline void checkDataSize(u32 field_size) + { + if (m_read_offset + field_size > m_datasize) { + m_datasize = m_read_offset + field_size; + m_data.resize(m_datasize); } + } - std::vector m_data; - u32 m_datasize; - u32 m_read_offset; - u16 m_command; - u16 m_peer_id; + std::vector m_data; + u32 m_datasize = 0; + u32 m_read_offset = 0; + u16 m_command = 0; + session_t m_peer_id = 0; }; - -#endif