Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
networkpacket.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2015 nerzhul, Loic Blot <loic.blot@unix-experience.fr>
4
5#pragma once
6
7#include "util/pointer.h" // Buffer<T>
9#include "networkprotocol.h"
10#include <SColor.h>
11#include <string>
12#include <string_view>
13#include <vector>
14
16{
17public:
18 NetworkPacket(u16 command, u32 preallocate, session_t peer_id) :
19 m_command(command), m_peer_id(peer_id)
20 {
21 m_data.reserve(preallocate);
22 }
23 NetworkPacket(u16 command, u32 preallocate) :
24 m_command(command)
25 {
26 m_data.reserve(preallocate);
27 }
28 NetworkPacket() = default;
29
30 ~NetworkPacket() = default;
31
32 void putRawPacket(const u8 *data, u32 datasize, session_t peer_id);
33 void clear();
34
35 // Getters
36 u32 getSize() const { return m_datasize; }
37 session_t getPeerId() const { return m_peer_id; }
38 u16 getCommand() const { return m_command; }
39 u32 getRemainingBytes() const { return m_datasize - m_read_offset; }
40
41 // Returns a pointer to buffer data.
42 // A better name for this would be getRawString()
43 const char *getString(u32 from_offset) const;
44 const char *getRemainingString() const { return getString(m_read_offset); }
45
46 // Perform length check and skip ahead by `count` bytes.
47 void skip(u32 count);
48
49 // Appends bytes from string buffer to packet
50 void putRawString(const char *src, u32 len);
51 void putRawString(std::string_view src)
52 {
53 putRawString(src.data(), src.size());
54 }
55
56 // Reads bytes from packet into string buffer
57 void readRawString(char *dst, u32 len);
58 std::string readRawString(u32 len)
59 {
60 std::string s;
61 s.resize(len);
62 readRawString(&s[0], len);
63 return s;
64 }
65
66 NetworkPacket &operator>>(std::string &dst);
67 NetworkPacket &operator<<(std::string_view src);
68
69 void putLongString(std::string_view src);
70
71 NetworkPacket &operator>>(std::wstring &dst);
72 NetworkPacket &operator<<(std::wstring_view src);
73
74 std::string readLongString();
75
76 NetworkPacket &operator>>(char &dst);
77 NetworkPacket &operator<<(char src);
78
79 NetworkPacket &operator>>(bool &dst);
80 NetworkPacket &operator<<(bool src);
81
82 NetworkPacket &operator>>(u8 &dst);
84
85 NetworkPacket &operator>>(u16 &dst);
86 NetworkPacket &operator<<(u16 src);
87
88 NetworkPacket &operator>>(u32 &dst);
89 NetworkPacket &operator<<(u32 src);
90
91 NetworkPacket &operator>>(u64 &dst);
92 NetworkPacket &operator<<(u64 src);
93
94 NetworkPacket &operator>>(float &dst);
95 NetworkPacket &operator<<(float src);
96
99
102
103 NetworkPacket &operator>>(s16 &dst);
104 NetworkPacket &operator<<(s16 src);
105
106 NetworkPacket &operator>>(s32 &dst);
107 NetworkPacket &operator<<(s32 src);
108
111
114
117
118 NetworkPacket &operator>>(video::SColor &dst);
119 NetworkPacket &operator<<(video::SColor src);
120
121 // Temp, we remove SharedBuffer when migration finished
122 // ^ this comment has been here for 7 years
124
125private:
126 void checkReadOffset(u32 from_offset, u32 field_size) const;
127
128 // resize data buffer for writing
129 inline void checkDataSize(u32 field_size)
130 {
131 if (m_read_offset + field_size > m_datasize) {
132 m_datasize = m_read_offset + field_size;
133 m_data.resize(m_datasize);
134 }
135 }
136
137 std::vector<u8> m_data;
138 u32 m_datasize = 0;
139 u32 m_read_offset = 0; // read and write offset
140 u16 m_command = 0;
142};
Definition pointer.h:15
Definition networkpacket.h:16
void clear()
Definition networkpacket.cpp:38
std::string readRawString(u32 len)
Definition networkpacket.h:58
void skip(u32 count)
Definition networkpacket.cpp:54
std::string readLongString()
Definition networkpacket.cpp:205
u32 getRemainingBytes() const
Definition networkpacket.h:39
void putRawPacket(const u8 *data, u32 datasize, session_t peer_id)
Definition networkpacket.cpp:20
void checkReadOffset(u32 from_offset, u32 field_size) const
Definition networkpacket.cpp:10
u16 m_command
Definition networkpacket.h:140
const char * getRemainingString() const
Definition networkpacket.h:44
u32 m_read_offset
Definition networkpacket.h:139
void putRawString(std::string_view src)
Definition networkpacket.h:51
NetworkPacket & operator>>(std::string &dst)
Definition networkpacket.cpp:83
const char * getString(u32 from_offset) const
Definition networkpacket.cpp:47
NetworkPacket()=default
Buffer< u8 > oldForgePacket()
Definition networkpacket.cpp:511
std::vector< u8 > m_data
Definition networkpacket.h:137
u32 m_datasize
Definition networkpacket.h:138
u32 getSize() const
Definition networkpacket.h:36
~NetworkPacket()=default
void readRawString(char *dst, u32 len)
Definition networkpacket.cpp:71
void checkDataSize(u32 field_size)
Definition networkpacket.h:129
NetworkPacket(u16 command, u32 preallocate, session_t peer_id)
Definition networkpacket.h:18
NetworkPacket & operator<<(std::string_view src)
Definition networkpacket.cpp:104
void putRawString(const char *src, u32 len)
Definition networkpacket.cpp:60
u16 getCommand() const
Definition networkpacket.h:38
NetworkPacket(u16 command, u32 preallocate)
Definition networkpacket.h:23
void putLongString(std::string_view src)
Definition networkpacket.cpp:119
session_t m_peer_id
Definition networkpacket.h:141
session_t getPeerId() const
Definition networkpacket.h:37
core::vector2d< s32 > v2s32
Definition irr_v2d.h:13
core::vector2d< f32 > v2f
Definition irr_v2d.h:11
core::vector3d< s32 > v3s32
Definition irr_v3d.h:15
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
core::vector3df v3f
Definition irr_v3d.h:11
u16 session_t
Definition networkprotocol.h:27