DDraceNetwork Docs
server.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_SERVER_SERVER_H
4#define ENGINE_SERVER_SERVER_H
5
6#include <base/hash.h>
7
8#include <engine/console.h>
9#include <engine/server.h>
10
11#include <engine/shared/demo.h>
12#include <engine/shared/econ.h>
13#include <engine/shared/fifo.h>
14#include <engine/shared/http.h>
20
21#include <list>
22#include <memory>
23#include <optional>
24#include <vector>
25
26#include "antibot.h"
27#include "authmanager.h"
28#include "name_ban.h"
29#include "snap_id_pool.h"
30
31#if defined(CONF_UPNP)
32#include "upnp.h"
33#endif
34
35class CConfig;
36class CHostLookup;
37class CLogMessage;
38class CMsgPacker;
39class CPacker;
40class IEngine;
41class IEngineMap;
42class ILogger;
43
44class CServerBan : public CNetBan
45{
47
48 template<class T>
49 int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason);
50
51public:
52 class CServer *Server() const { return m_pServer; }
53
54 void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer);
55
56 int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override;
57 int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override;
58
59 static void ConBanExt(class IConsole::IResult *pResult, void *pUser);
60 static void ConBanRegion(class IConsole::IResult *pResult, void *pUser);
61 static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser);
62};
63
64class CServer : public IServer
65{
66 friend class CServerLogger;
67
75
76#if defined(CONF_UPNP)
78#endif
79
80#if defined(CONF_FAMILY_UNIX)
84#endif
85
87
88#ifdef CONF_DEBUG
89 int m_PreviousDebugDummies = 0;
90 void UpdateDebugDummies(bool ForceDisconnect);
91#endif
92
93public:
95 class CConfig *Config() { return m_pConfig; }
96 const CConfig *Config() const { return m_pConfig; }
97 class IConsole *Console() { return m_pConsole; }
98 class IStorage *Storage() { return m_pStorage; }
99 class IEngineAntibot *Antibot() { return m_pAntibot; }
101 IEngine *Engine() { return m_pEngine; }
102
103 enum
104 {
106 };
107
109 {
110 public:
111 enum
112 {
120
124
129 };
130
131 class CInput
132 {
133 public:
135 int m_GameTick; // the tick that was chosen for the input
136 };
137
138 // connection state info
142
143 double m_Traffic;
145
149
151 CInput m_aInputs[200]; // TODO: handle input better
153
157 std::optional<int> m_Score;
166 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrString;
167 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrStringNoPort;
168
170 enum
171 {
175 };
177
180
181 void Reset();
182
183 // DDRace
184
192
193 // DNSBL
195 std::shared_ptr<CHostLookup> m_pDnsblLookup;
196
198
200 {
201 return m_State != STATE_EMPTY && !m_DebugDummy;
202 }
203
205 {
207 }
208 };
209
212
221
223
225 //int m_CurrentGameTick;
226
227 enum
228 {
231 STOPPING = 2
232 };
233
235
244
245 enum
246 {
250 };
251
252 enum
253 {
257 };
258
260 const char *m_pCurrentMapName;
266
269
272
274
276
278 std::vector<std::string> m_vAnnouncements;
279
280 std::shared_ptr<ILogger> m_pFileLogger = nullptr;
281 std::shared_ptr<ILogger> m_pStdoutLogger = nullptr;
282
283 CServer();
284 ~CServer();
285
286 bool IsClientNameAvailable(int ClientId, const char *pNameRequest);
287 bool SetClientNameImpl(int ClientId, const char *pNameRequest, bool Set);
288 bool SetClientClanImpl(int ClientId, const char *pClanRequest, bool Set);
289
290 bool WouldClientNameChange(int ClientId, const char *pNameRequest) override;
291 bool WouldClientClanChange(int ClientId, const char *pClanRequest) override;
292 void SetClientName(int ClientId, const char *pName) override;
293 void SetClientClan(int ClientId, const char *pClan) override;
294 void SetClientCountry(int ClientId, int Country) override;
295 void SetClientScore(int ClientId, std::optional<int> Score) override;
296 void SetClientFlags(int ClientId, int Flags) override;
297
298 void Kick(int ClientId, const char *pReason) override;
299 void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override;
300 void ReconnectClient(int ClientId);
301 void RedirectClient(int ClientId, int Port) override;
302
303 void DemoRecorder_HandleAutoStart() override;
304
305 //int Tick()
306 int64_t TickStartTime(int Tick);
307 //int TickSpeed()
308
309 int Init();
310
311 void SendLogLine(const CLogMessage *pMessage);
312 void SetRconCid(int ClientId) override;
313 int GetAuthedState(int ClientId) const override;
314 const char *GetAuthName(int ClientId) const override;
315 void GetMapInfo(char *pMapName, int MapNameSize, int *pMapSize, SHA256_DIGEST *pMapSha256, int *pMapCrc) override;
316 bool GetClientInfo(int ClientId, CClientInfo *pInfo) const override;
317 void SetClientDDNetVersion(int ClientId, int DDNetVersion) override;
318 const NETADDR *ClientAddr(int ClientId) const override;
319 const std::array<char, NETADDR_MAXSTRSIZE> &ClientAddrStringImpl(int ClientId, bool IncludePort) const override;
320 const char *ClientName(int ClientId) const override;
321 const char *ClientClan(int ClientId) const override;
322 int ClientCountry(int ClientId) const override;
323 bool ClientSlotEmpty(int ClientId) const override;
324 bool ClientIngame(int ClientId) const override;
325 int Port() const override;
326 int MaxClients() const override;
327 int ClientCount() const override;
328 int DistinctClientCount() const override;
329
330 int GetClientVersion(int ClientId) const override;
331 int SendMsg(CMsgPacker *pMsg, int Flags, int ClientId) override;
332
333 void DoSnapshot();
334
335 static int NewClientCallback(int ClientId, void *pUser, bool Sixup);
336 static int NewClientNoAuthCallback(int ClientId, void *pUser);
337 static int DelClientCallback(int ClientId, const char *pReason, void *pUser);
338
339 static int ClientRejoinCallback(int ClientId, void *pUser);
340
341 void SendRconType(int ClientId, bool UsernameReq);
342 void SendCapabilities(int ClientId);
343 void SendMap(int ClientId);
344 void SendMapData(int ClientId, int Chunk);
345 void SendMapReload(int ClientId);
346 void SendConnectionReady(int ClientId);
347 void SendRconLine(int ClientId, const char *pLine);
348 // Accepts -1 as ClientId to mean "all clients with at least auth level admin"
349 void SendRconLogLine(int ClientId, const CLogMessage *pMessage);
350
351 void SendRconCmdAdd(const IConsole::CCommandInfo *pCommandInfo, int ClientId);
352 void SendRconCmdRem(const IConsole::CCommandInfo *pCommandInfo, int ClientId);
353 void SendRconCmdGroupStart(int ClientId);
354 void SendRconCmdGroupEnd(int ClientId);
355 int NumRconCommands(int ClientId);
356 void UpdateClientRconCommands(int ClientId);
357
359 {
360 public:
361 char m_aName[128];
362
363 CMaplistEntry() = default;
364 CMaplistEntry(const char *pName);
365 bool operator<(const CMaplistEntry &Other) const;
366 };
367 std::vector<CMaplistEntry> m_vMaplistEntries;
368 void SendMaplistGroupStart(int ClientId);
369 void SendMaplistGroupEnd(int ClientId);
370 void UpdateClientMaplistEntries(int ClientId);
371
372 bool CheckReservedSlotAuth(int ClientId, const char *pPassword);
373 void ProcessClientPacket(CNetChunk *pPacket);
374
375 class CCache
376 {
377 public:
379 {
380 public:
381 CCacheChunk(const void *pData, int Size);
382 CCacheChunk(const CCacheChunk &) = delete;
384
385 std::vector<uint8_t> m_vData;
386 };
387
388 std::vector<CCacheChunk> m_vCache;
389
390 CCache();
391 ~CCache();
392
393 void AddChunk(const void *pData, int Size);
394 void Clear();
395 };
399
400 void FillAntibot(CAntibotRoundData *pData) override;
401
402 void ExpireServerInfo() override;
403 void CacheServerInfo(CCache *pCache, int Type, bool SendClients);
404 void CacheServerInfoSixup(CCache *pCache, bool SendClients);
405 void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients);
406 void GetServerInfoSixup(CPacker *pPacker, int Token, bool SendClients);
408 void SendServerInfoConnless(const NETADDR *pAddr, int Token, int Type);
410 void UpdateServerInfo(bool Resend = false);
411
412 void PumpNetwork(bool PacketWaiting);
413
414 void ChangeMap(const char *pMap) override;
415 const char *GetMapName() const override;
416 void ReloadMap() override;
417 int LoadMap(const char *pMapName);
418
419 void SaveDemo(int ClientId, float Time) override;
420 void StartRecord(int ClientId) override;
421 void StopRecord(int ClientId) override;
422 bool IsRecording(int ClientId) override;
423 void StopDemos() override;
424
425 int Run();
426
427 static void ConKick(IConsole::IResult *pResult, void *pUser);
428 static void ConStatus(IConsole::IResult *pResult, void *pUser);
429 static void ConShutdown(IConsole::IResult *pResult, void *pUser);
430 static void ConRecord(IConsole::IResult *pResult, void *pUser);
431 static void ConStopRecord(IConsole::IResult *pResult, void *pUser);
432 static void ConMapReload(IConsole::IResult *pResult, void *pUser);
433 static void ConLogout(IConsole::IResult *pResult, void *pUser);
434 static void ConShowIps(IConsole::IResult *pResult, void *pUser);
435
436 static void ConAuthAdd(IConsole::IResult *pResult, void *pUser);
437 static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser);
438 static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser);
439 static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser);
440 static void ConAuthRemove(IConsole::IResult *pResult, void *pUser);
441 static void ConAuthList(IConsole::IResult *pResult, void *pUser);
442
443 // console commands for sqlmasters
444 static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData);
445 static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData);
446
447 static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData);
448 static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData);
449
450 static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
451 static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
452 static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
453
454 void LogoutClient(int ClientId, const char *pReason);
455 void LogoutKey(int Key, const char *pReason);
456
457 void ConchainRconPasswordChangeGeneric(int Level, const char *pCurrent, IConsole::IResult *pResult);
458 static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
459 static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
460 static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
461 static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
462 static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
463 static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
464 static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
465 static void ConchainAnnouncementFileName(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
466
467#if defined(CONF_FAMILY_UNIX)
468 static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
469#endif
470
471 void RegisterCommands();
472
473 int SnapNewId() override;
474 void SnapFreeId(int Id) override;
475 void *SnapNewItem(int Type, int Id, int Size) override;
476 void SnapSetStaticsize(int ItemType, int Size) override;
477
478 // DDRace
479
481 const char *GetAnnouncementLine() override;
483
484 static int MaplistEntryCallback(const char *pFilename, int IsDir, int DirType, void *pUser);
485 void InitMaplist();
486
487 int *GetIdMap(int ClientId) override;
488
489 void InitDnsbl(int ClientId);
490 bool DnsblWhite(int ClientId) override
491 {
494 }
495 bool DnsblPending(int ClientId) override
496 {
498 }
499 bool DnsblBlack(int ClientId) override
500 {
502 }
503
504 void AuthRemoveKey(int KeySlot);
505 bool ClientPrevIngame(int ClientId) override { return m_aPrevStates[ClientId] == CClient::STATE_INGAME; }
506 const char *GetNetErrorString(int ClientId) override { return m_NetServer.ErrorString(ClientId); }
507 void ResetNetErrorString(int ClientId) override { m_NetServer.ResetErrorString(ClientId); }
508 bool SetTimedOut(int ClientId, int OrigId) override;
509 void SetTimeoutProtected(int ClientId) override { m_NetServer.SetTimeoutProtected(ClientId); }
510
511 void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override;
512
513 bool ErrorShutdown() const { return m_aErrorShutdownReason[0] != 0; }
514 void SetErrorShutdown(const char *pReason) override;
515
516 bool IsSixup(int ClientId) const override { return ClientId != SERVER_DEMO_CLIENT && m_aClients[ClientId].m_Sixup; }
517
518 void SetLoggers(std::shared_ptr<ILogger> &&pFileLogger, std::shared_ptr<ILogger> &&pStdoutLogger);
519
520#ifdef CONF_FAMILY_UNIX
522 {
525 };
526
527 void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr);
528#endif
529};
530
531extern CServer *CreateServer();
532#endif
Definition: authmanager.h:11
Definition: config.h:23
Definition: connection_pool.h:61
Definition: demo.h:19
Definition: econ.h:13
Definition: fifo.h:8
Definition: host_lookup.h:11
Definition: http.h:308
Definition: logger.h:20
Definition: message.h:10
Definition: name_ban.h:29
Definition: netban.h:27
Definition: netban.h:13
Definition: network.h:396
int ResetErrorString(int ClientId)
Definition: network_server.cpp:805
void SetTimeoutProtected(int ClientId)
Definition: network_server.cpp:800
const char * ErrorString(int ClientId)
Definition: network_server.cpp:811
Definition: packer.h:38
Definition: server.h:45
static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:174
static void ConBanRegion(class IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:164
void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer)
Definition: server.cpp:55
class CServer * m_pServer
Definition: server.h:46
int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason)
Definition: server.cpp:68
class CServer * Server() const
Definition: server.h:52
static void ConBanExt(class IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:144
int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override
Definition: server.cpp:130
int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override
Definition: server.cpp:135
Definition: server_logger.h:10
Definition: server.h:379
std::vector< uint8_t > m_vData
Definition: server.h:385
CCacheChunk(CCacheChunk &&)=default
CCacheChunk(const CCacheChunk &)=delete
CCacheChunk(const void *pData, int Size)
Definition: server.cpp:2072
Definition: server.h:376
void Clear()
Definition: server.cpp:2082
void AddChunk(const void *pData, int Size)
Definition: server.cpp:2077
CCache()
Definition: server.cpp:2062
std::vector< CCacheChunk > m_vCache
Definition: server.h:388
~CCache()
Definition: server.cpp:2067
Definition: server.h:132
int m_aData[MAX_INPUT_SIZE]
Definition: server.h:134
int m_GameTick
Definition: server.h:135
Definition: server.h:109
double m_Traffic
Definition: server.h:143
NETADDR m_Addr
Definition: server.h:185
int64_t m_RedirectDropTime
Definition: server.h:191
int m_CurrentInput
Definition: server.h:152
void Reset()
Definition: server.cpp:210
int m_NextMapChunk
Definition: server.h:161
CSnapshotStorage m_Snapshots
Definition: server.h:148
bool m_DebugDummy
Definition: server.h:164
bool m_ShowIps
Definition: server.h:163
int m_LastAckedSnapshot
Definition: server.h:146
CInput m_aInputs[200]
Definition: server.h:151
int m_DDNetVersion
Definition: server.h:188
char m_aDDNetVersionStr[64]
Definition: server.h:189
int m_AuthTries
Definition: server.h:160
int ConsoleAccessLevel() const
Definition: server.h:204
@ STATE_REDIRECTED
Definition: server.h:113
@ SNAPRATE_FULL
Definition: server.h:122
@ DNSBL_STATE_BLACKLISTED
Definition: server.h:127
@ STATE_INGAME
Definition: server.h:119
@ STATE_EMPTY
Definition: server.h:114
@ STATE_CONNECTING
Definition: server.h:117
@ SNAPRATE_RECOVER
Definition: server.h:123
@ DNSBL_STATE_PENDING
Definition: server.h:126
@ SNAPRATE_INIT
Definition: server.h:121
@ STATE_AUTH
Definition: server.h:116
@ STATE_READY
Definition: server.h:118
@ STATE_PREAUTH
Definition: server.h:115
@ DNSBL_STATE_NONE
Definition: server.h:125
@ DNSBL_STATE_WHITELISTED
Definition: server.h:128
void * m_pPersistentData
Definition: server.h:179
int m_Latency
Definition: server.h:140
int m_Authed
Definition: server.h:158
int m_State
Definition: server.h:139
int m_AuthKey
Definition: server.h:159
char m_aClan[MAX_CLAN_LENGTH]
Definition: server.h:155
const IConsole::CCommandInfo * m_pRconCmdToSend
Definition: server.h:169
bool m_HasPersistentData
Definition: server.h:178
CUuid m_ConnectionId
Definition: server.h:190
bool m_Sixup
Definition: server.h:197
bool IncludedInServerInfo() const
Definition: server.h:199
int m_Flags
Definition: server.h:162
int m_LastInputTick
Definition: server.h:147
char m_aName[MAX_NAME_LENGTH]
Definition: server.h:154
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrStringNoPort
Definition: server.h:167
@ MAPLIST_UNINITIALIZED
Definition: server.h:172
@ MAPLIST_DONE
Definition: server.h:174
@ MAPLIST_DISABLED
Definition: server.h:173
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrString
Definition: server.h:166
bool m_DDNetVersionSettled
Definition: server.h:187
int m_Country
Definition: server.h:156
int m_DnsblState
Definition: server.h:194
int m_SnapRate
Definition: server.h:141
std::optional< int > m_Score
Definition: server.h:157
bool m_GotDDNetVersionPacket
Definition: server.h:186
int m_MaplistEntryToSend
Definition: server.h:176
CInput m_LatestInput
Definition: server.h:150
NETADDR m_DebugDummyAddr
Definition: server.h:165
int64_t m_TrafficSince
Definition: server.h:144
std::shared_ptr< CHostLookup > m_pDnsblLookup
Definition: server.h:195
Definition: server.h:359
bool operator<(const CMaplistEntry &Other) const
Definition: server.cpp:1458
char m_aName[128]
Definition: server.h:361
Definition: server.h:65
CSnapshotBuilder m_SnapshotBuilder
Definition: server.h:214
void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override
Definition: server.cpp:903
UNIXSOCKET m_ConnLoggingSocket
Definition: server.h:83
void SetClientName(int ClientId, const char *pName) override
Definition: server.cpp:426
static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3979
bool CheckReservedSlotAuth(int ClientId, const char *pPassword)
Definition: server.cpp:1557
void ExpireServerInfo() override
Definition: server.cpp:2452
void GetMapInfo(char *pMapName, int MapNameSize, int *pMapSize, SHA256_DIGEST *pMapSha256, int *pMapCrc) override
Definition: server.cpp:1239
void SetClientCountry(int ClientId, int Country) override
Definition: server.cpp:436
void SetClientFlags(int ClientId, int Flags) override
Definition: server.cpp:455
int GetAuthedState(int ClientId) const override
Definition: server.cpp:591
static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3788
void DoSnapshot()
Definition: server.cpp:922
static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3838
int64_t TickStartTime(int Tick)
Definition: server.cpp:542
char m_aErrorShutdownReason[128]
Definition: server.h:273
void CacheServerInfo(CCache *pCache, int Type, bool SendClients)
Definition: server.cpp:2087
void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override
Definition: server.cpp:484
int m_aIdMap[MAX_CLIENTS *VANILLA_MAX_CLIENTS]
Definition: server.h:211
@ RUNNING
Definition: server.h:230
@ STOPPING
Definition: server.h:231
@ UNINITIALIZED
Definition: server.h:229
const char * GetAnnouncementLine() override
Definition: server.cpp:4159
void UpdateClientRconCommands(int ClientId)
Definition: server.cpp:1431
void SetClientClan(int ClientId, const char *pClan) override
Definition: server.cpp:431
static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3739
bool DnsblPending(int ClientId) override
Definition: server.h:495
void ReadAnnouncementsFile()
Definition: server.cpp:4136
CServerBan m_ServerBan
Definition: server.h:219
CSnapshotDelta m_SnapshotDelta
Definition: server.h:213
bool IsSixup(int ClientId) const override
Definition: server.h:516
void SetRconCid(int ClientId) override
Definition: server.cpp:586
class CDbConnectionPool * m_pConnectionPool
Definition: server.h:86
bool IsRecording(int ClientId) override
Definition: server.cpp:3645
const char * ClientClan(int ClientId) const override
Definition: server.cpp:680
int * GetIdMap(int ClientId) override
Definition: server.cpp:4256
void GetServerInfoSixup(CPacker *pPacker, int Token, bool SendClients)
Definition: server.cpp:2417
void SetClientScore(int ClientId, std::optional< int > Score) override
Definition: server.cpp:444
const char * GetMapName() const override
Definition: server.cpp:2691
void StopDemos() override
Definition: server.cpp:3650
void AuthRemoveKey(int KeySlot)
Definition: server.cpp:3358
void SendCapabilities(int ClientId)
Definition: server.cpp:1247
class IConsole * m_pConsole
Definition: server.h:70
bool SetTimedOut(int ClientId, int OrigId) override
Definition: server.cpp:4261
void RegisterCommands()
Definition: server.cpp:4046
bool IsClientNameAvailable(int ClientId, const char *pNameRequest)
Definition: server.cpp:295
int Port() const override
Definition: server.cpp:710
bool SetClientNameImpl(int ClientId, const char *pNameRequest, bool Set)
Definition: server.cpp:319
SHA256_DIGEST m_aCurrentMapSha256[NUM_MAP_TYPES]
Definition: server.h:261
void SendConnectionReady(int ClientId)
Definition: server.cpp:1333
static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3997
void SnapSetStaticsize(int ItemType, int Size) override
Definition: server.cpp:4127
int Run()
Definition: server.cpp:2854
void RedirectClient(int ClientId, int Port) override
Definition: server.cpp:512
std::shared_ptr< ILogger > m_pFileLogger
Definition: server.h:280
bool m_ConnLoggingSocketCreated
Definition: server.h:82
static void ConchainAnnouncementFileName(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4007
bool DnsblWhite(int ClientId) override
Definition: server.h:490
void SendRconCmdGroupStart(int ClientId)
Definition: server.cpp:1406
void CacheServerInfoSixup(CCache *pCache, bool SendClients)
Definition: server.cpp:2301
class IStorage * m_pStorage
Definition: server.h:71
static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3962
class IEngineAntibot * m_pAntibot
Definition: server.h:72
void ReconnectClient(int ClientId)
Definition: server.cpp:489
CHttp m_Http
Definition: server.h:220
static int ClientRejoinCallback(int ClientId, void *pUser)
Definition: server.cpp:1055
void InitDnsbl(int ClientId)
Definition: server.cpp:1145
CNetServer m_NetServer
Definition: server.h:216
const NETADDR * ClientAddr(int ClientId) const override
Definition: server.cpp:644
void PumpNetwork(bool PacketWaiting)
Definition: server.cpp:2586
void SendLogLine(const CLogMessage *pMessage)
Definition: server.cpp:574
std::shared_ptr< ILogger > m_pStdoutLogger
Definition: server.h:281
int m_ServerInfoNumRequests
Definition: server.h:271
static void ConRecord(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3661
int m_RunServer
Definition: server.h:234
static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3969
int SnapNewId() override
Definition: server.cpp:4111
bool ClientSlotEmpty(int ClientId) const override
Definition: server.cpp:700
static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3404
void SendMapReload(int ClientId)
Definition: server.cpp:1327
IEngineMap * m_pMap
Definition: server.h:222
bool m_ReloadedWhenEmpty
Definition: server.h:238
const char * ClientName(int ClientId) const override
Definition: server.cpp:670
CDemoRecorder m_aDemoRecorder[NUM_RECORDERS]
Definition: server.h:267
bool DnsblBlack(int ClientId) override
Definition: server.h:499
bool m_MapReload
Definition: server.h:236
void * SnapNewItem(int Type, int Id, int Size) override
Definition: server.cpp:4121
static int NewClientCallback(int ClientId, void *pUser, bool Sixup)
Definition: server.cpp:1111
CUPnP m_UPnP
Definition: server.h:77
bool WouldClientClanChange(int ClientId, const char *pClanRequest) override
Definition: server.cpp:421
unsigned m_aCurrentMapCrc[NUM_MAP_TYPES]
Definition: server.h:262
int MaxClients() const override
Definition: server.cpp:715
class IStorage * Storage()
Definition: server.h:98
static void ConShutdown(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3559
const CConfig * Config() const
Definition: server.h:96
class IGameServer * GameServer()
Definition: server.h:94
@ RECORDER_AUTO
Definition: server.h:255
@ NUM_RECORDERS
Definition: server.h:256
@ RECORDER_MANUAL
Definition: server.h:254
static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3955
void UpdateRegisterServerInfo()
Definition: server.cpp:2457
void SendRconType(int ClientId, bool UsernameReq)
Definition: server.cpp:1232
static void ConAuthList(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3551
@ MAX_RCONCMD_SEND
Definition: server.h:105
const char * GetAuthName(int ClientId) const override
Definition: server.cpp:598
class IGameServer * m_pGameServer
Definition: server.h:68
char m_aCurrentMap[IO_MAX_PATH_LENGTH]
Definition: server.h:259
class CConfig * m_pConfig
Definition: server.h:69
std::vector< std::string > m_vAnnouncements
Definition: server.h:278
int64_t m_GameStartTime
Definition: server.h:224
static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3808
void LogoutClient(int ClientId, const char *pReason)
Definition: server.cpp:3871
bool SetClientClanImpl(int ClientId, const char *pClanRequest, bool Set)
Definition: server.cpp:375
static void ConAuthAdd(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3377
const char * GetNetErrorString(int ClientId) override
Definition: server.h:506
void InitMaplist()
Definition: server.cpp:4231
void SendServerInfoConnless(const NETADDR *pAddr, int Token, int Type)
Definition: server.cpp:2047
static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3476
CCache m_aServerInfoCache[3 *2]
Definition: server.h:396
void FillAntibot(CAntibotRoundData *pData) override
Definition: server.cpp:2432
void SendMap(int ClientId)
Definition: server.cpp:1255
void SendRconCmdGroupEnd(int ClientId)
Definition: server.cpp:1413
void SendRconLogLine(int ClientId, const CLogMessage *pMessage)
Definition: server.cpp:1346
void DemoRecorder_HandleAutoStart() override
Definition: server.cpp:3570
int m_RconClientId
Definition: server.h:239
@ MAP_TYPE_SIX
Definition: server.h:247
@ NUM_MAP_TYPES
Definition: server.h:249
@ MAP_TYPE_SIXUP
Definition: server.h:248
static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3987
int DistinctClientCount() const override
Definition: server.cpp:734
class IRegister * m_pRegister
Definition: server.h:73
CNameBans m_NameBans
Definition: server.h:275
int ClientCountry(int ClientId) const override
Definition: server.cpp:690
static void ConStatus(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3290
bool RateLimitServerInfoConnless()
Definition: server.cpp:2025
std::vector< CMaplistEntry > m_vMaplistEntries
Definition: server.h:367
int SendMsg(CMsgPacker *pMsg, int Flags, int ClientId) override
Definition: server.cpp:826
static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3831
int m_PrintCBIndex
Definition: server.h:241
CSnapIdPool m_IdPool
Definition: server.h:215
CCache m_aSixupServerInfoCache[2]
Definition: server.h:397
static int DelClientCallback(int ClientId, const char *pReason, void *pUser)
Definition: server.cpp:1188
void UpdateClientMaplistEntries(int ClientId)
Definition: server.cpp:1476
void UpdateServerInfo(bool Resend=false)
Definition: server.cpp:2551
void SendRconLine(int ClientId, const char *pLine)
Definition: server.cpp:1339
CServer()
Definition: server.cpp:228
int GetClientVersion(int ClientId) const override
Definition: server.cpp:763
void LogoutKey(int Key, const char *pReason)
Definition: server.cpp:3911
void ProcessClientPacket(CNetChunk *pPacket)
Definition: server.cpp:1589
void ResetNetErrorString(int ClientId) override
Definition: server.h:507
bool WouldClientNameChange(int ClientId, const char *pNameRequest) override
Definition: server.cpp:416
void * m_pPersistentData
Definition: server.h:243
void StopRecord(int ClientId) override
Definition: server.cpp:3637
void SendMaplistGroupEnd(int ClientId)
Definition: server.cpp:1470
bool ClientPrevIngame(int ClientId) override
Definition: server.h:505
char m_aMapDownloadUrl[256]
Definition: server.h:265
static void ConAuthRemove(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3520
bool m_ServerInfoNeedsUpdate
Definition: server.h:398
void ReloadMap() override
Definition: server.cpp:2702
static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3447
IEngine * m_pEngine
Definition: server.h:74
CONN_LOGGING_CMD
Definition: server.h:522
@ OPEN_SESSION
Definition: server.h:523
@ CLOSE_SESSION
Definition: server.h:524
void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr)
Definition: server.cpp:1172
bool GetClientInfo(int ClientId, CClientInfo *pInfo) const override
Definition: server.cpp:607
static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3814
void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients)
Definition: server.cpp:2363
CClient m_aClients[MAX_CLIENTS]
Definition: server.h:210
UNIXSOCKETADDR m_ConnLoggingDestAddr
Definition: server.h:81
unsigned char * m_apCurrentMapData[NUM_MAP_TYPES]
Definition: server.h:263
static void ConShowIps(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3719
class IEngineAntibot * Antibot()
Definition: server.h:99
static int NewClientNoAuthCallback(int ClientId, void *pUser)
Definition: server.cpp:1078
IEngine * Engine()
Definition: server.h:101
static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3948
static void ConStopRecord(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3698
CEcon m_Econ
Definition: server.h:217
int NumRconCommands(int ClientId)
Definition: server.cpp:1419
class CDbConnectionPool * DbPool()
Definition: server.h:100
class CConfig * Config()
Definition: server.h:95
int Init()
Definition: server.cpp:547
int ClientCount() const override
Definition: server.cpp:720
CFifo m_Fifo
Definition: server.h:218
void ChangeMap(const char *pMap) override
Definition: server.cpp:2696
bool ClientIngame(int ClientId) const override
Definition: server.cpp:705
size_t m_AnnouncementLastLine
Definition: server.h:277
const std::array< char, NETADDR_MAXSTRSIZE > & ClientAddrStringImpl(int ClientId, bool IncludePort) const override
Definition: server.cpp:657
void StartRecord(int ClientId) override
Definition: server.cpp:3614
int LoadMap(const char *pMapName)
Definition: server.cpp:2707
int m_aPrevStates[MAX_CLIENTS]
Definition: server.h:480
int m_RconAuthLevel
Definition: server.h:240
bool ErrorShutdown() const
Definition: server.h:513
unsigned int m_aCurrentMapSize[NUM_MAP_TYPES]
Definition: server.h:264
static int MaplistEntryCallback(const char *pFilename, int IsDir, int DirType, void *pUser)
Definition: server.cpp:4194
void SendMaplistGroupStart(int ClientId)
Definition: server.cpp:1463
static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4019
void SendRconCmdRem(const IConsole::CCommandInfo *pCommandInfo, int ClientId)
Definition: server.cpp:1399
int64_t m_ServerInfoFirstRequest
Definition: server.h:270
char m_aShutdownReason[128]
Definition: server.h:242
static void ConLogout(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3708
static void ConKick(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3278
void SaveDemo(int ClientId, float Time) override
Definition: server.cpp:3604
void SendRconCmdAdd(const IConsole::CCommandInfo *pCommandInfo, int ClientId)
Definition: server.cpp:1390
void SetClientDDNetVersion(int ClientId, int DDNetVersion) override
Definition: server.cpp:633
void ConchainRconPasswordChangeGeneric(int Level, const char *pCurrent, IConsole::IResult *pResult)
Definition: server.cpp:3918
void SetLoggers(std::shared_ptr< ILogger > &&pFileLogger, std::shared_ptr< ILogger > &&pStdoutLogger)
Definition: server.cpp:4287
void SetErrorShutdown(const char *pReason) override
Definition: server.cpp:4282
class IConsole * Console()
Definition: server.h:97
static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3820
void Kick(int ClientId, const char *pReason) override
Definition: server.cpp:463
void SendMapData(int ClientId, int Chunk)
Definition: server.cpp:1291
const char * m_pCurrentMapName
Definition: server.h:260
~CServer()
Definition: server.cpp:275
CAuthManager m_AuthManager
Definition: server.h:268
bool m_SameMapReload
Definition: server.h:237
void SetTimeoutProtected(int ClientId) override
Definition: server.h:509
void SnapFreeId(int Id) override
Definition: server.cpp:4116
static void ConMapReload(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3703
Definition: snap_id_pool.h:8
Definition: snapshot.h:146
Definition: snapshot.h:74
Definition: snapshot.h:115
Definition: upnp.h:6
Definition: console.h:76
Definition: console.h:47
Definition: console.h:18
void(* FCommandCallback)(IResult *pResult, void *pUserData)
Definition: console.h:94
@ ACCESS_LEVEL_ADMIN
Definition: console.h:28
@ ACCESS_LEVEL_HELPER
Definition: console.h:30
@ ACCESS_LEVEL_MOD
Definition: console.h:29
Definition: antibot.h:31
Definition: map.h:35
Definition: engine.h:15
Definition: server.h:296
Definition: logger.h:68
Definition: register.h:11
Definition: server.h:31
int Tick() const
Definition: server.h:50
Definition: storage.h:20
@ MAX_CLAN_LENGTH
Definition: protocol.h:98
@ MAX_INPUT_SIZE
Definition: protocol.h:94
@ MAX_CLIENTS
Definition: protocol.h:88
@ VANILLA_MAX_CLIENTS
Definition: protocol.h:89
@ MAX_NAME_LENGTH
Definition: protocol.h:97
@ AUTHED_MOD
Definition: protocol.h:81
@ AUTHED_ADMIN
Definition: protocol.h:82
int UNIXSOCKET
Definition: system.h:806
struct sockaddr_un UNIXSOCKETADDR
Definition: system.h:810
CServer * CreateServer()
Definition: server.cpp:4132
@ SERVER_DEMO_CLIENT
Definition: server.h:27
Definition: antibot_data.h:98
Definition: network.h:144
Definition: uuid_manager.h:17
Definition: server.h:41
Definition: types.h:67
Definition: hash.h:15
Definition: score.cpp:22
@ IO_MAX_PATH_LENGTH
Definition: types.h:43