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