DDraceNetwork Documentation
Loading...
Searching...
No Matches
network.h
Go to the documentation of this file.
1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#ifndef ENGINE_SHARED_NETWORK_H
4#define ENGINE_SHARED_NETWORK_H
5
6#include "ringbuffer.h"
7#include "stun.h"
8
9#include <base/types.h>
10
11#include <array>
12#include <optional>
13
14class CHuffman;
15class CNetBan;
16class CPacker;
17
18/*
19
20CURRENT:
21 packet header: 3 bytes
22 unsigned char flags_ack; // 6bit flags, 2bit ack
23 0.6: ORNCaaAA
24 0.6.5: ORNCT-AA
25 0.7: --NORCAA
26
27 O = flag compression
28 R = flag resend
29 N = flag connless
30 C = flag control
31 T = flag token (0.6.5 only not supported by ddnet)
32 - = unused, should be zero
33 a = should be zero otherwise it messes up the ack number
34 A = bit of ack number
35
36
37 unsigned char ack; // 8 bit ack
38 unsigned char num_chunks; // 8 bit chunks
39
40 (unsigned char padding[3]) // 24 bit extra in case it's a connection less packet
41 // this is to make sure that it's compatible with the
42 // old protocol
43
44 chunk header: 2-3 bytes
45 unsigned char flags_size; // 2bit flags, 6 bit size
46 unsigned char size_seq; // 4bit size, 4bit seq
47 (unsigned char seq;) // 8bit seq, if vital flag is set
48*/
49
50enum
51{
56
60};
61
62enum
63{
73
80 // NOT SENT VIA THE NETWORK DIRECTLY:
82
85
91
93
95
98};
99enum
100{
101 NET_TOKEN_MAX = 0xffffffff,
104
106};
107
108typedef int SECURITY_TOKEN;
109typedef unsigned int TOKEN;
110
111SECURITY_TOKEN ToSecurityToken(const unsigned char *pData);
112void WriteSecurityToken(unsigned char *pData, SECURITY_TOKEN Token);
113
114extern const unsigned char SECURITY_TOKEN_MAGIC[4];
115
116enum
117{
120};
121
122typedef int (*NETFUNC_DELCLIENT)(int ClientId, const char *pReason, void *pUser);
123typedef int (*NETFUNC_NEWCLIENT_CON)(int ClientId, void *pUser);
124typedef int (*NETFUNC_NEWCLIENT)(int ClientId, void *pUser, bool Sixup);
125typedef int (*NETFUNC_NEWCLIENT_NOAUTH)(int ClientId, void *pUser);
126typedef int (*NETFUNC_CLIENTREJOIN)(int ClientId, void *pUser);
127
129{
130 // -1 means that it's a stateless packet
131 // 0 on the client means the server
133 NETADDR m_Address; // only used when client_id == -1
136 const void *m_pData;
137 // only used if the flags contain NETSENDFLAG_EXTENDED and NETSENDFLAG_CONNLESS
139};
140
142{
143public:
147
148 unsigned char *Pack(unsigned char *pData, int Split = 4) const;
149 unsigned char *Unpack(unsigned char *pData, int Split = 4);
150};
151
163
174
175enum class CONNECTIVITY
176{
177 UNKNOWN,
178 CHECKING,
180 REACHABLE,
182};
183
184class CStun
185{
187 {
191 bool m_HaveStunServer = false;
193 bool m_HaveAddr = false;
198
199 public:
200 CProtocol(int Index, NETSOCKET Socket);
202 void Refresh();
203 void Update();
204 bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize);
206 };
208
209public:
210 CStun(NETSOCKET Socket);
212 void Refresh();
213 void Update();
214 bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize);
216};
217
219{
220 // TODO: is this needed because this needs to be aware of
221 // the ack sequencing number and is also responible for updating
222 // that. this should be fixed.
223 friend class CNetRecvUnpacker;
224
225public:
226 enum class EState
227 {
228 OFFLINE,
230 CONNECT,
231 PENDING,
232 ONLINE,
233 ERROR,
234 };
235
237
238private:
239 unsigned short m_Sequence;
240 unsigned short m_Ack;
241 unsigned short m_PeerAck;
246
248
252
253 char m_aErrorString[256];
254
256
262
263 std::array<char, NETADDR_MAXSTRSIZE> m_aPeerAddrStr;
264 std::array<char, NETADDR_MAXSTRSIZE> m_aPeerAddrStrNoPort;
265 // client 0.7
266 static TOKEN GenerateToken7(const NETADDR *pPeerAddr);
268 bool IsSixup() const { return m_Sixup; }
269
270 //
271 void SetPeerAddr(const NETADDR *pAddr);
272 void ClearPeerAddr();
273 void ResetStats();
274 void SetError(const char *pString);
275 void AckChunks(int Ack);
276
277 int QueueChunkEx(int Flags, int DataSize, const void *pData, int Sequence);
278 void SendConnect();
279 void SendControl(int ControlMsg, const void *pExtra, int ExtraSize);
282 void Resend();
283
284public:
287
288 void SetToken7(TOKEN Token);
289
290 void Reset(bool Rejoin = false);
291 void Init(NETSOCKET Socket, bool BlockCloseMsg);
292 int Connect(const NETADDR *pAddr, int NumAddrs);
293 int Connect7(const NETADDR *pAddr, int NumAddrs);
294 void Disconnect(const char *pReason);
295
296 int Update();
297 int Flush();
298
300 int QueueChunk(int Flags, int DataSize, const void *pData);
301
302 const char *ErrorString();
303 void SignalResend();
304 EState State() const { return m_State; }
305 const NETADDR *PeerAddress() const { return &m_PeerAddr; }
306 const std::array<char, NETADDR_MAXSTRSIZE> &PeerAddressString(bool IncludePort) const
307 {
309 }
310 void ConnectAddresses(const NETADDR **ppAddrs, int *pNumAddrs) const
311 {
314 }
315
317 const char *ErrorString() const { return m_aErrorString; }
318
319 // Needed for GotProblems in NetClient
322
323 int AckSequence() const { return m_Ack; }
324 int SeqSequence() const { return m_Sequence; }
325 int SecurityToken() const { return m_SecurityToken; }
327
329
330 // anti spoof
332 void SetUnknownSeq() { m_UnknownSeq = true; }
334
337};
338
340{
341public:
342 enum class EState
343 {
344 OFFLINE,
345 ONLINE,
346 ERROR,
347 };
348
349private:
351
354
357
358 char m_aErrorString[256];
359
362
363public:
364 int Init(NETSOCKET Socket, const NETADDR *pAddr);
365 void Disconnect(const char *pReason);
366
367 EState State() const { return m_State; }
368 const NETADDR *PeerAddress() const { return &m_PeerAddr; }
369 const char *ErrorString() const { return m_aErrorString; }
370
371 void Reset();
372 int Update();
373 int Send(const char *pLine);
374 int Recv(char *pLine, int MaxLength);
375};
376
394
395// server side
397{
398 struct CSlot
399 {
400 public:
402 };
403
410
417
422 void *m_pUser;
423
424 unsigned char m_aSecurityTokenSeed[16];
425
426 // vanilla connect flood detection
429
431
433
437 void OnConnCtrlMsg(NETADDR &Addr, int ClientId, int ControlMsg, const CNetPacketConstruct &Packet);
438 bool ClientExists(const NETADDR &Addr) { return GetClientSlot(Addr) != -1; }
439 int GetClientSlot(const NETADDR &Addr);
440 void SendControl(NETADDR &Addr, int ControlMsg, const void *pExtra, int ExtraSize, SECURITY_TOKEN SecurityToken);
441
442 int TryAcceptClient(NETADDR &Addr, SECURITY_TOKEN SecurityToken, bool VanillaAuth = false, bool Sixup = false, SECURITY_TOKEN Token = 0);
443 int NumClientsWithAddr(NETADDR Addr);
444 bool Connlimit(NETADDR Addr);
445 void SendMsgs(NETADDR &Addr, const CPacker **ppMsgs, int Num);
446
447public:
450
451 //
453 void Close();
454
455 //
457 int Send(CNetChunk *pChunk);
458 void Update();
459
460 //
461 void Drop(int ClientId, const char *pReason);
462
463 // status requests
464 const NETADDR *ClientAddr(int ClientId) const { return m_aSlots[ClientId].m_Connection.PeerAddress(); }
465 const std::array<char, NETADDR_MAXSTRSIZE> &ClientAddrString(int ClientId, bool IncludePort) const { return m_aSlots[ClientId].m_Connection.PeerAddressString(IncludePort); }
466 bool HasSecurityToken(int ClientId) const { return m_aSlots[ClientId].m_Connection.SecurityToken() != NET_SECURITY_TOKEN_UNSUPPORTED; }
467 NETADDR Address() const { return m_Address; }
468 NETSOCKET Socket() const { return m_Socket; }
469 CNetBan *NetBan() const { return m_pNetBan; }
470 int NetType() const { return net_socket_type(m_Socket); }
471 int MaxClients() const { return m_MaxClients; }
472
474
475 //
476 void SetMaxClientsPerIp(int Max);
477 bool SetTimedOut(int ClientId, int OrigId);
478 void SetTimeoutProtected(int ClientId);
479
480 void ResetErrorString(int ClientId);
481 const char *ErrorString(int ClientId);
482
483 // anti spoof
485 SECURITY_TOKEN GetToken(const NETADDR &Addr);
487};
488
490{
495
499
502 void *m_pUser;
503
505
506public:
508
509 //
511 void Close();
512
513 //
514 int Recv(char *pLine, int MaxLength, int *pClientId = nullptr);
515 int Send(int ClientId, const char *pLine);
516 void Update();
517
518 //
519 int AcceptClient(NETSOCKET Socket, const NETADDR *pAddr);
520 void Drop(int ClientId, const char *pReason);
521
522 // status requests
523 const NETADDR *ClientAddr(int ClientId) const { return m_aSlots[ClientId].m_Connection.PeerAddress(); }
524 CNetBan *NetBan() const { return m_pNetBan; }
525};
526
528{
529public:
530 void Init(NETSOCKET Socket);
532 void FetchToken(NETADDR *pAddr);
533 void AddToken(const NETADDR *pAddr, TOKEN Token);
534 TOKEN GetToken(const NETADDR *pAddr);
536 void Update();
537
538private:
547
555
557 std::vector<CAddressInfo> m_TokenCache;
558 std::vector<CConnlessPacketInfo> m_ConnlessPackets;
559};
560
561// client side
563{
567
568 CStun *m_pStun = nullptr;
569
570public:
572 // openness
573 bool Open(NETADDR BindAddr);
574 void Close();
575
576 // connection state
577 void Disconnect(const char *pReason);
578 void Connect(const NETADDR *pAddr, int NumAddrs);
579 void Connect7(const NETADDR *pAddr, int NumAddrs);
580
581 // communication
583 int Send(CNetChunk *pChunk);
584
585 // pumping
586 void Update();
587 int Flush();
588
589 void ResetErrorString();
590
591 // error and state
592 int NetType() const { return net_socket_type(m_Socket); }
593 int State();
594 const NETADDR *ServerAddress() const { return m_Connection.PeerAddress(); }
596 bool GotProblems(int64_t MaxLatency) const;
597 const char *ErrorString() const;
598
599 // stun
601 void RefreshStun();
603};
604
605// TODO: both, fix these. This feels like a junk class for stuff that doesn't fit anywhere
607{
611
612public:
614 static void CloseLog();
615 static void Init();
616 static int Compress(const void *pData, int DataSize, void *pOutput, int OutputSize);
617 static int Decompress(const void *pData, int DataSize, void *pOutput, int OutputSize);
618
620
621 static void SendControlMsg(NETSOCKET Socket, NETADDR *pAddr, int Ack, int ControlMsg, const void *pExtra, int ExtraSize, SECURITY_TOKEN SecurityToken, bool Sixup = false);
623 static void SendPacketConnless(NETSOCKET Socket, NETADDR *pAddr, const void *pData, int DataSize, bool Extended, unsigned char aExtra[NET_CONNLESS_EXTRA_SIZE]);
625 static void SendPacket(NETSOCKET Socket, NETADDR *pAddr, CNetPacketConstruct *pPacket, SECURITY_TOKEN SecurityToken, bool Sixup = false);
626
627 static std::optional<int> UnpackPacketFlags(unsigned char *pBuffer, int Size);
628 static int UnpackPacket(unsigned char *pBuffer, int Size, CNetPacketConstruct *pPacket, bool &Sixup, SECURITY_TOKEN *pSecurityToken = nullptr, SECURITY_TOKEN *pResponseToken = nullptr);
629
630 // The backroom is ack-NET_MAX_SEQUENCE/2. Used for knowing if we acked a packet or not
631 static bool IsSeqInBackroom(int Seq, int Ack);
632};
633
634#endif
Definition network.h:340
bool m_LineEndingDetected
Definition network.h:360
EState m_State
Definition network.h:350
int m_BufferOffset
Definition network.h:356
int Send(const char *pLine)
Definition network_console_conn.cpp:156
char m_aBuffer[NET_MAX_PACKETSIZE]
Definition network.h:355
EState
Definition network.h:343
char m_aErrorString[256]
Definition network.h:358
void Reset()
Definition network_console_conn.cpp:6
const NETADDR * PeerAddress() const
Definition network.h:368
NETSOCKET m_Socket
Definition network.h:353
void Disconnect(const char *pReason)
Definition network_console_conn.cpp:43
char m_aLineEnding[3]
Definition network.h:361
int Init(NETSOCKET Socket, const NETADDR *pAddr)
Definition network_console_conn.cpp:28
const char * ErrorString() const
Definition network.h:369
int Recv(char *pLine, int MaxLength)
Definition network_console_conn.cpp:93
EState State() const
Definition network.h:367
int Update()
Definition network_console_conn.cpp:56
NETADDR m_PeerAddr
Definition network.h:352
Definition huffman.h:7
Definition netban.h:27
Definition network.h:607
static void SendControlMsgWithToken7(NETSOCKET Socket, NETADDR *pAddr, TOKEN Token, int Ack, int ControlMsg, TOKEN MyToken, bool Extended)
Definition network.cpp:382
static int Decompress(const void *pData, int DataSize, void *pOutput, int OutputSize)
Definition network.cpp:486
static void SendPacketConnlessWithToken7(NETSOCKET Socket, NETADDR *pAddr, const void *pData, int DataSize, SECURITY_TOKEN Token, SECURITY_TOKEN ResponseToken)
Definition network.cpp:152
static void Init()
Definition network.cpp:491
static void SendPacketConnless(NETSOCKET Socket, NETADDR *pAddr, const void *pData, int DataSize, bool Extended, unsigned char aExtra[NET_CONNLESS_EXTRA_SIZE])
Definition network.cpp:132
static int UnpackPacket(unsigned char *pBuffer, int Size, CNetPacketConstruct *pPacket, bool &Sixup, SECURITY_TOKEN *pSecurityToken=nullptr, SECURITY_TOKEN *pResponseToken=nullptr)
Definition network.cpp:255
static bool IsValidConnectionOrientedPacket(const CNetPacketConstruct *pPacket)
Definition network.cpp:107
static void SendPacket(NETSOCKET Socket, NETADDR *pAddr, CNetPacketConstruct *pPacket, SECURITY_TOKEN SecurityToken, bool Sixup=false)
Definition network.cpp:166
static std::optional< int > UnpackPacketFlags(unsigned char *pBuffer, int Size)
Definition network.cpp:245
static void SendControlMsg(NETSOCKET Socket, NETADDR *pAddr, int Ack, int ControlMsg, const void *pExtra, int ExtraSize, SECURITY_TOKEN SecurityToken, bool Sixup=false)
Definition network.cpp:368
static IOHANDLE ms_DataLogSent
Definition network.h:608
static bool IsSeqInBackroom(int Seq, int Ack)
Definition network.cpp:422
static int Compress(const void *pData, int DataSize, void *pOutput, int OutputSize)
Definition network.cpp:481
static void CloseLog()
Definition network.cpp:464
static IOHANDLE ms_DataLogRecv
Definition network.h:609
static CHuffman ms_Huffman
Definition network.h:610
static void OpenLog(IOHANDLE DataLogSent, IOHANDLE DataLogRecv)
Definition network.cpp:445
Definition network.h:142
int m_Size
Definition network.h:145
int m_Flags
Definition network.h:144
int m_Sequence
Definition network.h:146
unsigned char * Unpack(unsigned char *pData, int Split=4)
Definition network.cpp:409
unsigned char * Pack(unsigned char *pData, int Split=4) const
Definition network.cpp:396
Definition network.h:153
int m_Flags
Definition network.h:155
int64_t m_FirstSendTime
Definition network.h:161
int m_Sequence
Definition network.h:159
unsigned char * m_pData
Definition network.h:157
int64_t m_LastSendTime
Definition network.h:160
int m_DataSize
Definition network.h:156
Definition network.h:563
int State()
Definition network_client.cpp:174
const char * ErrorString() const
Definition network_client.cpp:193
NETSOCKET m_Socket
Definition network.h:571
void Connect7(const NETADDR *pAddr, int NumAddrs)
Definition network_client.cpp:62
void Connect(const NETADDR *pAddr, int NumAddrs)
Definition network_client.cpp:57
void Disconnect(const char *pReason)
Definition network_client.cpp:43
CStun * m_pStun
Definition network.h:568
int Flush()
Definition network_client.cpp:183
void RefreshStun()
Definition network_client.cpp:203
CONNECTIVITY GetConnectivity(int NetType, NETADDR *pGlobalAddr)
Definition network_client.cpp:208
CNetRecvUnpacker m_RecvUnpacker
Definition network.h:565
void ResetErrorString()
Definition network_client.cpp:67
int Send(CNetChunk *pChunk)
Definition network_client.cpp:137
CNetConnection m_Connection
Definition network.h:564
void FeedStunServer(NETADDR StunServer)
Definition network_client.cpp:198
const NETADDR * ServerAddress() const
Definition network.h:594
void Update()
Definition network_client.cpp:48
int Recv(CNetChunk *pChunk, SECURITY_TOKEN *pResponseToken, bool Sixup)
Definition network_client.cpp:72
CNetTokenCache m_TokenCache
Definition network.h:566
void Close()
Definition network_client.cpp:28
bool Open(NETADDR BindAddr)
Definition network_client.cpp:8
void ConnectAddresses(const NETADDR **ppAddrs, int *pNumAddrs) const
Definition network.h:595
int NetType() const
Definition network.h:592
bool GotProblems(int64_t MaxLatency) const
Definition network_client.cpp:188
Definition network.h:219
void SendControl(int ControlMsg, const void *pExtra, int ExtraSize)
Definition network_conn.cpp:193
const NETADDR * PeerAddress() const
Definition network.h:305
void SetError(const char *pString)
Definition network_conn.cpp:65
void SetToken7(TOKEN Token)
Definition network_conn.cpp:261
void Disconnect(const char *pReason)
Definition network_conn.cpp:276
bool m_UnknownSeq
Definition network.h:245
void SendConnect()
Definition network_conn.cpp:183
int Connect7(const NETADDR *pAddr, int NumAddrs)
Definition network_conn.cpp:239
void DirectInit(const NETADDR &Addr, SECURITY_TOKEN SecurityToken, SECURITY_TOKEN Token, bool Sixup)
Definition network_conn.cpp:302
bool IsSixup() const
Definition network.h:268
void SignalResend()
Definition network_conn.cpp:95
EState m_State
Definition network.h:242
const char * ErrorString() const
Definition network.h:317
void Resend()
Definition network_conn.cpp:206
void ResendChunk(CNetChunkResend *pResend)
Definition network_conn.cpp:200
void ConnectAddresses(const NETADDR **ppAddrs, int *pNumAddrs) const
Definition network.h:310
NETADDR m_PeerAddr
Definition network.h:259
const std::array< char, NETADDR_MAXSTRSIZE > & PeerAddressString(bool IncludePort) const
Definition network.h:306
NETADDR m_aConnectAddrs[16]
Definition network.h:257
int Feed(CNetPacketConstruct *pPacket, NETADDR *pAddr, SECURITY_TOKEN SecurityToken=NET_SECURITY_TOKEN_UNSUPPORTED, SECURITY_TOKEN ResponseToken=NET_SECURITY_TOKEN_UNSUPPORTED)
Definition network_conn.cpp:321
void AckChunks(int Ack)
Definition network_conn.cpp:80
void ResetStats()
Definition network_conn.cpp:23
int64_t m_LastRecvTime
Definition network.h:250
int Flush()
Definition network_conn.cpp:100
char m_aErrorString[256]
Definition network.h:253
int QueueChunkEx(int Flags, int DataSize, const void *pData, int Sequence)
Definition network_conn.cpp:122
unsigned short m_Ack
Definition network.h:240
NETSTATS m_Stats
Definition network.h:261
CStaticRingBuffer< CNetChunkResend, NET_CONN_BUFFERSIZE > * ResendBuffer()
Definition network.h:326
void SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SECURITY_TOKEN SecurityToken, CStaticRingBuffer< CNetChunkResend, NET_CONN_BUFFERSIZE > *pResendBuffer, bool Sixup)
Definition network_conn.cpp:590
int64_t m_LastSendTime
Definition network.h:251
void ClearPeerAddr()
Definition network_conn.cpp:16
void SendControlWithToken7(int ControlMsg, SECURITY_TOKEN ResponseToken)
Definition network_conn.cpp:232
unsigned short m_Sequence
Definition network.h:239
void Reset(bool Rejoin=false)
Definition network_conn.cpp:30
SECURITY_TOKEN m_Token
Definition network.h:336
EState State() const
Definition network.h:304
int m_NumConnectAddrs
Definition network.h:258
void ResetErrorString()
Definition network.h:316
int Update()
Definition network_conn.cpp:516
std::array< char, NETADDR_MAXSTRSIZE > m_aPeerAddrStrNoPort
Definition network.h:264
EState
Definition network.h:227
int SecurityToken() const
Definition network.h:325
NETSOCKET m_Socket
Definition network.h:260
int AckSequence() const
Definition network.h:323
int64_t m_LastUpdateTime
Definition network.h:249
std::array< char, NETADDR_MAXSTRSIZE > m_aPeerAddrStr
Definition network.h:263
void SetSequence(int Sequence)
Definition network.h:333
bool m_BlockCloseMsg
Definition network.h:244
bool m_TimeoutSituation
Definition network.h:286
int64_t ConnectTime() const
Definition network.h:321
unsigned short m_PeerAck
Definition network.h:241
CStaticRingBuffer< CNetChunkResend, NET_CONN_BUFFERSIZE > m_Buffer
Definition network.h:247
class CNetBase * m_pNetBase
Definition network.h:267
int Connect(const NETADDR *pAddr, int NumAddrs)
Definition network_conn.cpp:212
void SetPeerAddr(const NETADDR *pAddr)
Definition network_conn.cpp:9
const char * ErrorString()
Definition network_conn.cpp:60
int SeqSequence() const
Definition network.h:324
int64_t LastRecvTime() const
Definition network.h:320
static TOKEN GenerateToken7(const NETADDR *pPeerAddr)
Definition network_conn.cpp:269
bool m_Sixup
Definition network.h:335
SECURITY_TOKEN m_SecurityToken
Definition network.h:236
CNetPacketConstruct m_Construct
Definition network.h:255
int m_RemoteClosed
Definition network.h:243
void Init(NETSOCKET Socket, bool BlockCloseMsg)
Definition network_conn.cpp:70
void SetUnknownSeq()
Definition network.h:332
int QueueChunk(int Flags, int DataSize, const void *pData)
Definition network_conn.cpp:176
bool m_TimeoutProtected
Definition network.h:285
Definition network.h:490
CNetBan * m_pNetBan
Definition network.h:497
CNetBan * NetBan() const
Definition network.h:524
void SetCallbacks(NETFUNC_NEWCLIENT_CON pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser)
Definition network_console.cpp:35
CNetRecvUnpacker m_RecvUnpacker
Definition network.h:504
int Send(int ClientId, const char *pLine)
Definition network_console.cpp:148
void Drop(int ClientId, const char *pReason)
Definition network_console.cpp:56
void Close()
Definition network_console.cpp:42
NETSOCKET m_Socket
Definition network.h:496
int AcceptClient(NETSOCKET Socket, const NETADDR *pAddr)
Definition network_console.cpp:64
void Update()
Definition network_console.cpp:116
NETFUNC_DELCLIENT m_pfnDelClient
Definition network.h:501
NETFUNC_NEWCLIENT_CON m_pfnNewClient
Definition network.h:500
int Recv(char *pLine, int MaxLength, int *pClientId=nullptr)
Definition network_console.cpp:134
void * m_pUser
Definition network.h:502
CSlot m_aSlots[NET_MAX_CONSOLE_CLIENTS]
Definition network.h:498
bool Open(NETADDR BindAddr, CNetBan *pNetBan)
Definition network_console.cpp:8
const NETADDR * ClientAddr(int ClientId) const
Definition network.h:523
Definition network.h:165
unsigned char m_aExtraData[NET_CONNLESS_EXTRA_SIZE]
Definition network.h:172
int m_Ack
Definition network.h:168
int m_DataSize
Definition network.h:170
int m_NumChunks
Definition network.h:169
unsigned char m_aChunkData[NET_MAX_PAYLOAD]
Definition network.h:171
int m_Flags
Definition network.h:167
Definition network.h:378
bool m_Valid
Definition network.h:380
void Start(const NETADDR *pAddr, CNetConnection *pConnection, int ClientId)
Definition network.cpp:29
int FetchChunk(CNetChunk *pChunk)
Definition network.cpp:39
int m_ClientId
Definition network.h:385
void Clear()
Definition network.cpp:24
NETADDR m_Addr
Definition network.h:382
CNetRecvUnpacker()
Definition network.h:389
int m_CurrentChunk
Definition network.h:384
unsigned char m_aBuffer[NET_MAX_PACKETSIZE]
Definition network.h:387
CNetPacketConstruct m_Data
Definition network.h:386
CNetConnection * m_pConnection
Definition network.h:383
Definition network.h:397
int TryAcceptClient(NETADDR &Addr, SECURITY_TOKEN SecurityToken, bool VanillaAuth=false, bool Sixup=false, SECURITY_TOKEN Token=0)
Definition network_server.cpp:203
NETFUNC_NEWCLIENT m_pfnNewClient
Definition network.h:418
CNetBan * NetBan() const
Definition network.h:469
int m_MaxClients
Definition network.h:415
void SendMsgs(NETADDR &Addr, const CPacker **ppMsgs, int Num)
Definition network_server.cpp:271
bool Connlimit(NETADDR Addr)
Definition network_server.cpp:170
int GetClientSlot(const NETADDR &Addr)
Definition network_server.cpp:549
void Close()
Definition network_server.cpp:86
NETFUNC_CLIENTREJOIN m_pfnClientRejoin
Definition network.h:421
int MaxClients() const
Definition network.h:471
int64_t m_VConnFirst
Definition network.h:427
unsigned char m_aSecurityTokenSeed[16]
Definition network.h:424
CSlot m_aSlots[NET_MAX_CLIENTS]
Definition network.h:414
CNetBan * m_pNetBan
Definition network.h:413
void Update()
Definition network_server.cpp:106
const std::array< char, NETADDR_MAXSTRSIZE > & ClientAddrString(int ClientId, bool IncludePort) const
Definition network.h:465
int SetCallbacks(NETFUNC_NEWCLIENT pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser)
Definition network_server.cpp:68
int NumClientsWithAddr(NETADDR Addr)
Definition network_server.cpp:152
void SetMaxClientsPerIp(int Max)
Definition network_server.cpp:727
void ResetErrorString(int ClientId)
Definition network_server.cpp:747
int NetType() const
Definition network.h:470
CSpamConn m_aSpamConns[NET_CONNLIMIT_IPS]
Definition network.h:430
NETFUNC_NEWCLIENT_NOAUTH m_pfnNewClientNoAuth
Definition network.h:419
bool Open(NETADDR BindAddr, CNetBan *pNetBan, int MaxClients, int MaxClientsPerIp)
Definition network_server.cpp:40
int OnSixupCtrlMsg(NETADDR &Addr, CNetChunk *pChunk, int ControlMsg, const CNetPacketConstruct &Packet, SECURITY_TOKEN &ResponseToken, SECURITY_TOKEN Token)
Definition network_server.cpp:513
int Send(CNetChunk *pChunk)
Definition network_server.cpp:681
int Recv(CNetChunk *pChunk, SECURITY_TOKEN *pResponseToken)
Definition network_server.cpp:585
NETSOCKET m_Socket
Definition network.h:412
NETADDR m_Address
Definition network.h:411
void OnTokenCtrlMsg(NETADDR &Addr, int ControlMsg, const CNetPacketConstruct &Packet)
Definition network_server.cpp:482
int m_VConnNum
Definition network.h:428
bool HasSecurityToken(int ClientId) const
Definition network.h:466
void * m_pUser
Definition network.h:422
NETADDR Address() const
Definition network.h:467
bool ClientExists(const NETADDR &Addr)
Definition network.h:438
SECURITY_TOKEN GetGlobalToken()
Definition network_server.cpp:120
void SetTimeoutProtected(int ClientId)
Definition network_server.cpp:742
const char * ErrorString(int ClientId)
Definition network_server.cpp:752
NETSOCKET Socket() const
Definition network.h:468
void OnConnCtrlMsg(NETADDR &Addr, int ClientId, int ControlMsg, const CNetPacketConstruct &Packet)
Definition network_server.cpp:445
const NETADDR * ClientAddr(int ClientId) const
Definition network.h:464
void SendControl(NETADDR &Addr, int ControlMsg, const void *pExtra, int ExtraSize, SECURITY_TOKEN SecurityToken)
Definition network_server.cpp:147
NETFUNC_DELCLIENT m_pfnDelClient
Definition network.h:420
bool SetTimedOut(int ClientId, int OrigId)
Definition network_server.cpp:732
SECURITY_TOKEN GetVanillaToken(const NETADDR &Addr)
Definition network_server.cpp:141
void Drop(int ClientId, const char *pReason)
Definition network_server.cpp:96
void OnPreConnMsg(NETADDR &Addr, CNetPacketConstruct &Packet)
Definition network_server.cpp:297
SECURITY_TOKEN GetToken(const NETADDR &Addr)
Definition network_server.cpp:125
void SendTokenSixup(NETADDR &Addr, SECURITY_TOKEN Token)
Definition network_server.cpp:719
int m_MaxClientsPerIp
Definition network.h:416
CNetRecvUnpacker m_RecvUnpacker
Definition network.h:432
Definition network.h:549
int64_t m_Expiry
Definition network.h:553
NETADDR m_Addr
Definition network.h:551
TOKEN m_Token
Definition network.h:552
Definition network.h:540
int64_t m_Expiry
Definition network.h:545
NETADDR m_Addr
Definition network.h:542
unsigned char m_aData[NET_MAX_PAYLOAD]
Definition network.h:544
int m_DataSize
Definition network.h:543
Definition network.h:528
NETSOCKET m_Socket
Definition network.h:556
std::vector< CConnlessPacketInfo > m_ConnlessPackets
Definition network.h:558
void SendPacketConnless(CNetChunk *pChunk)
Definition network.cpp:501
std::vector< CAddressInfo > m_TokenCache
Definition network.h:557
void Init(NETSOCKET Socket)
Definition network.cpp:496
TOKEN GetToken(const NETADDR *pAddr)
Definition network.cpp:571
void FetchToken(NETADDR *pAddr)
Definition network.cpp:535
void Update()
Definition network.cpp:591
TOKEN GenerateToken()
Definition network.cpp:584
void AddToken(const NETADDR *pAddr, TOKEN Token)
Definition network.cpp:540
Definition packer.h:38
Definition stun.h:8
Definition network.h:187
int m_Index
Definition network.h:188
bool m_HaveStunServer
Definition network.h:191
void FeedStunServer(NETADDR StunServer)
Definition network_stun.cpp:48
void Refresh()
Definition network_stun.cpp:60
NETADDR m_StunServer
Definition network.h:192
int64_t m_LastResponse
Definition network.h:195
CONNECTIVITY GetConnectivity(NETADDR *pGlobalAddr)
Definition network_stun.cpp:113
NETADDR m_Addr
Definition network.h:194
bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize)
Definition network_stun.cpp:83
NETSOCKET m_Socket
Definition network.h:189
int m_NumUnsuccessfulTries
Definition network.h:197
int64_t m_NextTry
Definition network.h:196
bool m_HaveAddr
Definition network.h:193
CStunData m_Stun
Definition network.h:190
void Update()
Definition network_stun.cpp:65
Definition network.h:185
CProtocol m_aProtocols[2]
Definition network.h:207
void Update()
Definition network_stun.cpp:164
bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize)
Definition network_stun.cpp:172
void Refresh()
Definition network_stun.cpp:156
CONNECTIVITY GetConnectivity(int NetType, NETADDR *pGlobalAddr)
Definition network_stun.cpp:182
void FeedStunServer(NETADDR StunServer)
Definition network_stun.cpp:146
Definition vmath.h:15
int net_socket_type(NETSOCKET sock)
Definition system.cpp:1667
void * IOHANDLE
Definition logger.h:12
int(* NETFUNC_NEWCLIENT_CON)(int ClientId, void *pUser)
Definition network.h:123
@ NET_TOKEN_NONE
Definition network.h:102
@ NET_TOKEN_MAX
Definition network.h:101
@ NET_TOKENREQUEST_DATASIZE
Definition network.h:105
@ NET_TOKEN_MASK
Definition network.h:103
void WriteSecurityToken(unsigned char *pData, SECURITY_TOKEN Token)
Definition network.cpp:19
@ NET_SECURITY_TOKEN_UNKNOWN
Definition network.h:118
@ NET_SECURITY_TOKEN_UNSUPPORTED
Definition network.h:119
@ NETSTATE_CONNECTING
Definition network.h:58
@ NETSENDFLAG_EXTENDED
Definition network.h:55
@ NETSENDFLAG_VITAL
Definition network.h:52
@ NETSTATE_OFFLINE
Definition network.h:57
@ NETSENDFLAG_CONNLESS
Definition network.h:53
@ NETSTATE_ONLINE
Definition network.h:59
@ NETSENDFLAG_FLUSH
Definition network.h:54
int(* NETFUNC_DELCLIENT)(int ClientId, const char *pReason, void *pUser)
Definition network.h:122
int(* NETFUNC_NEWCLIENT)(int ClientId, void *pUser, bool Sixup)
Definition network.h:124
int SECURITY_TOKEN
Definition network.h:108
const unsigned char SECURITY_TOKEN_MAGIC[4]
Definition network.cpp:12
unsigned int TOKEN
Definition network.h:109
CONNECTIVITY
Definition network.h:176
int(* NETFUNC_CLIENTREJOIN)(int ClientId, void *pUser)
Definition network.h:126
SECURITY_TOKEN ToSecurityToken(const unsigned char *pData)
Definition network.cpp:14
int(* NETFUNC_NEWCLIENT_NOAUTH)(int ClientId, void *pUser)
Definition network.h:125
@ NET_CTRLMSG_KEEPALIVE
Definition network.h:86
@ NET_CONNLESS_EXTRA_SIZE
Definition network.h:68
@ NET_CONNLIMIT_IPS
Definition network.h:94
@ NET_CHUNKFLAG_RESEND
Definition network.h:84
@ NET_PACKETFLAG_COMPRESSION
Definition network.h:79
@ NET_TOKENCACHE_PACKETEXPIRY
Definition network.h:97
@ NET_MAX_CONSOLE_CLIENTS
Definition network.h:70
@ NET_PACKETFLAG_CONNLESS
Definition network.h:77
@ NET_MAX_PACKET_CHUNKS
Definition network.h:72
@ NET_TOKENCACHE_ADDRESSEXPIRY
Definition network.h:96
@ NET_CTRLMSG_CLOSE
Definition network.h:90
@ NET_MAX_CLIENTS
Definition network.h:69
@ NET_MAX_PACKETSIZE
Definition network.h:64
@ NET_PACKETFLAG_RESEND
Definition network.h:78
@ NET_CHUNKFLAG_VITAL
Definition network.h:83
@ NET_MAX_PAYLOAD
Definition network.h:65
@ NET_CTRLMSG_CONNECT
Definition network.h:87
@ NET_PACKETFLAG_CONTROL
Definition network.h:76
@ NET_CTRLMSG_CONNECTACCEPT
Definition network.h:88
@ NET_PACKETFLAG_UNUSED
Definition network.h:74
@ NET_MAX_SEQUENCE
Definition network.h:71
@ NET_PACKETFLAG_TOKEN
Definition network.h:75
@ NET_CTRLMSG_ACCEPT
Definition network.h:89
@ NET_PACKETHEADERSIZE
Definition network.h:67
@ NET_PACKETFLAG_EXTENDED
Definition network.h:81
@ NET_CONN_BUFFERSIZE
Definition network.h:92
@ NET_MAX_CHUNKHEADERSIZE
Definition network.h:66
Definition network.h:129
int m_DataSize
Definition network.h:135
unsigned char m_aExtraData[NET_CONNLESS_EXTRA_SIZE]
Definition network.h:138
const void * m_pData
Definition network.h:136
NETADDR m_Address
Definition network.h:133
int m_Flags
Definition network.h:134
int m_ClientId
Definition network.h:132
Definition network.h:492
CConsoleNetConnection m_Connection
Definition network.h:493
Definition network.h:399
CNetConnection m_Connection
Definition network.h:401
Definition network.h:405
NETADDR m_Addr
Definition network.h:406
int m_Conns
Definition network.h:408
int64_t m_Time
Definition network.h:407
Definition types.h:72
Definition system.cpp:115
Definition types.h:92