DDraceNetwork Docs
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
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 <memory>
22#include <optional>
23#include <vector>
24
25#include "antibot.h"
26#include "authmanager.h"
27#include "name_ban.h"
28#include "snap_id_pool.h"
29
30#if defined(CONF_UPNP)
31#include "upnp.h"
32#endif
33
34class CConfig;
35class CHostLookup;
36class CLogMessage;
37class CMsgPacker;
38class CPacker;
39class IEngine;
40class IEngineMap;
41class ILogger;
42
43class CServerBan : public CNetBan
44{
46
47 template<class T>
48 int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason);
49
50public:
51 class CServer *Server() const { return m_pServer; }
52
53 void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer);
54
55 int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override;
56 int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override;
57
58 static void ConBanExt(class IConsole::IResult *pResult, void *pUser);
59 static void ConBanRegion(class IConsole::IResult *pResult, void *pUser);
60 static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser);
61};
62
63class CServer : public IServer
64{
65 friend class CServerLogger;
66
74
75#if defined(CONF_UPNP)
77#endif
78
79#if defined(CONF_FAMILY_UNIX)
83#endif
84
86
87#ifdef CONF_DEBUG
88 int m_PreviousDebugDummies = 0;
89 void UpdateDebugDummies(bool ForceDisconnect);
90#endif
91
92public:
94 class CConfig *Config() { return m_pConfig; }
95 const CConfig *Config() const { return m_pConfig; }
96 class IConsole *Console() { return m_pConsole; }
97 class IStorage *Storage() { return m_pStorage; }
98 class IEngineAntibot *Antibot() { return m_pAntibot; }
100 IEngine *Engine() { return m_pEngine; }
101
102 enum
103 {
105 };
106
108 {
109 public:
110 enum
111 {
119
123
128 };
129
130 class CInput
131 {
132 public:
134 int m_GameTick; // the tick that was chosen for the input
135 };
136
137 // connection state info
141
142 double m_Traffic;
144
148
149 CNetMsg_Sv_PreInput m_LastPreInput = {};
151 CInput m_aInputs[200]; // TODO: handle input better
153
157 std::optional<int> m_Score;
167 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrString;
168 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrStringNoPort;
169
171 enum
172 {
176 };
178
181
182 void Reset();
183
184 // DDRace
185
193
194 // DNSBL
196 std::shared_ptr<CHostLookup> m_pDnsblLookup;
197
199
201 {
202 return m_State != STATE_EMPTY && !m_DebugDummy;
203 }
204
206 {
208 }
209 };
210
213
222
224
226 //int m_CurrentGameTick;
227
228 enum
229 {
232 STOPPING = 2
233 };
234
236
245
246 enum
247 {
251 };
252
253 enum
254 {
258 };
259
261 const char *m_pCurrentMapName;
267
270
273
275
277
279 std::vector<std::string> m_vAnnouncements;
280
281 std::shared_ptr<ILogger> m_pFileLogger = nullptr;
282 std::shared_ptr<ILogger> m_pStdoutLogger = nullptr;
283
284 CServer();
285 ~CServer();
286
287 bool IsClientNameAvailable(int ClientId, const char *pNameRequest);
288 bool SetClientNameImpl(int ClientId, const char *pNameRequest, bool Set);
289 bool SetClientClanImpl(int ClientId, const char *pClanRequest, bool Set);
290
291 bool WouldClientNameChange(int ClientId, const char *pNameRequest) override;
292 bool WouldClientClanChange(int ClientId, const char *pClanRequest) override;
293 void SetClientName(int ClientId, const char *pName) override;
294 void SetClientClan(int ClientId, const char *pClan) override;
295 void SetClientCountry(int ClientId, int Country) override;
296 void SetClientScore(int ClientId, std::optional<int> Score) override;
297 void SetClientFlags(int ClientId, int Flags) override;
298
299 void Kick(int ClientId, const char *pReason) override;
300 void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override;
301 void ReconnectClient(int ClientId);
302 void RedirectClient(int ClientId, int Port) override;
303
304 void DemoRecorder_HandleAutoStart() override;
305
306 //int Tick()
307 int64_t TickStartTime(int Tick);
308 //int TickSpeed()
309
310 int Init();
311
312 void SendLogLine(const CLogMessage *pMessage);
313 void SetRconCid(int ClientId) override;
314 int GetAuthedState(int ClientId) const override;
315 const char *GetAuthName(int ClientId) const override;
316 bool HasAuthHidden(int ClientId) const override;
317 void GetMapInfo(char *pMapName, int MapNameSize, int *pMapSize, SHA256_DIGEST *pMapSha256, int *pMapCrc) override;
318 bool GetClientInfo(int ClientId, CClientInfo *pInfo) const override;
319 void SetClientDDNetVersion(int ClientId, int DDNetVersion) override;
320 const NETADDR *ClientAddr(int ClientId) const override;
321 const std::array<char, NETADDR_MAXSTRSIZE> &ClientAddrStringImpl(int ClientId, bool IncludePort) const override;
322 const char *ClientName(int ClientId) const override;
323 const char *ClientClan(int ClientId) const override;
324 int ClientCountry(int ClientId) const override;
325 bool ClientSlotEmpty(int ClientId) const override;
326 bool ClientIngame(int ClientId) const override;
327 int Port() const override;
328 int MaxClients() const override;
329 int ClientCount() const override;
330 int DistinctClientCount() const override;
331
332 int GetClientVersion(int ClientId) const override;
333 int SendMsg(CMsgPacker *pMsg, int Flags, int ClientId) override;
334
335 void DoSnapshot();
336
337 static int NewClientCallback(int ClientId, void *pUser, bool Sixup);
338 static int NewClientNoAuthCallback(int ClientId, void *pUser);
339 static int DelClientCallback(int ClientId, const char *pReason, void *pUser);
340
341 static int ClientRejoinCallback(int ClientId, void *pUser);
342
343 void SendRconType(int ClientId, bool UsernameReq);
344 void SendCapabilities(int ClientId);
345 void SendMap(int ClientId);
346 void SendMapData(int ClientId, int Chunk);
347 void SendMapReload(int ClientId);
348 void SendConnectionReady(int ClientId);
349 void SendRconLine(int ClientId, const char *pLine);
350 // Accepts -1 as ClientId to mean "all clients with at least auth level admin"
351 void SendRconLogLine(int ClientId, const CLogMessage *pMessage);
352
353 void SendRconCmdAdd(const IConsole::CCommandInfo *pCommandInfo, int ClientId);
354 void SendRconCmdRem(const IConsole::CCommandInfo *pCommandInfo, int ClientId);
355 void SendRconCmdGroupStart(int ClientId);
356 void SendRconCmdGroupEnd(int ClientId);
357 int NumRconCommands(int ClientId);
358 void UpdateClientRconCommands(int ClientId);
359
361 {
362 public:
363 char m_aName[128];
364
365 CMaplistEntry() = default;
366 CMaplistEntry(const char *pName);
367 bool operator<(const CMaplistEntry &Other) const;
368 };
369 std::vector<CMaplistEntry> m_vMaplistEntries;
370 void SendMaplistGroupStart(int ClientId);
371 void SendMaplistGroupEnd(int ClientId);
372 void UpdateClientMaplistEntries(int ClientId);
373
374 bool CheckReservedSlotAuth(int ClientId, const char *pPassword);
375 void ProcessClientPacket(CNetChunk *pPacket);
376
377 class CCache
378 {
379 public:
381 {
382 public:
383 CCacheChunk(const void *pData, int Size);
384 CCacheChunk(const CCacheChunk &) = delete;
386
387 std::vector<uint8_t> m_vData;
388 };
389
390 std::vector<CCacheChunk> m_vCache;
391
392 CCache();
393 ~CCache();
394
395 void AddChunk(const void *pData, int Size);
396 void Clear();
397 };
401
402 void FillAntibot(CAntibotRoundData *pData) override;
403
404 void ExpireServerInfo() override;
405 void CacheServerInfo(CCache *pCache, int Type, bool SendClients);
406 void CacheServerInfoSixup(CCache *pCache, bool SendClients, int MaxConsideredClients);
407 void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients);
408 void GetServerInfoSixup(CPacker *pPacker, bool SendClients);
410 void SendServerInfoConnless(const NETADDR *pAddr, int Token, int Type);
412 void UpdateServerInfo(bool Resend = false);
413
414 void PumpNetwork(bool PacketWaiting);
415
416 void ChangeMap(const char *pMap) override;
417 const char *GetMapName() const override;
418 void ReloadMap() override;
419 int LoadMap(const char *pMapName);
420
421 void SaveDemo(int ClientId, float Time) override;
422 void StartRecord(int ClientId) override;
423 void StopRecord(int ClientId) override;
424 bool IsRecording(int ClientId) override;
425 void StopDemos() override;
426
427 int Run();
428
429 static void ConKick(IConsole::IResult *pResult, void *pUser);
430 static void ConStatus(IConsole::IResult *pResult, void *pUser);
431 static void ConShutdown(IConsole::IResult *pResult, void *pUser);
432 static void ConRecord(IConsole::IResult *pResult, void *pUser);
433 static void ConStopRecord(IConsole::IResult *pResult, void *pUser);
434 static void ConMapReload(IConsole::IResult *pResult, void *pUser);
435 static void ConLogout(IConsole::IResult *pResult, void *pUser);
436 static void ConShowIps(IConsole::IResult *pResult, void *pUser);
437 static void ConHideAuthStatus(IConsole::IResult *pResult, void *pUser);
438
439 static void ConAuthAdd(IConsole::IResult *pResult, void *pUser);
440 static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser);
441 static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser);
442 static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser);
443 static void ConAuthRemove(IConsole::IResult *pResult, void *pUser);
444 static void ConAuthList(IConsole::IResult *pResult, void *pUser);
445
446 // console commands for sqlmasters
447 static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData);
448 static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData);
449
450 static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData);
451 static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData);
452
453 static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
454 static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
455 static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
456
457 void LogoutClient(int ClientId, const char *pReason);
458 void LogoutKey(int Key, const char *pReason);
459
460 void ConchainRconPasswordChangeGeneric(int Level, const char *pCurrent, IConsole::IResult *pResult);
461 static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
462 static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
463 static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
464 static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
465 static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
466 static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
467 static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
468 static void ConchainAnnouncementFileName(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
469 static void ConchainInputFifo(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
470
471#if defined(CONF_FAMILY_UNIX)
472 static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
473#endif
474
475 void RegisterCommands();
476
477 int SnapNewId() override;
478 void SnapFreeId(int Id) override;
479 void *SnapNewItem(int Type, int Id, int Size) override;
480 void SnapSetStaticsize(int ItemType, int Size) override;
481
482 // DDRace
483
485 const char *GetAnnouncementLine() override;
487
488 static int MaplistEntryCallback(const char *pFilename, int IsDir, int DirType, void *pUser);
489 void InitMaplist();
490
491 int *GetIdMap(int ClientId) override;
492
493 void InitDnsbl(int ClientId);
494 bool DnsblWhite(int ClientId) override
495 {
498 }
499 bool DnsblPending(int ClientId) override
500 {
502 }
503 bool DnsblBlack(int ClientId) override
504 {
506 }
507
508 void AuthRemoveKey(int KeySlot);
509 bool ClientPrevIngame(int ClientId) override { return m_aPrevStates[ClientId] == CClient::STATE_INGAME; }
510 const char *GetNetErrorString(int ClientId) override { return m_NetServer.ErrorString(ClientId); }
511 void ResetNetErrorString(int ClientId) override { m_NetServer.ResetErrorString(ClientId); }
512 bool SetTimedOut(int ClientId, int OrigId) override;
513 void SetTimeoutProtected(int ClientId) override { m_NetServer.SetTimeoutProtected(ClientId); }
514
515 void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override;
516
517 bool ErrorShutdown() const { return m_aErrorShutdownReason[0] != 0; }
518 void SetErrorShutdown(const char *pReason) override;
519
520 bool IsSixup(int ClientId) const override { return ClientId != SERVER_DEMO_CLIENT && m_aClients[ClientId].m_Sixup; }
521
522 void SetLoggers(std::shared_ptr<ILogger> &&pFileLogger, std::shared_ptr<ILogger> &&pStdoutLogger);
523
524#ifdef CONF_FAMILY_UNIX
526 {
529 };
530
531 void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr);
532#endif
533};
534
535bool IsInterrupted();
536
537extern CServer *CreateServer();
538#endif
Definition: authmanager.h:11
Definition: config.h:25
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:309
Definition: logger.h:20
Definition: message.h:10
Definition: name_ban.h:29
Definition: netban.h:27
Definition: netban.h:13
Definition: network.h:386
void ResetErrorString(int ClientId)
Definition: network_server.cpp:760
void SetTimeoutProtected(int ClientId)
Definition: network_server.cpp:755
const char * ErrorString(int ClientId)
Definition: network_server.cpp:765
Definition: packer.h:38
Definition: server.h:44
static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:176
static void ConBanRegion(class IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:166
void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer)
Definition: server.cpp:57
class CServer * m_pServer
Definition: server.h:45
int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason)
Definition: server.cpp:70
class CServer * Server() const
Definition: server.h:51
static void ConBanExt(class IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:146
int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override
Definition: server.cpp:132
int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override
Definition: server.cpp:137
Definition: server_logger.h:10
Definition: server.h:381
std::vector< uint8_t > m_vData
Definition: server.h:387
CCacheChunk(CCacheChunk &&)=default
CCacheChunk(const CCacheChunk &)=delete
CCacheChunk(const void *pData, int Size)
Definition: server.cpp:2131
Definition: server.h:378
void Clear()
Definition: server.cpp:2141
void AddChunk(const void *pData, int Size)
Definition: server.cpp:2136
CCache()
Definition: server.cpp:2121
std::vector< CCacheChunk > m_vCache
Definition: server.h:390
~CCache()
Definition: server.cpp:2126
Definition: server.h:131
int m_aData[MAX_INPUT_SIZE]
Definition: server.h:133
int m_GameTick
Definition: server.h:134
Definition: server.h:108
CNetMsg_Sv_PreInput m_LastPreInput
Definition: server.h:149
double m_Traffic
Definition: server.h:142
NETADDR m_Addr
Definition: server.h:186
int64_t m_RedirectDropTime
Definition: server.h:192
int m_CurrentInput
Definition: server.h:152
void Reset()
Definition: server.cpp:212
int m_NextMapChunk
Definition: server.h:162
CSnapshotStorage m_Snapshots
Definition: server.h:147
bool m_DebugDummy
Definition: server.h:165
bool m_ShowIps
Definition: server.h:164
int m_LastAckedSnapshot
Definition: server.h:145
CInput m_aInputs[200]
Definition: server.h:151
int m_DDNetVersion
Definition: server.h:189
char m_aDDNetVersionStr[64]
Definition: server.h:190
int m_AuthTries
Definition: server.h:160
int ConsoleAccessLevel() const
Definition: server.h:205
bool m_AuthHidden
Definition: server.h:161
void * m_pPersistentData
Definition: server.h:180
int m_Latency
Definition: server.h:139
int m_Authed
Definition: server.h:158
int m_State
Definition: server.h:138
int m_AuthKey
Definition: server.h:159
char m_aClan[MAX_CLAN_LENGTH]
Definition: server.h:155
@ STATE_REDIRECTED
Definition: server.h:112
@ SNAPRATE_FULL
Definition: server.h:121
@ DNSBL_STATE_BLACKLISTED
Definition: server.h:126
@ STATE_INGAME
Definition: server.h:118
@ STATE_EMPTY
Definition: server.h:113
@ STATE_CONNECTING
Definition: server.h:116
@ SNAPRATE_RECOVER
Definition: server.h:122
@ DNSBL_STATE_PENDING
Definition: server.h:125
@ SNAPRATE_INIT
Definition: server.h:120
@ STATE_AUTH
Definition: server.h:115
@ STATE_READY
Definition: server.h:117
@ STATE_PREAUTH
Definition: server.h:114
@ DNSBL_STATE_NONE
Definition: server.h:124
@ DNSBL_STATE_WHITELISTED
Definition: server.h:127
const IConsole::CCommandInfo * m_pRconCmdToSend
Definition: server.h:170
bool m_HasPersistentData
Definition: server.h:179
CUuid m_ConnectionId
Definition: server.h:191
bool m_Sixup
Definition: server.h:198
bool IncludedInServerInfo() const
Definition: server.h:200
int m_Flags
Definition: server.h:163
int m_LastInputTick
Definition: server.h:146
char m_aName[MAX_NAME_LENGTH]
Definition: server.h:154
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrStringNoPort
Definition: server.h:168
@ MAPLIST_UNINITIALIZED
Definition: server.h:173
@ MAPLIST_DONE
Definition: server.h:175
@ MAPLIST_DISABLED
Definition: server.h:174
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrString
Definition: server.h:167
bool m_DDNetVersionSettled
Definition: server.h:188
int m_Country
Definition: server.h:156
int m_DnsblState
Definition: server.h:195
int m_SnapRate
Definition: server.h:140
std::optional< int > m_Score
Definition: server.h:157
bool m_GotDDNetVersionPacket
Definition: server.h:187
int m_MaplistEntryToSend
Definition: server.h:177
CInput m_LatestInput
Definition: server.h:150
NETADDR m_DebugDummyAddr
Definition: server.h:166
int64_t m_TrafficSince
Definition: server.h:143
std::shared_ptr< CHostLookup > m_pDnsblLookup
Definition: server.h:196
Definition: server.h:361
bool operator<(const CMaplistEntry &Other) const
Definition: server.cpp:1469
char m_aName[128]
Definition: server.h:363
Definition: server.h:64
CSnapshotBuilder m_SnapshotBuilder
Definition: server.h:215
void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override
Definition: server.cpp:912
UNIXSOCKET m_ConnLoggingSocket
Definition: server.h:82
void SetClientName(int ClientId, const char *pName) override
Definition: server.cpp:429
static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4103
bool CheckReservedSlotAuth(int ClientId, const char *pPassword)
Definition: server.cpp:1568
void ExpireServerInfo() override
Definition: server.cpp:2537
void GetMapInfo(char *pMapName, int MapNameSize, int *pMapSize, SHA256_DIGEST *pMapSha256, int *pMapCrc) override
Definition: server.cpp:1250
void SetClientCountry(int ClientId, int Country) override
Definition: server.cpp:439
void SetClientFlags(int ClientId, int Flags) override
Definition: server.cpp:458
int GetAuthedState(int ClientId) const override
Definition: server.cpp:594
static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3912
void DoSnapshot()
Definition: server.cpp:931
static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3962
int64_t TickStartTime(int Tick)
Definition: server.cpp:545
char m_aErrorShutdownReason[128]
Definition: server.h:274
void CacheServerInfo(CCache *pCache, int Type, bool SendClients)
Definition: server.cpp:2146
void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override
Definition: server.cpp:487
int m_aIdMap[MAX_CLIENTS *VANILLA_MAX_CLIENTS]
Definition: server.h:212
@ RECORDER_AUTO
Definition: server.h:256
@ NUM_RECORDERS
Definition: server.h:257
@ RECORDER_MANUAL
Definition: server.h:255
const char * GetAnnouncementLine() override
Definition: server.cpp:4297
void UpdateClientRconCommands(int ClientId)
Definition: server.cpp:1442
void SetClientClan(int ClientId, const char *pClan) override
Definition: server.cpp:434
static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3863
bool DnsblPending(int ClientId) override
Definition: server.h:499
void ReadAnnouncementsFile()
Definition: server.cpp:4274
CServerBan m_ServerBan
Definition: server.h:220
CSnapshotDelta m_SnapshotDelta
Definition: server.h:214
bool IsSixup(int ClientId) const override
Definition: server.h:520
void CacheServerInfoSixup(CCache *pCache, bool SendClients, int MaxConsideredClients)
Definition: server.cpp:2360
void SetRconCid(int ClientId) override
Definition: server.cpp:589
class CDbConnectionPool * m_pConnectionPool
Definition: server.h:85
bool IsRecording(int ClientId) override
Definition: server.cpp:3749
const char * ClientClan(int ClientId) const override
Definition: server.cpp:689
int * GetIdMap(int ClientId) override
Definition: server.cpp:4394
void SetClientScore(int ClientId, std::optional< int > Score) override
Definition: server.cpp:447
const char * GetMapName() const override
Definition: server.cpp:2772
void StopDemos() override
Definition: server.cpp:3754
void AuthRemoveKey(int KeySlot)
Definition: server.cpp:3450
void SendCapabilities(int ClientId)
Definition: server.cpp:1258
class IConsole * m_pConsole
Definition: server.h:69
bool SetTimedOut(int ClientId, int OrigId) override
Definition: server.cpp:4399
void RegisterCommands()
Definition: server.cpp:4181
bool IsClientNameAvailable(int ClientId, const char *pNameRequest)
Definition: server.cpp:298
int Port() const override
Definition: server.cpp:719
bool SetClientNameImpl(int ClientId, const char *pNameRequest, bool Set)
Definition: server.cpp:322
SHA256_DIGEST m_aCurrentMapSha256[NUM_MAP_TYPES]
Definition: server.h:262
void SendConnectionReady(int ClientId)
Definition: server.cpp:1344
static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4121
void SnapSetStaticsize(int ItemType, int Size) override
Definition: server.cpp:4265
int Run()
Definition: server.cpp:2939
void RedirectClient(int ClientId, int Port) override
Definition: server.cpp:515
std::shared_ptr< ILogger > m_pFileLogger
Definition: server.h:281
bool m_ConnLoggingSocketCreated
Definition: server.h:81
static void ConchainAnnouncementFileName(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4131
bool DnsblWhite(int ClientId) override
Definition: server.h:494
void SendRconCmdGroupStart(int ClientId)
Definition: server.cpp:1417
void GetServerInfoSixup(CPacker *pPacker, bool SendClients)
Definition: server.cpp:2506
class IStorage * m_pStorage
Definition: server.h:70
static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4086
class IEngineAntibot * m_pAntibot
Definition: server.h:71
void ReconnectClient(int ClientId)
Definition: server.cpp:492
CHttp m_Http
Definition: server.h:221
static int ClientRejoinCallback(int ClientId, void *pUser)
Definition: server.cpp:1064
void InitDnsbl(int ClientId)
Definition: server.cpp:1155
CNetServer m_NetServer
Definition: server.h:217
const NETADDR * ClientAddr(int ClientId) const override
Definition: server.cpp:653
void PumpNetwork(bool PacketWaiting)
Definition: server.cpp:2671
void SendLogLine(const CLogMessage *pMessage)
Definition: server.cpp:577
std::shared_ptr< ILogger > m_pStdoutLogger
Definition: server.h:282
int m_ServerInfoNumRequests
Definition: server.h:272
static void ConRecord(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3765
int m_RunServer
Definition: server.h:235
static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4093
int SnapNewId() override
Definition: server.cpp:4249
bool ClientSlotEmpty(int ClientId) const override
Definition: server.cpp:709
static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3502
void SendMapReload(int ClientId)
Definition: server.cpp:1338
IEngineMap * m_pMap
Definition: server.h:223
bool m_ReloadedWhenEmpty
Definition: server.h:239
const char * ClientName(int ClientId) const override
Definition: server.cpp:679
CDemoRecorder m_aDemoRecorder[NUM_RECORDERS]
Definition: server.h:268
bool DnsblBlack(int ClientId) override
Definition: server.h:503
bool m_MapReload
Definition: server.h:237
void * SnapNewItem(int Type, int Id, int Size) override
Definition: server.cpp:4259
static int NewClientCallback(int ClientId, void *pUser, bool Sixup)
Definition: server.cpp:1121
CUPnP m_UPnP
Definition: server.h:76
bool WouldClientClanChange(int ClientId, const char *pClanRequest) override
Definition: server.cpp:424
unsigned m_aCurrentMapCrc[NUM_MAP_TYPES]
Definition: server.h:263
int MaxClients() const override
Definition: server.cpp:724
class IStorage * Storage()
Definition: server.h:97
static void ConShutdown(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3663
const CConfig * Config() const
Definition: server.h:95
class IGameServer * GameServer()
Definition: server.h:93
static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4079
void UpdateRegisterServerInfo()
Definition: server.cpp:2542
void SendRconType(int ClientId, bool UsernameReq)
Definition: server.cpp:1243
static void ConAuthList(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3655
@ MAX_RCONCMD_SEND
Definition: server.h:104
const char * GetAuthName(int ClientId) const override
Definition: server.cpp:601
class IGameServer * m_pGameServer
Definition: server.h:67
char m_aCurrentMap[IO_MAX_PATH_LENGTH]
Definition: server.h:260
class CConfig * m_pConfig
Definition: server.h:68
std::vector< std::string > m_vAnnouncements
Definition: server.h:279
int64_t m_GameStartTime
Definition: server.h:225
static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3932
void LogoutClient(int ClientId, const char *pReason)
Definition: server.cpp:3995
bool SetClientClanImpl(int ClientId, const char *pClanRequest, bool Set)
Definition: server.cpp:378
static void ConAuthAdd(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3469
const char * GetNetErrorString(int ClientId) override
Definition: server.h:510
void InitMaplist()
Definition: server.cpp:4369
void SendServerInfoConnless(const NETADDR *pAddr, int Token, int Type)
Definition: server.cpp:2106
static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3580
CCache m_aServerInfoCache[3 *2]
Definition: server.h:398
void FillAntibot(CAntibotRoundData *pData) override
Definition: server.cpp:2512
void SendMap(int ClientId)
Definition: server.cpp:1266
void SendRconCmdGroupEnd(int ClientId)
Definition: server.cpp:1424
void SendRconLogLine(int ClientId, const CLogMessage *pMessage)
Definition: server.cpp:1357
void DemoRecorder_HandleAutoStart() override
Definition: server.cpp:3674
int m_RconClientId
Definition: server.h:240
static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4111
int DistinctClientCount() const override
Definition: server.cpp:743
class IRegister * m_pRegister
Definition: server.h:72
CNameBans m_NameBans
Definition: server.h:276
int ClientCountry(int ClientId) const override
Definition: server.cpp:699
static void ConStatus(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3382
bool RateLimitServerInfoConnless()
Definition: server.cpp:2084
std::vector< CMaplistEntry > m_vMaplistEntries
Definition: server.h:369
int SendMsg(CMsgPacker *pMsg, int Flags, int ClientId) override
Definition: server.cpp:835
static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3955
int m_PrintCBIndex
Definition: server.h:242
CSnapIdPool m_IdPool
Definition: server.h:216
CCache m_aSixupServerInfoCache[2]
Definition: server.h:399
static int DelClientCallback(int ClientId, const char *pReason, void *pUser)
Definition: server.cpp:1198
void UpdateClientMaplistEntries(int ClientId)
Definition: server.cpp:1487
void UpdateServerInfo(bool Resend=false)
Definition: server.cpp:2636
void SendRconLine(int ClientId, const char *pLine)
Definition: server.cpp:1350
CServer()
Definition: server.cpp:231
int GetClientVersion(int ClientId) const override
Definition: server.cpp:772
void LogoutKey(int Key, const char *pReason)
Definition: server.cpp:4035
void ProcessClientPacket(CNetChunk *pPacket)
Definition: server.cpp:1600
void ResetNetErrorString(int ClientId) override
Definition: server.h:511
bool WouldClientNameChange(int ClientId, const char *pNameRequest) override
Definition: server.cpp:419
void * m_pPersistentData
Definition: server.h:244
void StopRecord(int ClientId) override
Definition: server.cpp:3741
void SendMaplistGroupEnd(int ClientId)
Definition: server.cpp:1481
bool ClientPrevIngame(int ClientId) override
Definition: server.h:509
char m_aMapDownloadUrl[256]
Definition: server.h:266
static void ConAuthRemove(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3624
@ MAP_TYPE_SIX
Definition: server.h:248
@ NUM_MAP_TYPES
Definition: server.h:250
@ MAP_TYPE_SIXUP
Definition: server.h:249
bool m_ServerInfoNeedsUpdate
Definition: server.h:400
void ReloadMap() override
Definition: server.cpp:2783
static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3551
IEngine * m_pEngine
Definition: server.h:73
CONN_LOGGING_CMD
Definition: server.h:526
@ OPEN_SESSION
Definition: server.h:527
@ CLOSE_SESSION
Definition: server.h:528
void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr)
Definition: server.cpp:1182
bool GetClientInfo(int ClientId, CClientInfo *pInfo) const override
Definition: server.cpp:616
static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData)
Definition: server.cpp:3938
void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients)
Definition: server.cpp:2452
CClient m_aClients[MAX_CLIENTS]
Definition: server.h:211
UNIXSOCKETADDR m_ConnLoggingDestAddr
Definition: server.h:80
unsigned char * m_apCurrentMapData[NUM_MAP_TYPES]
Definition: server.h:264
static void ConShowIps(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3823
class IEngineAntibot * Antibot()
Definition: server.h:98
static int NewClientNoAuthCallback(int ClientId, void *pUser)
Definition: server.cpp:1087
IEngine * Engine()
Definition: server.h:100
static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4072
static void ConStopRecord(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3802
CEcon m_Econ
Definition: server.h:218
int NumRconCommands(int ClientId)
Definition: server.cpp:1430
class CDbConnectionPool * DbPool()
Definition: server.h:99
static void ConHideAuthStatus(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3843
class CConfig * Config()
Definition: server.h:94
int Init()
Definition: server.cpp:550
int ClientCount() const override
Definition: server.cpp:729
CFifo m_Fifo
Definition: server.h:219
void ChangeMap(const char *pMap) override
Definition: server.cpp:2777
bool ClientIngame(int ClientId) const override
Definition: server.cpp:714
size_t m_AnnouncementLastLine
Definition: server.h:278
const std::array< char, NETADDR_MAXSTRSIZE > & ClientAddrStringImpl(int ClientId, bool IncludePort) const override
Definition: server.cpp:666
void StartRecord(int ClientId) override
Definition: server.cpp:3718
int LoadMap(const char *pMapName)
Definition: server.cpp:2788
int m_aPrevStates[MAX_CLIENTS]
Definition: server.h:484
int m_RconAuthLevel
Definition: server.h:241
bool ErrorShutdown() const
Definition: server.h:517
bool HasAuthHidden(int ClientId) const override
Definition: server.cpp:610
unsigned int m_aCurrentMapSize[NUM_MAP_TYPES]
Definition: server.h:265
static int MaplistEntryCallback(const char *pFilename, int IsDir, int DirType, void *pUser)
Definition: server.cpp:4332
void SendMaplistGroupStart(int ClientId)
Definition: server.cpp:1474
static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4154
static void ConchainInputFifo(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:4142
void SendRconCmdRem(const IConsole::CCommandInfo *pCommandInfo, int ClientId)
Definition: server.cpp:1410
int64_t m_ServerInfoFirstRequest
Definition: server.h:271
char m_aShutdownReason[128]
Definition: server.h:243
static void ConLogout(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3812
static void ConKick(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3370
void SaveDemo(int ClientId, float Time) override
Definition: server.cpp:3708
void SendRconCmdAdd(const IConsole::CCommandInfo *pCommandInfo, int ClientId)
Definition: server.cpp:1401
void SetClientDDNetVersion(int ClientId, int DDNetVersion) override
Definition: server.cpp:642
void ConchainRconPasswordChangeGeneric(int Level, const char *pCurrent, IConsole::IResult *pResult)
Definition: server.cpp:4042
void SetLoggers(std::shared_ptr< ILogger > &&pFileLogger, std::shared_ptr< ILogger > &&pStdoutLogger)
Definition: server.cpp:4425
void SetErrorShutdown(const char *pReason) override
Definition: server.cpp:4420
class IConsole * Console()
Definition: server.h:96
static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition: server.cpp:3944
void Kick(int ClientId, const char *pReason) override
Definition: server.cpp:466
void SendMapData(int ClientId, int Chunk)
Definition: server.cpp:1302
const char * m_pCurrentMapName
Definition: server.h:261
~CServer()
Definition: server.cpp:278
@ RUNNING
Definition: server.h:231
@ STOPPING
Definition: server.h:232
@ UNINITIALIZED
Definition: server.h:230
CAuthManager m_AuthManager
Definition: server.h:269
bool m_SameMapReload
Definition: server.h:238
void SetTimeoutProtected(int ClientId) override
Definition: server.h:513
void SnapFreeId(int Id) override
Definition: server.cpp:4254
static void ConMapReload(IConsole::IResult *pResult, void *pUser)
Definition: server.cpp:3807
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
@ ACCESS_LEVEL_ADMIN
Definition: console.h:28
@ ACCESS_LEVEL_HELPER
Definition: console.h:30
@ ACCESS_LEVEL_MOD
Definition: console.h:29
void(* FCommandCallback)(IResult *pResult, void *pUserData)
Definition: console.h:94
Definition: antibot.h:31
Definition: map.h:35
Definition: engine.h:15
Definition: server.h:297
Definition: logger.h:68
Definition: register.h:11
Definition: server.h:31
int Tick() const
Definition: server.h:50
Definition: storage.h:21
int Level
Definition: video.cpp:52
@ MAX_CLAN_LENGTH
Definition: protocol.h:99
@ MAX_INPUT_SIZE
Definition: protocol.h:95
@ MAX_CLIENTS
Definition: protocol.h:88
@ VANILLA_MAX_CLIENTS
Definition: protocol.h:89
@ MAX_NAME_LENGTH
Definition: protocol.h:98
@ AUTHED_MOD
Definition: protocol.h:81
@ AUTHED_ADMIN
Definition: protocol.h:82
int UNIXSOCKET
Definition: system.h:810
struct sockaddr_un UNIXSOCKETADDR
Definition: system.h:814
CServer * CreateServer()
Definition: server.cpp:4270
bool IsInterrupted()
Definition: main.cpp:33
@ SERVER_DEMO_CLIENT
Definition: server.h:27
Definition: antibot_data.h:111
Definition: network.h:134
Definition: uuid_manager.h:17
Definition: server.h:41
Definition: types.h:72
Definition: hash.h:15
Definition: score.cpp:22
constexpr auto IO_MAX_PATH_LENGTH
Definition: types.h:49