DDraceNetwork Docs
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/math.h>
10#include <base/system.h>
11
12#include <array>
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{
57
61
64};
65
66enum
67{
69
78
85
92 // NOT SENT VIA THE NETWORK DIRECTLY:
94
97
104
106
108
110
113};
114enum
115{
116 NET_TOKEN_MAX = 0xffffffff,
119
121};
122
123typedef int SECURITY_TOKEN;
124typedef unsigned int TOKEN;
125
126SECURITY_TOKEN ToSecurityToken(const unsigned char *pData);
127void WriteSecurityToken(unsigned char *pData, SECURITY_TOKEN Token);
128
129extern const unsigned char SECURITY_TOKEN_MAGIC[4];
130
131enum
132{
135};
136
137typedef int (*NETFUNC_DELCLIENT)(int ClientId, const char *pReason, void *pUser);
138typedef int (*NETFUNC_NEWCLIENT_CON)(int ClientId, void *pUser);
139typedef int (*NETFUNC_NEWCLIENT)(int ClientId, void *pUser, bool Sixup);
140typedef int (*NETFUNC_NEWCLIENT_NOAUTH)(int ClientId, void *pUser);
141typedef int (*NETFUNC_CLIENTREJOIN)(int ClientId, void *pUser);
142
144{
145 // -1 means that it's a stateless packet
146 // 0 on the client means the server
148 NETADDR m_Address; // only used when client_id == -1
151 const void *m_pData;
152 // only used if the flags contain NETSENDFLAG_EXTENDED and NETSENDFLAG_CONNLESS
153 unsigned char m_aExtraData[4];
154};
155
157{
158public:
162
163 unsigned char *Pack(unsigned char *pData, int Split = 4) const;
164 unsigned char *Unpack(unsigned char *pData, int Split = 4);
165};
166
168{
169public:
172 unsigned char *m_pData;
173
177};
178
180{
181public:
183 int m_Ack;
187 unsigned char m_aExtraData[4];
188};
189
190enum class CONNECTIVITY
191{
192 UNKNOWN,
193 CHECKING,
195 REACHABLE,
197};
198
199class CStun
200{
202 {
206 bool m_HaveStunServer = false;
208 bool m_HaveAddr = false;
210 int64_t m_LastResponse = -1;
211 int64_t m_NextTry = -1;
213
214 public:
215 CProtocol(int Index, NETSOCKET Socket);
216 void FeedStunServer(NETADDR StunServer);
217 void Refresh();
218 void Update();
219 bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize);
221 };
223
224public:
225 CStun(NETSOCKET Socket);
226 void FeedStunServer(NETADDR StunServer);
227 void Refresh();
228 void Update();
229 bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize);
230 CONNECTIVITY GetConnectivity(int NetType, NETADDR *pGlobalAddr);
231};
232
234{
235 // TODO: is this needed because this needs to be aware of
236 // the ack sequencing number and is also responible for updating
237 // that. this should be fixed.
238 friend class CNetRecvUnpacker;
239
240private:
241 unsigned short m_Sequence;
242 unsigned short m_Ack;
243 unsigned short m_PeerAck;
244 unsigned m_State;
245
246public:
248
249private:
253
255
259
260 char m_aErrorString[256];
261
263
269
270 std::array<char, NETADDR_MAXSTRSIZE> m_aPeerAddrStr;
271 std::array<char, NETADDR_MAXSTRSIZE> m_aPeerAddrStrNoPort;
272 // client 0.7
273 static TOKEN GenerateToken7(const NETADDR *pPeerAddr);
275 bool IsSixup() { return m_Sixup; }
276
277 //
278 void SetPeerAddr(const NETADDR *pAddr);
279 void ClearPeerAddr();
280 void ResetStats();
281 void SetError(const char *pString);
282 void AckChunks(int Ack);
283
284 int QueueChunkEx(int Flags, int DataSize, const void *pData, int Sequence);
285 void SendConnect();
286 void SendControl(int ControlMsg, const void *pExtra, int ExtraSize);
287 void SendControlWithToken7(int ControlMsg, SECURITY_TOKEN ResponseToken);
288 void ResendChunk(CNetChunkResend *pResend);
289 void Resend();
290
291public:
294
295 void SetToken7(TOKEN Token);
296
297 void Reset(bool Rejoin = false);
298 void Init(NETSOCKET Socket, bool BlockCloseMsg);
299 int Connect(const NETADDR *pAddr, int NumAddrs);
300 int Connect7(const NETADDR *pAddr, int NumAddrs);
301 void Disconnect(const char *pReason);
302
303 int Update();
304 int Flush();
305
307 int QueueChunk(int Flags, int DataSize, const void *pData);
308
309 const char *ErrorString();
310 void SignalResend();
311 int State() const { return m_State; }
312 const NETADDR *PeerAddress() const { return &m_PeerAddr; }
313 const std::array<char, NETADDR_MAXSTRSIZE> &PeerAddressString(bool IncludePort) const
314 {
315 return IncludePort ? m_aPeerAddrStr : m_aPeerAddrStrNoPort;
316 }
317 void ConnectAddresses(const NETADDR **ppAddrs, int *pNumAddrs) const
318 {
319 *ppAddrs = m_aConnectAddrs;
320 *pNumAddrs = m_NumConnectAddrs;
321 }
322
324 const char *ErrorString() const { return m_aErrorString; }
325
326 // Needed for GotProblems in NetClient
327 int64_t LastRecvTime() const { return m_LastRecvTime; }
328 int64_t ConnectTime() const { return m_LastUpdateTime; }
329
330 int AckSequence() const { return m_Ack; }
331 int SeqSequence() const { return m_Sequence; }
332 int SecurityToken() const { return m_SecurityToken; }
334
335 void SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SECURITY_TOKEN SecurityToken, CStaticRingBuffer<CNetChunkResend, NET_CONN_BUFFERSIZE> *pResendBuffer, bool Sixup);
336
337 // anti spoof
338 void DirectInit(const NETADDR &Addr, SECURITY_TOKEN SecurityToken, SECURITY_TOKEN Token, bool Sixup);
339 void SetUnknownSeq() { m_UnknownSeq = true; }
340 void SetSequence(int Sequence) { m_Sequence = Sequence; }
341
344};
345
347{
348private:
350
353
356
357 char m_aErrorString[256];
358
361
362public:
363 void Init(NETSOCKET Socket, const NETADDR *pAddr);
364 void Disconnect(const char *pReason);
365
366 int State() const { return m_State; }
367 const NETADDR *PeerAddress() const { return &m_PeerAddr; }
368 const char *ErrorString() const { return m_aErrorString; }
369
370 void Reset();
371 int Update();
372 int Send(const char *pLine);
373 int Recv(char *pLine, int MaxLength);
374};
375
377{
378public:
380
387
389 void Clear();
390 void Start(const NETADDR *pAddr, CNetConnection *pConnection, int ClientId);
391 int FetchChunk(CNetChunk *pChunk);
392};
393
394// server side
396{
397 struct CSlot
398 {
399 public:
401 };
402
404 {
406 int64_t m_Time;
408 };
409
416
421 void *m_pUser;
422
423 int m_NumConAttempts; // log flooding attacks
425 unsigned char m_aSecurityTokenSeed[16];
426
427 // vanilla connect flood detection
430
432
434
435 void OnTokenCtrlMsg(NETADDR &Addr, int ControlMsg, const CNetPacketConstruct &Packet);
436 int OnSixupCtrlMsg(NETADDR &Addr, CNetChunk *pChunk, int ControlMsg, const CNetPacketConstruct &Packet, SECURITY_TOKEN &ResponseToken, SECURITY_TOKEN Token);
437 void OnPreConnMsg(NETADDR &Addr, CNetPacketConstruct &Packet);
438 void OnConnCtrlMsg(NETADDR &Addr, int ClientId, int ControlMsg, const CNetPacketConstruct &Packet);
439 bool ClientExists(const NETADDR &Addr) { return GetClientSlot(Addr) != -1; }
440 int GetClientSlot(const NETADDR &Addr);
441 void SendControl(NETADDR &Addr, int ControlMsg, const void *pExtra, int ExtraSize, SECURITY_TOKEN SecurityToken);
442
443 int TryAcceptClient(NETADDR &Addr, SECURITY_TOKEN SecurityToken, bool VanillaAuth = false, bool Sixup = false, SECURITY_TOKEN Token = 0);
444 int NumClientsWithAddr(NETADDR Addr);
445 bool Connlimit(NETADDR Addr);
446 void SendMsgs(NETADDR &Addr, const CPacker **ppMsgs, int Num);
447
448public:
449 int SetCallbacks(NETFUNC_NEWCLIENT pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser);
450 int SetCallbacks(NETFUNC_NEWCLIENT pfnNewClient, NETFUNC_NEWCLIENT_NOAUTH pfnNewClientNoAuth, NETFUNC_CLIENTREJOIN pfnClientRejoin, NETFUNC_DELCLIENT pfnDelClient, void *pUser);
451
452 //
453 bool Open(NETADDR BindAddr, CNetBan *pNetBan, int MaxClients, int MaxClientsPerIp);
454 int Close();
455
456 //
457 int Recv(CNetChunk *pChunk, SECURITY_TOKEN *pResponseToken);
458 int Send(CNetChunk *pChunk);
459 int Update();
460
461 //
462 int Drop(int ClientId, const char *pReason);
463
464 // status requests
465 const NETADDR *ClientAddr(int ClientId) const { return m_aSlots[ClientId].m_Connection.PeerAddress(); }
466 const std::array<char, NETADDR_MAXSTRSIZE> &ClientAddrString(int ClientId, bool IncludePort) const { return m_aSlots[ClientId].m_Connection.PeerAddressString(IncludePort); }
467 bool HasSecurityToken(int ClientId) const { return m_aSlots[ClientId].m_Connection.SecurityToken() != NET_SECURITY_TOKEN_UNSUPPORTED; }
468 NETADDR Address() const { return m_Address; }
469 NETSOCKET Socket() const { return m_Socket; }
470 CNetBan *NetBan() const { return m_pNetBan; }
471 int NetType() const { return net_socket_type(m_Socket); }
472 int MaxClients() const { return m_MaxClients; }
473
474 void SendTokenSixup(NETADDR &Addr, SECURITY_TOKEN Token);
475 int SendConnlessSixup(CNetChunk *pChunk, SECURITY_TOKEN ResponseToken);
476
477 //
478 void SetMaxClientsPerIp(int Max);
479 bool SetTimedOut(int ClientId, int OrigId);
480 void SetTimeoutProtected(int ClientId);
481
482 int ResetErrorString(int ClientId);
483 const char *ErrorString(int ClientId);
484
485 // anti spoof
487 SECURITY_TOKEN GetToken(const NETADDR &Addr);
488 // vanilla token/gametick shouldn't be negative
490};
491
493{
494 struct CSlot
495 {
497 };
498
502
505 void *m_pUser;
506
508
509public:
510 void SetCallbacks(NETFUNC_NEWCLIENT_CON pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser);
511
512 //
513 bool Open(NETADDR BindAddr, CNetBan *pNetBan);
514 int Close();
515
516 //
517 int Recv(char *pLine, int MaxLength, int *pClientId = nullptr);
518 int Send(int ClientId, const char *pLine);
519 int Update();
520
521 //
522 int AcceptClient(NETSOCKET Socket, const NETADDR *pAddr);
523 int Drop(int ClientId, const char *pReason);
524
525 // status requests
526 const NETADDR *ClientAddr(int ClientId) const { return m_aSlots[ClientId].m_Connection.PeerAddress(); }
527 CNetBan *NetBan() const { return m_pNetBan; }
528};
529
531{
532public:
533 void Init(NETSOCKET Socket);
534 void SendPacketConnless(CNetChunk *pChunk);
535 void FetchToken(NETADDR *pAddr);
536 void AddToken(const NETADDR *pAddr, TOKEN Token);
537 TOKEN GetToken(const NETADDR *pAddr);
539 void Update();
540
541private:
543 {
544 public:
547 unsigned char m_aData[NET_MAX_PAYLOAD];
548 int64_t m_Expiry;
549 };
550
552 {
553 public:
556 int64_t m_Expiry;
557 };
558
560 std::vector<CAddressInfo> m_TokenCache;
561 std::vector<CConnlessPacketInfo> m_ConnlessPackets;
562};
563
564// client side
566{
570
571 CStun *m_pStun = nullptr;
572
573public:
575 // openness
576 bool Open(NETADDR BindAddr);
577 int Close();
578
579 // connection state
580 int Disconnect(const char *pReason);
581 int Connect(const NETADDR *pAddr, int NumAddrs);
582 int Connect7(const NETADDR *pAddr, int NumAddrs);
583
584 // communication
585 int Recv(CNetChunk *pChunk, SECURITY_TOKEN *pResponseToken, bool Sixup);
586 int Send(CNetChunk *pChunk);
587
588 // pumping
589 int Update();
590 int Flush();
591
592 int ResetErrorString();
593
594 // error and state
595 int NetType() const { return net_socket_type(m_Socket); }
596 int State();
597 const NETADDR *ServerAddress() const { return m_Connection.PeerAddress(); }
598 void ConnectAddresses(const NETADDR **ppAddrs, int *pNumAddrs) const { m_Connection.ConnectAddresses(ppAddrs, pNumAddrs); }
599 int GotProblems(int64_t MaxLatency) const;
600 const char *ErrorString() const;
601
602 // stun
603 void FeedStunServer(NETADDR StunServer);
604 void RefreshStun();
605 CONNECTIVITY GetConnectivity(int NetType, NETADDR *pGlobalAddr);
606};
607
608// TODO: both, fix these. This feels like a junk class for stuff that doesn't fit anywhere
610{
614
615public:
616 static void OpenLog(IOHANDLE DataLogSent, IOHANDLE DataLogRecv);
617 static void CloseLog();
618 static void Init();
619 static int Compress(const void *pData, int DataSize, void *pOutput, int OutputSize);
620 static int Decompress(const void *pData, int DataSize, void *pOutput, int OutputSize);
621
622 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 SendControlMsgWithToken7(NETSOCKET Socket, NETADDR *pAddr, TOKEN Token, int Ack, int ControlMsg, TOKEN MyToken, bool Extended);
624 static void SendPacketConnless(NETSOCKET Socket, NETADDR *pAddr, const void *pData, int DataSize, bool Extended, unsigned char aExtra[4]);
625 static void SendPacketConnlessWithToken7(NETSOCKET Socket, NETADDR *pAddr, const void *pData, int DataSize, SECURITY_TOKEN Token, SECURITY_TOKEN ResponseToken);
626 static void SendPacket(NETSOCKET Socket, NETADDR *pAddr, CNetPacketConstruct *pPacket, SECURITY_TOKEN SecurityToken, bool Sixup = false, bool NoCompress = false);
627
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:347
bool m_LineEndingDetected
Definition: network.h:359
int State() const
Definition: network.h:366
int m_BufferOffset
Definition: network.h:355
int Send(const char *pLine)
Definition: network_console_conn.cpp:152
char m_aBuffer[NET_MAX_PACKETSIZE]
Definition: network.h:354
char m_aErrorString[256]
Definition: network.h:357
void Reset()
Definition: network_console_conn.cpp:6
const NETADDR * PeerAddress() const
Definition: network.h:367
NETSOCKET m_Socket
Definition: network.h:352
void Disconnect(const char *pReason)
Definition: network_console_conn.cpp:39
char m_aLineEnding[3]
Definition: network.h:360
const char * ErrorString() const
Definition: network.h:368
int Recv(char *pLine, int MaxLength)
Definition: network_console_conn.cpp:89
void Init(NETSOCKET Socket, const NETADDR *pAddr)
Definition: network_console_conn.cpp:28
int Update()
Definition: network_console_conn.cpp:52
int m_State
Definition: network.h:349
NETADDR m_PeerAddr
Definition: network.h:351
Definition: huffman.h:7
Definition: netban.h:27
Definition: network.h:610
static void SendControlMsgWithToken7(NETSOCKET Socket, NETADDR *pAddr, TOKEN Token, int Ack, int ControlMsg, TOKEN MyToken, bool Extended)
Definition: network.cpp:356
static int Decompress(const void *pData, int DataSize, void *pOutput, int OutputSize)
Definition: network.cpp:459
static void SendPacketConnlessWithToken7(NETSOCKET Socket, NETADDR *pAddr, const void *pData, int DataSize, SECURITY_TOKEN Token, SECURITY_TOKEN ResponseToken)
Definition: network.cpp:125
static void Init()
Definition: network.cpp:464
static int UnpackPacket(unsigned char *pBuffer, int Size, CNetPacketConstruct *pPacket, bool &Sixup, SECURITY_TOKEN *pSecurityToken=nullptr, SECURITY_TOKEN *pResponseToken=nullptr)
Definition: network.cpp:220
static void SendPacketConnless(NETSOCKET Socket, NETADDR *pAddr, const void *pData, int DataSize, bool Extended, unsigned char aExtra[4])
Definition: network.cpp:107
static void SendPacket(NETSOCKET Socket, NETADDR *pAddr, CNetPacketConstruct *pPacket, SECURITY_TOKEN SecurityToken, bool Sixup=false, bool NoCompress=false)
Definition: network.cpp:138
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:341
static IOHANDLE ms_DataLogSent
Definition: network.h:611
static bool IsSeqInBackroom(int Seq, int Ack)
Definition: network.cpp:395
static int Compress(const void *pData, int DataSize, void *pOutput, int OutputSize)
Definition: network.cpp:454
static void CloseLog()
Definition: network.cpp:437
static IOHANDLE ms_DataLogRecv
Definition: network.h:612
static CHuffman ms_Huffman
Definition: network.h:613
static void OpenLog(IOHANDLE DataLogSent, IOHANDLE DataLogRecv)
Definition: network.cpp:418
Definition: network.h:157
int m_Size
Definition: network.h:160
int m_Flags
Definition: network.h:159
int m_Sequence
Definition: network.h:161
unsigned char * Unpack(unsigned char *pData, int Split=4)
Definition: network.cpp:382
unsigned char * Pack(unsigned char *pData, int Split=4) const
Definition: network.cpp:369
Definition: network.h:168
int m_Flags
Definition: network.h:170
int64_t m_FirstSendTime
Definition: network.h:176
int m_Sequence
Definition: network.h:174
unsigned char * m_pData
Definition: network.h:172
int64_t m_LastSendTime
Definition: network.h:175
int m_DataSize
Definition: network.h:171
Definition: network.h:566
int State()
Definition: network_client.cpp:167
const char * ErrorString() const
Definition: network_client.cpp:188
int Disconnect(const char *pReason)
Definition: network_client.cpp:39
int ResetErrorString()
Definition: network_client.cpp:68
int Update()
Definition: network_client.cpp:46
int Connect7(const NETADDR *pAddr, int NumAddrs)
Definition: network_client.cpp:62
NETSOCKET m_Socket
Definition: network.h:574
int Connect(const NETADDR *pAddr, int NumAddrs)
Definition: network_client.cpp:56
CStun * m_pStun
Definition: network.h:571
int Close()
Definition: network_client.cpp:27
int Flush()
Definition: network_client.cpp:176
void RefreshStun()
Definition: network_client.cpp:198
CONNECTIVITY GetConnectivity(int NetType, NETADDR *pGlobalAddr)
Definition: network_client.cpp:203
CNetRecvUnpacker m_RecvUnpacker
Definition: network.h:568
int Send(CNetChunk *pChunk)
Definition: network_client.cpp:130
CNetConnection m_Connection
Definition: network.h:567
void FeedStunServer(NETADDR StunServer)
Definition: network_client.cpp:193
int GotProblems(int64_t MaxLatency) const
Definition: network_client.cpp:181
const NETADDR * ServerAddress() const
Definition: network.h:597
int Recv(CNetChunk *pChunk, SECURITY_TOKEN *pResponseToken, bool Sixup)
Definition: network_client.cpp:74
CNetTokenCache m_TokenCache
Definition: network.h:569
bool Open(NETADDR BindAddr)
Definition: network_client.cpp:7
void ConnectAddresses(const NETADDR **ppAddrs, int *pNumAddrs) const
Definition: network.h:598
int NetType() const
Definition: network.h:595
Definition: network.h:234
void SendControl(int ControlMsg, const void *pExtra, int ExtraSize)
Definition: network_conn.cpp:184
const NETADDR * PeerAddress() const
Definition: network.h:312
void SetError(const char *pString)
Definition: network_conn.cpp:63
void SetToken7(TOKEN Token)
Definition: network_conn.cpp:252
void Disconnect(const char *pReason)
Definition: network_conn.cpp:267
bool m_UnknownSeq
Definition: network.h:252
void SendConnect()
Definition: network_conn.cpp:174
int Connect7(const NETADDR *pAddr, int NumAddrs)
Definition: network_conn.cpp:230
void DirectInit(const NETADDR &Addr, SECURITY_TOKEN SecurityToken, SECURITY_TOKEN Token, bool Sixup)
Definition: network_conn.cpp:293
void SignalResend()
Definition: network_conn.cpp:93
int State() const
Definition: network.h:311
const char * ErrorString() const
Definition: network.h:324
void Resend()
Definition: network_conn.cpp:197
bool IsSixup()
Definition: network.h:275
void ResendChunk(CNetChunkResend *pResend)
Definition: network_conn.cpp:191
void ConnectAddresses(const NETADDR **ppAddrs, int *pNumAddrs) const
Definition: network.h:317
NETADDR m_PeerAddr
Definition: network.h:266
const std::array< char, NETADDR_MAXSTRSIZE > & PeerAddressString(bool IncludePort) const
Definition: network.h:313
NETADDR m_aConnectAddrs[16]
Definition: network.h:264
int Feed(CNetPacketConstruct *pPacket, NETADDR *pAddr, SECURITY_TOKEN SecurityToken=NET_SECURITY_TOKEN_UNSUPPORTED, SECURITY_TOKEN ResponseToken=NET_SECURITY_TOKEN_UNSUPPORTED)
Definition: network_conn.cpp:312
void AckChunks(int Ack)
Definition: network_conn.cpp:78
void ResetStats()
Definition: network_conn.cpp:21
int64_t m_LastRecvTime
Definition: network.h:257
int Flush()
Definition: network_conn.cpp:98
char m_aErrorString[256]
Definition: network.h:260
int QueueChunkEx(int Flags, int DataSize, const void *pData, int Sequence)
Definition: network_conn.cpp:116
unsigned short m_Ack
Definition: network.h:242
NETSTATS m_Stats
Definition: network.h:268
CStaticRingBuffer< CNetChunkResend, NET_CONN_BUFFERSIZE > * ResendBuffer()
Definition: network.h:333
void SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SECURITY_TOKEN SecurityToken, CStaticRingBuffer< CNetChunkResend, NET_CONN_BUFFERSIZE > *pResendBuffer, bool Sixup)
Definition: network_conn.cpp:576
int64_t m_LastSendTime
Definition: network.h:258
void ClearPeerAddr()
Definition: network_conn.cpp:14
void SendControlWithToken7(int ControlMsg, SECURITY_TOKEN ResponseToken)
Definition: network_conn.cpp:223
unsigned short m_Sequence
Definition: network.h:241
void Reset(bool Rejoin=false)
Definition: network_conn.cpp:28
SECURITY_TOKEN m_Token
Definition: network.h:343
int m_NumConnectAddrs
Definition: network.h:265
void ResetErrorString()
Definition: network.h:323
int Update()
Definition: network_conn.cpp:502
std::array< char, NETADDR_MAXSTRSIZE > m_aPeerAddrStrNoPort
Definition: network.h:271
int SecurityToken() const
Definition: network.h:332
NETSOCKET m_Socket
Definition: network.h:267
int AckSequence() const
Definition: network.h:330
int64_t m_LastUpdateTime
Definition: network.h:256
std::array< char, NETADDR_MAXSTRSIZE > m_aPeerAddrStr
Definition: network.h:270
void SetSequence(int Sequence)
Definition: network.h:340
bool m_BlockCloseMsg
Definition: network.h:251
bool m_TimeoutSituation
Definition: network.h:293
int64_t ConnectTime() const
Definition: network.h:328
unsigned short m_PeerAck
Definition: network.h:243
CStaticRingBuffer< CNetChunkResend, NET_CONN_BUFFERSIZE > m_Buffer
Definition: network.h:254
unsigned m_State
Definition: network.h:244
class CNetBase * m_pNetBase
Definition: network.h:274
int Connect(const NETADDR *pAddr, int NumAddrs)
Definition: network_conn.cpp:203
void SetPeerAddr(const NETADDR *pAddr)
Definition: network_conn.cpp:7
const char * ErrorString()
Definition: network_conn.cpp:58
int SeqSequence() const
Definition: network.h:331
int64_t LastRecvTime() const
Definition: network.h:327
static TOKEN GenerateToken7(const NETADDR *pPeerAddr)
Definition: network_conn.cpp:260
bool m_Sixup
Definition: network.h:342
SECURITY_TOKEN m_SecurityToken
Definition: network.h:247
CNetPacketConstruct m_Construct
Definition: network.h:262
int m_RemoteClosed
Definition: network.h:250
void Init(NETSOCKET Socket, bool BlockCloseMsg)
Definition: network_conn.cpp:68
void SetUnknownSeq()
Definition: network.h:339
int QueueChunk(int Flags, int DataSize, const void *pData)
Definition: network_conn.cpp:167
bool m_TimeoutProtected
Definition: network.h:292
Definition: network.h:493
CNetBan * m_pNetBan
Definition: network.h:500
CNetBan * NetBan() const
Definition: network.h:527
int Drop(int ClientId, const char *pReason)
Definition: network_console.cpp:45
void SetCallbacks(NETFUNC_NEWCLIENT_CON pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser)
Definition: network_console.cpp:28
int Close()
Definition: network_console.cpp:35
CNetRecvUnpacker m_RecvUnpacker
Definition: network.h:507
int Send(int ClientId, const char *pLine)
Definition: network_console.cpp:138
int Update()
Definition: network_console.cpp:94
NETSOCKET m_Socket
Definition: network.h:499
int AcceptClient(NETSOCKET Socket, const NETADDR *pAddr)
Definition: network_console.cpp:55
NETFUNC_DELCLIENT m_pfnDelClient
Definition: network.h:504
NETFUNC_NEWCLIENT_CON m_pfnNewClient
Definition: network.h:503
int Recv(char *pLine, int MaxLength, int *pClientId=nullptr)
Definition: network_console.cpp:124
void * m_pUser
Definition: network.h:505
CSlot m_aSlots[NET_MAX_CONSOLE_CLIENTS]
Definition: network.h:501
bool Open(NETADDR BindAddr, CNetBan *pNetBan)
Definition: network_console.cpp:8
const NETADDR * ClientAddr(int ClientId) const
Definition: network.h:526
Definition: network.h:180
int m_Ack
Definition: network.h:183
int m_DataSize
Definition: network.h:185
int m_NumChunks
Definition: network.h:184
unsigned char m_aExtraData[4]
Definition: network.h:187
unsigned char m_aChunkData[NET_MAX_PAYLOAD]
Definition: network.h:186
int m_Flags
Definition: network.h:182
Definition: network.h:377
bool m_Valid
Definition: network.h:379
void Start(const NETADDR *pAddr, CNetConnection *pConnection, int ClientId)
Definition: network.cpp:27
int FetchChunk(CNetChunk *pChunk)
Definition: network.cpp:37
int m_ClientId
Definition: network.h:384
void Clear()
Definition: network.cpp:22
NETADDR m_Addr
Definition: network.h:381
CNetRecvUnpacker()
Definition: network.h:388
int m_CurrentChunk
Definition: network.h:383
unsigned char m_aBuffer[NET_MAX_PACKETSIZE]
Definition: network.h:386
CNetPacketConstruct m_Data
Definition: network.h:385
CNetConnection * m_pConnection
Definition: network.h:382
Definition: network.h:396
int TryAcceptClient(NETADDR &Addr, SECURITY_TOKEN SecurityToken, bool VanillaAuth=false, bool Sixup=false, SECURITY_TOKEN Token=0)
Definition: network_server.cpp:200
NETFUNC_NEWCLIENT m_pfnNewClient
Definition: network.h:417
CNetBan * NetBan() const
Definition: network.h:470
int m_MaxClients
Definition: network.h:414
void SendMsgs(NETADDR &Addr, const CPacker **ppMsgs, int Num)
Definition: network_server.cpp:268
bool Connlimit(NETADDR Addr)
Definition: network_server.cpp:167
int GetClientSlot(const NETADDR &Addr)
Definition: network_server.cpp:572
NETFUNC_CLIENTREJOIN m_pfnClientRejoin
Definition: network.h:420
int MaxClients() const
Definition: network.h:472
int Close()
Definition: network_server.cpp:88
int64_t m_VConnFirst
Definition: network.h:428
unsigned char m_aSecurityTokenSeed[16]
Definition: network.h:425
CSlot m_aSlots[NET_MAX_CLIENTS]
Definition: network.h:413
CNetBan * m_pNetBan
Definition: network.h:412
const std::array< char, NETADDR_MAXSTRSIZE > & ClientAddrString(int ClientId, bool IncludePort) const
Definition: network.h:466
int ResetErrorString(int ClientId)
Definition: network_server.cpp:807
int Update()
Definition: network_server.cpp:107
int SetCallbacks(NETFUNC_NEWCLIENT pfnNewClient, NETFUNC_DELCLIENT pfnDelClient, void *pUser)
Definition: network_server.cpp:70
int NumClientsWithAddr(NETADDR Addr)
Definition: network_server.cpp:149
void SetMaxClientsPerIp(int Max)
Definition: network_server.cpp:781
int NetType() const
Definition: network.h:471
CSpamConn m_aSpamConns[NET_CONNLIMIT_IPS]
Definition: network.h:431
NETFUNC_NEWCLIENT_NOAUTH m_pfnNewClientNoAuth
Definition: network.h:418
bool Open(NETADDR BindAddr, CNetBan *pNetBan, int MaxClients, int MaxClientsPerIp)
Definition: network_server.cpp:39
int OnSixupCtrlMsg(NETADDR &Addr, CNetChunk *pChunk, int ControlMsg, const CNetPacketConstruct &Packet, SECURITY_TOKEN &ResponseToken, SECURITY_TOKEN Token)
Definition: network_server.cpp:536
int Drop(int ClientId, const char *pReason)
Definition: network_server.cpp:95
int Send(CNetChunk *pChunk)
Definition: network_server.cpp:718
int Recv(CNetChunk *pChunk, SECURITY_TOKEN *pResponseToken)
Definition: network_server.cpp:612
NETSOCKET m_Socket
Definition: network.h:411
int m_NumConAttempts
Definition: network.h:423
NETADDR m_Address
Definition: network.h:410
void OnTokenCtrlMsg(NETADDR &Addr, int ControlMsg, const CNetPacketConstruct &Packet)
Definition: network_server.cpp:498
int m_VConnNum
Definition: network.h:429
bool HasSecurityToken(int ClientId) const
Definition: network.h:467
void * m_pUser
Definition: network.h:421
NETADDR Address() const
Definition: network.h:468
bool ClientExists(const NETADDR &Addr)
Definition: network.h:439
SECURITY_TOKEN GetGlobalToken()
Definition: network_server.cpp:123
void SetTimeoutProtected(int ClientId)
Definition: network_server.cpp:802
int SendConnlessSixup(CNetChunk *pChunk, SECURITY_TOKEN ResponseToken)
Definition: network_server.cpp:765
const char * ErrorString(int ClientId)
Definition: network_server.cpp:813
NETSOCKET Socket() const
Definition: network.h:469
void OnConnCtrlMsg(NETADDR &Addr, int ClientId, int ControlMsg, const CNetPacketConstruct &Packet)
Definition: network_server.cpp:461
const NETADDR * ClientAddr(int ClientId) const
Definition: network.h:465
void SendControl(NETADDR &Addr, int ControlMsg, const void *pExtra, int ExtraSize, SECURITY_TOKEN SecurityToken)
Definition: network_server.cpp:144
NETFUNC_DELCLIENT m_pfnDelClient
Definition: network.h:419
bool SetTimedOut(int ClientId, int OrigId)
Definition: network_server.cpp:792
SECURITY_TOKEN GetVanillaToken(const NETADDR &Addr)
Definition: network.h:489
void OnPreConnMsg(NETADDR &Addr, CNetPacketConstruct &Packet)
Definition: network_server.cpp:292
SECURITY_TOKEN GetToken(const NETADDR &Addr)
Definition: network_server.cpp:128
void SendTokenSixup(NETADDR &Addr, SECURITY_TOKEN Token)
Definition: network_server.cpp:756
int m_MaxClientsPerIp
Definition: network.h:415
CNetRecvUnpacker m_RecvUnpacker
Definition: network.h:433
int64_t m_TimeNumConAttempts
Definition: network.h:424
Definition: network.h:552
int64_t m_Expiry
Definition: network.h:556
NETADDR m_Addr
Definition: network.h:554
TOKEN m_Token
Definition: network.h:555
Definition: network.h:543
int64_t m_Expiry
Definition: network.h:548
NETADDR m_Addr
Definition: network.h:545
unsigned char m_aData[NET_MAX_PAYLOAD]
Definition: network.h:547
int m_DataSize
Definition: network.h:546
Definition: network.h:531
NETSOCKET m_Socket
Definition: network.h:559
std::vector< CConnlessPacketInfo > m_ConnlessPackets
Definition: network.h:561
void SendPacketConnless(CNetChunk *pChunk)
Definition: network.cpp:474
std::vector< CAddressInfo > m_TokenCache
Definition: network.h:560
void Init(NETSOCKET Socket)
Definition: network.cpp:469
TOKEN GetToken(const NETADDR *pAddr)
Definition: network.cpp:544
void FetchToken(NETADDR *pAddr)
Definition: network.cpp:508
void Update()
Definition: network.cpp:564
TOKEN GenerateToken()
Definition: network.cpp:557
void AddToken(const NETADDR *pAddr, TOKEN Token)
Definition: network.cpp:513
Definition: packer.h:38
Definition: stun.h:8
Definition: network.h:202
int m_Index
Definition: network.h:203
bool m_HaveStunServer
Definition: network.h:206
CProtocol(int Index, NETSOCKET Socket)
Definition: network_stun.cpp:36
void FeedStunServer(NETADDR StunServer)
Definition: network_stun.cpp:46
void Refresh()
Definition: network_stun.cpp:58
NETADDR m_StunServer
Definition: network.h:207
int64_t m_LastResponse
Definition: network.h:210
CONNECTIVITY GetConnectivity(NETADDR *pGlobalAddr)
Definition: network_stun.cpp:111
NETADDR m_Addr
Definition: network.h:209
bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize)
Definition: network_stun.cpp:81
NETSOCKET m_Socket
Definition: network.h:204
int m_NumUnsuccessfulTries
Definition: network.h:212
int64_t m_NextTry
Definition: network.h:211
bool m_HaveAddr
Definition: network.h:208
CStunData m_Stun
Definition: network.h:205
void Update()
Definition: network_stun.cpp:63
Definition: network.h:200
CProtocol m_aProtocols[2]
Definition: network.h:222
void Update()
Definition: network_stun.cpp:162
bool OnPacket(NETADDR Addr, unsigned char *pData, int DataSize)
Definition: network_stun.cpp:170
void Refresh()
Definition: network_stun.cpp:154
CONNECTIVITY GetConnectivity(int NetType, NETADDR *pGlobalAddr)
Definition: network_stun.cpp:180
CStun(NETSOCKET Socket)
Definition: network_stun.cpp:139
void FeedStunServer(NETADDR StunServer)
Definition: network_stun.cpp:144
void * IOHANDLE
Definition: logger.h:12
constexpr T absolute(T a)
Definition: math.h:155
@ NET_SECURITY_TOKEN_UNKNOWN
Definition: network.h:133
@ NET_SECURITY_TOKEN_UNSUPPORTED
Definition: network.h:134
int(* NETFUNC_NEWCLIENT_CON)(int ClientId, void *pUser)
Definition: network.h:138
@ NET_TOKEN_NONE
Definition: network.h:117
@ NET_TOKEN_MAX
Definition: network.h:116
@ NET_TOKENREQUEST_DATASIZE
Definition: network.h:120
@ NET_TOKEN_MASK
Definition: network.h:118
@ NETSTATE_CONNECTING
Definition: network.h:59
@ NETSENDFLAG_EXTENDED
Definition: network.h:56
@ NETFLAG_ALLOWSTATELESS
Definition: network.h:52
@ NETSENDFLAG_VITAL
Definition: network.h:53
@ NETSTATE_OFFLINE
Definition: network.h:58
@ NETSENDFLAG_CONNLESS
Definition: network.h:54
@ NETSTATE_ONLINE
Definition: network.h:60
@ NETBANTYPE_DROP
Definition: network.h:63
@ NETBANTYPE_SOFT
Definition: network.h:62
@ NETSENDFLAG_FLUSH
Definition: network.h:55
void WriteSecurityToken(unsigned char *pData, SECURITY_TOKEN Token)
Definition: network.cpp:17
@ NET_CTRLMSG_KEEPALIVE
Definition: network.h:98
@ NET_ENUM_TERMINATOR
Definition: network.h:109
@ NET_CONNSTATE_ONLINE
Definition: network.h:83
@ NET_CONNLIMIT_IPS
Definition: network.h:107
@ NET_VERSION
Definition: network.h:68
@ NET_CHUNKFLAG_RESEND
Definition: network.h:96
@ NET_PACKETFLAG_COMPRESSION
Definition: network.h:91
@ NET_CONNSTATE_TOKEN
Definition: network.h:80
@ NET_TOKENCACHE_PACKETEXPIRY
Definition: network.h:112
@ NET_MAX_CONSOLE_CLIENTS
Definition: network.h:75
@ NET_PACKETFLAG_CONNLESS
Definition: network.h:89
@ NET_CONNSTATE_ERROR
Definition: network.h:84
@ NET_SEQUENCE_MASK
Definition: network.h:77
@ NET_TOKENCACHE_ADDRESSEXPIRY
Definition: network.h:111
@ NET_CTRLMSG_CLOSE
Definition: network.h:102
@ NET_MAX_CLIENTS
Definition: network.h:74
@ NET_MAX_PACKETSIZE
Definition: network.h:70
@ NET_PACKETFLAG_RESEND
Definition: network.h:90
@ NET_CHUNKFLAG_VITAL
Definition: network.h:95
@ NET_MAX_PAYLOAD
Definition: network.h:71
@ NET_CTRLMSG_CONNECT
Definition: network.h:99
@ NET_PACKETFLAG_CONTROL
Definition: network.h:88
@ NET_CONNSTATE_PENDING
Definition: network.h:82
@ NET_CONNSTATE_CONNECT
Definition: network.h:81
@ NET_CTRLMSG_CONNECTACCEPT
Definition: network.h:100
@ NET_PACKETFLAG_UNUSED
Definition: network.h:86
@ NET_MAX_SEQUENCE
Definition: network.h:76
@ NET_PACKETFLAG_TOKEN
Definition: network.h:87
@ NET_CTRLMSG_ACCEPT
Definition: network.h:101
@ NET_PACKETHEADERSIZE
Definition: network.h:73
@ NET_PACKETFLAG_EXTENDED
Definition: network.h:93
@ NET_CTRLMSG_TOKEN
Definition: network.h:103
@ NET_CONN_BUFFERSIZE
Definition: network.h:105
@ NET_MAX_CHUNKHEADERSIZE
Definition: network.h:72
@ NET_CONNSTATE_OFFLINE
Definition: network.h:79
int(* NETFUNC_DELCLIENT)(int ClientId, const char *pReason, void *pUser)
Definition: network.h:137
int(* NETFUNC_NEWCLIENT)(int ClientId, void *pUser, bool Sixup)
Definition: network.h:139
int SECURITY_TOKEN
Definition: network.h:123
const unsigned char SECURITY_TOKEN_MAGIC[4]
Definition: network.cpp:10
unsigned int TOKEN
Definition: network.h:124
CONNECTIVITY
Definition: network.h:191
int(* NETFUNC_CLIENTREJOIN)(int ClientId, void *pUser)
Definition: network.h:141
SECURITY_TOKEN ToSecurityToken(const unsigned char *pData)
Definition: network.cpp:12
int(* NETFUNC_NEWCLIENT_NOAUTH)(int ClientId, void *pUser)
Definition: network.h:140
Definition: network.h:144
unsigned char m_aExtraData[4]
Definition: network.h:153
int m_DataSize
Definition: network.h:150
const void * m_pData
Definition: network.h:151
NETADDR m_Address
Definition: network.h:148
int m_Flags
Definition: network.h:149
int m_ClientId
Definition: network.h:147
Definition: network.h:495
CConsoleNetConnection m_Connection
Definition: network.h:496
Definition: network.h:398
CNetConnection m_Connection
Definition: network.h:400
Definition: network.h:404
NETADDR m_Addr
Definition: network.h:405
int m_Conns
Definition: network.h:407
int64_t m_Time
Definition: network.h:406
Definition: types.h:67
Definition: system.cpp:110
Definition: system.h:2207
int net_socket_type(NETSOCKET sock)
Definition: system.cpp:1582