DDNet documentation
Loading...
Searching...
No Matches
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 "antibot.h"
7#include "authmanager.h"
8#include "name_ban.h"
9#include "snap_id_pool.h"
10
11#include <base/hash.h>
12
13#include <engine/console.h>
14#include <engine/server.h>
15#include <engine/shared/demo.h>
16#include <engine/shared/econ.h>
17#include <engine/shared/fifo.h>
23
24#include <memory>
25#include <optional>
26#include <vector>
27
28#if defined(CONF_UPNP)
29#include "upnp.h"
30#endif
31
32class CConfig;
33class CHostLookup;
34class CLogMessage;
35class CMsgPacker;
36class CPacker;
37class IEngine;
38class IEngineHttp;
39class ILogger;
40
41class CServerBan : public CNetBan
42{
44
45 template<class T>
46 int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason);
47
48public:
49 class CServer *Server() const { return m_pServer; }
50
51 void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer);
52
53 int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override;
54 int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override;
55
56 static void ConBanExt(class IConsole::IResult *pResult, void *pUser);
57 static void ConBanRegion(class IConsole::IResult *pResult, void *pUser);
58 static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser);
59};
60
61class CServer : public IServer
62{
63 friend class CServerLogger;
64
73
74#if defined(CONF_UPNP)
76#endif
77
78#if defined(CONF_FAMILY_UNIX)
82#endif
83
85
87
88public:
90 class CConfig *Config() { return m_pConfig; }
91 const CConfig *Config() const { return m_pConfig; }
92 class IConsole *Console() { return m_pConsole; }
93 class IStorage *Storage() { return m_pStorage; }
94 class IEngineAntibot *Antibot() { return m_pAntibot; }
96 IEngine *Engine() { return m_pEngine; }
97
98 enum
99 {
101 };
102
103 enum class EDnsblState
104 {
105 NONE,
106 PENDING,
107 BLACKLISTED,
108 WHITELISTED,
109 };
110
111 static const char *DnsblStateStr(EDnsblState State);
112
114 {
115 public:
116 enum
117 {
125 };
126
127 enum
128 {
132 };
133
134 class CInput
135 {
136 public:
138 int m_GameTick; // the tick that was chosen for the input
139 };
140
141 // connection state info
145
146 // Rejoining session while a game slot exists already
149
150 double m_Traffic;
152
156
157 CNetMsg_Sv_PreInput m_LastPreInput = {};
159 CInput m_aInputs[200]; // TODO: handle input better
161
168 std::optional<int> m_Score;
173 // map data chunks sent since the last map change
175 // per-tick preinput budget
183 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrString;
184 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrStringNoPort;
185
187 enum
188 {
192 };
194
197
198 void Reset();
199
200 // DDRace
201
208
211
212 // DNSBL
214 std::shared_ptr<CHostLookup> m_pDnsblLookup;
215
217
219 {
220 return m_State != STATE_EMPTY && !m_DebugDummy;
221 }
222 };
223
224 IConsole::EAccessLevel ConsoleAccessLevel(int ClientId) const;
225
227
236
238 int64_t m_StartTime;
239
240 enum
241 {
245 };
246
248
252
253 // client id of the user currently executing a rcon command
254 // can also be -1 (RCON_CID_SERV) or -2 (RCON_CID_VOTE)
260
261 enum
262 {
266 };
267
268 enum
269 {
273 };
274
280
283
284 // start of the second the connection-less server info responses are counted in
287
289
291
293 std::vector<std::string> m_vAnnouncements;
294
295 std::shared_ptr<ILogger> m_pFileLogger = nullptr;
296 std::shared_ptr<ILogger> m_pStdoutLogger = nullptr;
297
298 CServer();
299 ~CServer() override;
300
301 bool IsClientNameAvailable(int ClientId, const char *pNameRequest);
302 bool SetClientNameImpl(int ClientId, const char *pNameRequest, bool Set);
303 bool SetClientClanImpl(int ClientId, const char *pClanRequest, bool Set);
304
305 bool WouldClientNameChange(int ClientId, const char *pNameRequest) override;
306 bool WouldClientClanChange(int ClientId, const char *pClanRequest) override;
307 void SetClientName(int ClientId, const char *pName) override;
308 void SetClientClan(int ClientId, const char *pClan) override;
309 void SetClientCountry(int ClientId, int Country) override;
310 void SetClientScore(int ClientId, std::optional<int> Score) override;
311 void SetClientFlags(int ClientId, int Flags) override;
312
313 void Kick(int ClientId, const char *pReason) override;
314 void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override;
315 void ReconnectClient(int ClientId);
316 void RedirectClient(int ClientId, int Port) override;
317
318 void DemoRecorder_HandleAutoStart() override;
319
320 int64_t TickStartTime(int Tick);
321
322 int Init();
323
324 static bool StrHideIps(const char *pInput, char *pOutputWithIps, size_t OutputWithIpsSize, char *pOutputWithoutIps, size_t OutputWithoutIpsSize);
325 void SendLogLine(const CLogMessage *pMessage);
326 void SetRconCid(int ClientId) override;
327 int GetAuthedState(int ClientId) const override;
328 bool IsRconAuthed(int ClientId) const override;
329 bool IsRconAuthedAdmin(int ClientId) const override;
330 const char *GetAuthName(int ClientId) const override;
331 bool HasAuthHidden(int ClientId) const override;
332 bool GetClientInfo(int ClientId, CClientInfo *pInfo) const override;
333 void SetClientDDNetVersion(int ClientId, int DDNetVersion) override;
334 const NETADDR *ClientAddr(int ClientId) const override;
335 const std::array<char, NETADDR_MAXSTRSIZE> &ClientAddrStringImpl(int ClientId, bool IncludePort) const override;
336 const char *ClientName(int ClientId) const override;
337 const char *ClientClan(int ClientId) const override;
338 int ClientCountry(int ClientId) const override;
339 bool ClientSlotEmpty(int ClientId) const override;
340 bool ClientIngame(int ClientId) const override;
341 int Port() const override;
342 int MaxClients() const override;
343 int ClientCount() const override;
344 int DistinctClientCount() const override;
345
346 int GetClientVersion(int ClientId) const override;
347 int SendMsg(CMsgPacker *pMsg, int Flags, int ClientId) override;
348
349 void DoSnapshot();
350
351 static int NewClientCallback(int ClientId, void *pUser, bool Sixup);
352 static int NewClientNoAuthCallback(int ClientId, void *pUser);
353 static int DelClientCallback(int ClientId, const char *pReason, void *pUser);
354
355 static int ClientRejoinCallback(int ClientId, void *pUser, bool Sixup, bool VanillaAuth);
356
357 void UpdateDebugDummies(bool ForceDisconnect);
358
359 void SendRconType(int ClientId, bool UsernameReq);
360 void SendCapabilities(int ClientId);
361 void SendMap(int ClientId);
362 void SendMapData(int ClientId, int Chunk);
363 void SendMapReload(int ClientId);
364 void SendConnectionReady(int ClientId);
365 void SendRconLine(int ClientId, const char *pLine);
366 // Accepts -1 as ClientId to mean "all clients with at least auth level admin"
367 void SendRconLogLine(int ClientId, const CLogMessage *pMessage);
368
369 void SendRconCmdAdd(const IConsole::ICommandInfo *pCommandInfo, int ClientId);
370 void SendRconCmdRem(const IConsole::ICommandInfo *pCommandInfo, int ClientId);
371 void SendRconCmdGroupStart(int ClientId);
372 void SendRconCmdGroupEnd(int ClientId);
373 int NumRconCommands(int ClientId);
374 void UpdateClientRconCommands(int ClientId);
375
377 {
378 public:
379 char m_aName[128];
380
381 CMaplistEntry() = default;
382 CMaplistEntry(const char *pName);
383 bool operator<(const CMaplistEntry &Other) const;
384 };
385 std::vector<CMaplistEntry> m_vMaplistEntries;
386 void SendMaplistGroupStart(int ClientId);
387 void SendMaplistGroupEnd(int ClientId);
388 void UpdateClientMaplistEntries(int ClientId);
389
390 bool CheckReservedSlotAuth(int ClientId, const char *pPassword);
391 bool TakePreInputBudget(int ClientId);
392 void ProcessClientPacket(CNetChunk *pPacket);
393 void OnNetMsgClientVer(int ClientId, CUuid *pConnectionId, int DDNetVersion, const char *pDDNetVersionStr);
394 void OnNetMsgInfo(int ClientId, const char *pVersion, const char *pPasswordOrNullptr);
395 void OnNetMsgReady(int ClientId);
396 void OnNetMsgEnterGame(int ClientId);
397 void OnNetMsgRconCmd(int ClientId, const char *pCmd);
398 void OnNetMsgRconAuth(int ClientId, const char *pName, const char *pPw, bool SendRconCmds);
399
400 class CCache
401 {
402 public:
404 {
405 public:
406 CCacheChunk(const void *pData, int Size);
407 CCacheChunk(const CCacheChunk &) = delete;
409
410 std::vector<uint8_t> m_vData;
411 };
412
413 std::vector<CCacheChunk> m_vCache;
414
415 CCache();
416 ~CCache();
417
418 void AddChunk(const void *pData, int Size);
419 void Clear();
420 };
425
426 void FillAntibot(CAntibotRoundData *pData) override;
427
428 void ExpireServerInfo() override;
430 void CacheServerInfo(CCache *pCache, int Type, bool SendClients);
431 void CacheServerInfoSixup(CCache *pCache, bool SendClients, int MaxConsideredClients);
432 void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients);
433 void GetServerInfoSixup(CPacker *pPacker, bool SendClients);
434 // Whether a connection-less server info response may be sent, and if so whether it
435 // includes the client list.
436 std::optional<bool> RateLimitServerInfoConnless();
438 void UpdateServerInfo(bool Resend);
439
440 void PumpNetwork();
441
442 void ChangeMap(const char *pMap) override;
443 void ReloadMap() override;
444 int LoadMap(const char *pMapName);
445 void WritePortFile();
446
447 void SaveDemo(int ClientId, float Time) override;
448 void StartRecord(int ClientId) override;
449 void StopRecord(int ClientId) override;
450 bool IsRecording(int ClientId) override;
451 void StopDemos() override;
452
453 int Run();
454
455 static void ConKick(IConsole::IResult *pResult, void *pUser);
456 static void ConStatus(IConsole::IResult *pResult, void *pUser);
457 static void ConShutdown(IConsole::IResult *pResult, void *pUser);
458 static void ConUptime(IConsole::IResult *pResult, void *pUser);
459 static void ConRecord(IConsole::IResult *pResult, void *pUser);
460 static void ConStopRecord(IConsole::IResult *pResult, void *pUser);
461 static void ConMapReload(IConsole::IResult *pResult, void *pUser);
462 static void ConLogout(IConsole::IResult *pResult, void *pUser);
463 static void ConShowIps(IConsole::IResult *pResult, void *pUser);
464 static void ConHideAuthStatus(IConsole::IResult *pResult, void *pUser);
465 static void ConForceHighBandwidthOnSpectate(IConsole::IResult *pResult, void *pUser);
466
467 static void ConAuthAdd(IConsole::IResult *pResult, void *pUser);
468 static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser);
469 static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser);
470 static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser);
471 static void ConAuthRemove(IConsole::IResult *pResult, void *pUser);
472 static void ConAuthList(IConsole::IResult *pResult, void *pUser);
473
474 // console commands for sqlmasters
475 static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData);
476 static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData);
477
478 static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData);
479 static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData);
480
481 static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
482 static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
483 static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
484
485 void LogoutClient(int ClientId, const char *pReason);
486 void LogoutKey(int Key, const char *pReason);
487
488 void ConchainRconPasswordChangeGeneric(const char *pRoleName, const char *pCurrent, IConsole::IResult *pResult);
489 static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
490 static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
491 static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
492 static void ConchainReservedSlotsAuthLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
493 static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
494 static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
495 static void ConchainRegisterCommunityTokenRedact(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
496 static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
497 static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
498 static void ConchainAnnouncementFilename(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
499 static void ConchainInputFifo(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
500
501#if defined(CONF_FAMILY_UNIX)
502 static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
503#endif
504
505 void RegisterCommands();
506
507 std::optional<int> SnapNewId() override;
508 void SnapFreeId(int Id) override;
509 bool SnapNewItem(int Type, int Id, const void *pData, int Size) override;
510 void SnapSetStaticsize(int ItemType, int Size) override;
511 void SnapSetStaticsize7(int ItemType, int Size) override;
512
513 // DDRace
514
516 const char *GetAnnouncementLine() override;
518
519 static int MaplistEntryCallback(const char *pFilename, int IsDir, int DirType, void *pUser);
520 void InitMaplist();
521
522 int *GetIdMap(int ClientId) override;
523 int *GetReverseIdMap(int ClientId) override;
524
525 void InitDnsbl(int ClientId);
526 bool DnsblWhite(int ClientId) override
527 {
528 return m_aClients[ClientId].m_DnsblState == EDnsblState::NONE ||
530 }
531 bool DnsblPending(int ClientId) override
532 {
533 return m_aClients[ClientId].m_DnsblState == EDnsblState::PENDING;
534 }
535 bool DnsblBlack(int ClientId) override
536 {
538 }
539
540 static bool CanClientUseCommandCallback(int ClientId, const IConsole::ICommandInfo *pCommand, void *pUser);
541 bool CanClientUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const;
542 void AuthRemoveKey(int KeySlot);
543 bool ClientPrevIngame(int ClientId) override { return m_aPrevStates[ClientId] == CClient::STATE_INGAME; }
544 const char *GetNetErrorString(int ClientId) override { return m_NetServer.ErrorString(ClientId); }
545 void ResetNetErrorString(int ClientId) override { m_NetServer.ResetErrorString(ClientId); }
546 bool SetTimedOut(int ClientId, int OrigId) override;
547 void SetTimeoutProtected(int ClientId) override { m_NetServer.IgnoreTimeouts(ClientId); }
548
549 void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override;
550
551 bool ErrorShutdown() const { return m_aErrorShutdownReason[0] != 0; }
552 void SetErrorShutdown(const char *pReason) override;
553
554 bool IsSixup(int ClientId) const override { return ClientId != SERVER_DEMO_CLIENT && m_aClients[ClientId].m_Sixup; }
555 int GetMaxClients(int ClientId) const override;
556 bool ClientSupportsServerMaxClients(int ClientId) const override;
557
558 void SetLoggers(std::shared_ptr<ILogger> &&pFileLogger, std::shared_ptr<ILogger> &&pStdoutLogger);
559
560#ifdef CONF_FAMILY_UNIX
566
567 void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr);
568#endif
569};
570
571bool IsInterrupted();
572
573extern CServer *CreateServer();
574#endif
Definition authmanager.h:59
Definition config.h:30
Definition connection_pool.h:65
Definition demo.h:22
Definition econ.h:13
Definition fifo.h:9
Definition host_lookup.h:11
Definition logger.h:20
Definition message.h:10
Definition name_ban.h:29
Definition netban.h:31
Definition netban.h:17
Definition network.h:427
void ResetErrorString(int ClientId)
Definition network_server.cpp:834
void IgnoreTimeouts(int ClientId)
Definition network_server.cpp:829
const char * ErrorString(int ClientId)
Definition network_server.cpp:839
Definition packer.h:38
Definition server.h:42
static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser)
Definition server.cpp:187
static void ConBanRegion(class IConsole::IResult *pResult, void *pUser)
Definition server.cpp:177
void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer)
Definition server.cpp:61
class CServer * m_pServer
Definition server.h:43
int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason)
Definition server.cpp:73
class CServer * Server() const
Definition server.h:49
static void ConBanExt(class IConsole::IResult *pResult, void *pUser)
Definition server.cpp:149
int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override
Definition server.cpp:135
int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override
Definition server.cpp:140
std::vector< uint8_t > m_vData
Definition server.h:410
CCacheChunk(CCacheChunk &&)=default
CCacheChunk(const CCacheChunk &)=delete
CCacheChunk(const void *pData, int Size)
Definition server.cpp:2387
Definition server.h:401
void Clear()
Definition server.cpp:2397
void AddChunk(const void *pData, int Size)
Definition server.cpp:2392
CCache()
Definition server.cpp:2377
std::vector< CCacheChunk > m_vCache
Definition server.h:413
Definition server.h:135
int m_aData[MAX_INPUT_SIZE]
Definition server.h:137
int m_GameTick
Definition server.h:138
Definition server.h:114
CNetMsg_Sv_PreInput m_LastPreInput
Definition server.h:157
const IConsole::ICommandInfo * m_pRconCmdToSend
Definition server.h:186
int m_NumMapChunks
Definition server.h:174
double m_Traffic
Definition server.h:150
@ SNAPRATE_FULL
Definition server.h:130
@ SNAPRATE_RECOVER
Definition server.h:131
@ SNAPRATE_INIT
Definition server.h:129
int64_t m_RedirectDropTime
Definition server.h:207
int m_CurrentInput
Definition server.h:160
void Reset()
Definition server.cpp:223
int m_NextMapChunk
Definition server.h:172
int m_aIdMap[LEGACY_MAX_CLIENTS]
Definition server.h:209
CSnapshotStorage m_Snapshots
Definition server.h:155
EDnsblState m_DnsblState
Definition server.h:213
bool m_DebugDummy
Definition server.h:180
bool m_ShowIps
Definition server.h:179
int m_LastAckedSnapshot
Definition server.h:153
CInput m_aInputs[200]
Definition server.h:159
int m_DDNetVersion
Definition server.h:204
char m_aDDNetVersionStr[64]
Definition server.h:205
bool m_ForceHighBandwidthOnSpectate
Definition server.h:181
int m_AuthTries
Definition server.h:170
bool m_AuthHidden
Definition server.h:171
void * m_pPersistentData
Definition server.h:196
bool m_IngameBeforeRejoin
Definition server.h:147
@ STATE_REDIRECTED
Definition server.h:118
@ STATE_INGAME
Definition server.h:124
@ STATE_EMPTY
Definition server.h:119
@ STATE_CONNECTING
Definition server.h:122
@ STATE_AUTH
Definition server.h:121
@ STATE_READY
Definition server.h:123
@ STATE_PREAUTH
Definition server.h:120
int m_Latency
Definition server.h:143
int m_State
Definition server.h:142
int m_AuthKey
Definition server.h:169
char m_aClan[MAX_CLAN_LENGTH]
Definition server.h:163
bool m_HasPersistentData
Definition server.h:195
bool IsKnownToGame() const
Definition server.h:148
CUuid m_ConnectionId
Definition server.h:206
bool m_Sixup
Definition server.h:216
bool IncludedInServerInfo() const
Definition server.h:218
int m_Flags
Definition server.h:178
int m_LastInputTick
Definition server.h:154
char m_aName[MAX_NAME_LENGTH]
Definition server.h:162
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrStringNoPort
Definition server.h:184
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrString
Definition server.h:183
int m_NumPreInputs
Definition server.h:177
@ MAPLIST_UNINITIALIZED
Definition server.h:189
@ MAPLIST_DONE
Definition server.h:191
@ MAPLIST_DISABLED
Definition server.h:190
bool m_DDNetVersionSettled
Definition server.h:203
int m_Country
Definition server.h:167
int m_SnapRate
Definition server.h:144
std::optional< int > m_Score
Definition server.h:168
bool m_GotDDNetVersionPacket
Definition server.h:202
int m_PreInputsTick
Definition server.h:176
int m_MaplistEntryToSend
Definition server.h:193
CInput m_LatestInput
Definition server.h:158
int m_aReverseIdMap[MAX_CLIENTS]
Definition server.h:210
NETADDR m_DebugDummyAddr
Definition server.h:182
int64_t m_TrafficSince
Definition server.h:151
std::shared_ptr< CHostLookup > m_pDnsblLookup
Definition server.h:214
bool operator<(const CMaplistEntry &Other) const
Definition server.cpp:1583
char m_aName[128]
Definition server.h:379
Definition server.h:62
CSnapshotBuilder m_SnapshotBuilder
Definition server.h:230
void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override
Definition server.cpp:1007
@ MAX_RCONCMD_SEND
Definition server.h:100
UNIXSOCKET m_ConnLoggingSocket
Definition server.h:81
EDnsblState
Definition server.h:104
@ WHITELISTED
Definition server.h:108
@ NONE
Definition server.h:105
@ PENDING
Definition server.h:106
@ BLACKLISTED
Definition server.h:107
void SetClientName(int ClientId, const char *pName) override
Definition server.cpp:479
static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4640
bool CheckReservedSlotAuth(int ClientId, const char *pPassword)
Definition server.cpp:1682
void ExpireServerInfo() override
Definition server.cpp:2833
void SetClientCountry(int ClientId, int Country) override
Definition server.cpp:489
void SetClientFlags(int ClientId, int Flags) override
Definition server.cpp:512
static bool StrHideIps(const char *pInput, char *pOutputWithIps, size_t OutputWithIpsSize, char *pOutputWithoutIps, size_t OutputWithoutIpsSize)
Definition server.cpp:636
int GetAuthedState(int ClientId) const override
Definition server.cpp:677
static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4411
void DoSnapshot()
Definition server.cpp:1026
static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4461
int64_t TickStartTime(int Tick)
Definition server.cpp:601
static void ConForceHighBandwidthOnSpectate(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4336
void OnNetMsgInfo(int ClientId, const char *pVersion, const char *pPasswordOrNullptr)
Definition server.cpp:2106
char m_aErrorShutdownReason[128]
Definition server.h:288
void ConchainRconPasswordChangeGeneric(const char *pRoleName, const char *pCurrent, IConsole::IResult *pResult)
Definition server.cpp:4548
void CacheServerInfo(CCache *pCache, int Type, bool SendClients)
Definition server.cpp:2402
void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override
Definition server.cpp:541
CSnapshotDelta m_SnapshotDeltaSixup
Definition server.h:229
static bool CanClientUseCommandCallback(int ClientId, const IConsole::ICommandInfo *pCommand, void *pUser)
Definition server.cpp:3886
const char * GetAnnouncementLine() override
Definition server.cpp:4861
void UpdateClientRconCommands(int ClientId)
Definition server.cpp:1557
void SetClientClan(int ClientId, const char *pClan) override
Definition server.cpp:484
static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4356
bool DnsblPending(int ClientId) override
Definition server.h:531
void ReadAnnouncementsFile()
Definition server.cpp:4838
CServerBan m_ServerBan
Definition server.h:235
CSnapshotDelta m_SnapshotDelta
Definition server.h:228
bool IsSixup(int ClientId) const override
Definition server.h:554
void CacheServerInfoSixup(CCache *pCache, bool SendClients, int MaxConsideredClients)
Definition server.cpp:2637
void SetRconCid(int ClientId) override
Definition server.cpp:672
class CDbConnectionPool * m_pConnectionPool
Definition server.h:84
bool IsRecording(int ClientId) override
Definition server.cpp:4223
const char * ClientClan(int ClientId) const override
Definition server.cpp:784
int * GetIdMap(int ClientId) override
Definition server.cpp:4958
void SetClientScore(int ClientId, std::optional< int > Score) override
Definition server.cpp:501
void StopDemos() override
Definition server.cpp:4228
void AuthRemoveKey(int KeySlot)
Definition server.cpp:3905
int GetMaxClients(int ClientId) const override
Definition server.cpp:3019
void SendCapabilities(int ClientId)
Definition server.cpp:1383
class IConsole * m_pConsole
Definition server.h:67
bool SetTimedOut(int ClientId, int OrigId) override
Definition server.cpp:4968
void RegisterCommands()
Definition server.cpp:4737
bool IsClientNameAvailable(int ClientId, const char *pNameRequest)
Definition server.cpp:346
int Port() const override
Definition server.cpp:814
bool SetClientNameImpl(int ClientId, const char *pNameRequest, bool Set)
Definition server.cpp:370
SHA256_DIGEST m_aCurrentMapSha256[NUM_MAP_TYPES]
Definition server.h:275
void OnNetMsgReady(int ClientId)
Definition server.cpp:2157
void SendConnectionReady(int ClientId)
Definition server.cpp:1483
static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4677
void SnapSetStaticsize(int ItemType, int Size) override
Definition server.cpp:4824
int Run()
Definition server.cpp:3361
void ExpireServerInfoAndQueueResend()
Definition server.cpp:2838
void RedirectClient(int ClientId, int Port) override
Definition server.cpp:570
std::shared_ptr< ILogger > m_pFileLogger
Definition server.h:295
bool m_ConnLoggingSocketCreated
Definition server.h:80
bool m_ServerInfoNeedsResend
Definition server.h:424
bool DnsblWhite(int ClientId) override
Definition server.h:526
void SendRconCmdGroupStart(int ClientId)
Definition server.cpp:1533
void GetServerInfoSixup(CPacker *pPacker, bool SendClients)
Definition server.cpp:2802
class IStorage * m_pStorage
Definition server.h:69
static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4592
class IEngineAntibot * m_pAntibot
Definition server.h:70
void ReconnectClient(int ClientId)
Definition server.cpp:546
void SendRconCmdAdd(const IConsole::ICommandInfo *pCommandInfo, int ClientId)
Definition server.cpp:1517
int * GetReverseIdMap(int ClientId) override
Definition server.cpp:4963
void InitDnsbl(int ClientId)
Definition server.cpp:1287
CNetServer m_NetServer
Definition server.h:232
static void ConchainRegisterCommunityTokenRedact(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4650
const NETADDR * ClientAddr(int ClientId) const override
Definition server.cpp:752
void SendLogLine(const CLogMessage *pMessage)
Definition server.cpp:660
std::shared_ptr< ILogger > m_pStdoutLogger
Definition server.h:296
int m_ServerInfoNumRequests
Definition server.h:286
static void ConRecord(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4239
int m_RunServer
Definition server.h:247
@ MAP_TYPE_SIX
Definition server.h:263
@ NUM_MAP_TYPES
Definition server.h:265
@ MAP_TYPE_SIXUP
Definition server.h:264
static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4630
bool ClientSlotEmpty(int ClientId) const override
Definition server.cpp:804
static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3961
void SendMapReload(int ClientId)
Definition server.cpp:1477
bool m_ReloadedWhenEmpty
Definition server.h:251
const char * ClientName(int ClientId) const override
Definition server.cpp:774
CDemoRecorder m_aDemoRecorder[NUM_RECORDERS]
Definition server.h:281
bool DnsblBlack(int ClientId) override
Definition server.h:535
void SendRconCmdRem(const IConsole::ICommandInfo *pCommandInfo, int ClientId)
Definition server.cpp:1526
void SnapSetStaticsize7(int ItemType, int Size) override
Definition server.cpp:4829
bool m_MapReload
Definition server.h:249
void OnNetMsgClientVer(int ClientId, CUuid *pConnectionId, int DDNetVersion, const char *pDDNetVersionStr)
Definition server.cpp:2091
static int NewClientCallback(int ClientId, void *pUser, bool Sixup)
Definition server.cpp:1254
CUPnP m_UPnP
Definition server.h:75
bool WouldClientClanChange(int ClientId, const char *pClanRequest) override
Definition server.cpp:474
unsigned m_aCurrentMapCrc[NUM_MAP_TYPES]
Definition server.h:276
int MaxClients() const override
Definition server.cpp:819
class IStorage * Storage()
Definition server.h:93
static void ConShutdown(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4126
const CConfig * Config() const
Definition server.h:91
class IGameServer * GameServer()
Definition server.h:89
bool SnapNewItem(int Type, int Id, const void *pData, int Size) override
Definition server.cpp:4819
static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4585
void UpdateRegisterServerInfo()
Definition server.cpp:2844
void SendRconType(int ClientId, bool UsernameReq)
Definition server.cpp:1376
static void ConAuthList(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4118
const char * GetAuthName(int ClientId) const override
Definition server.cpp:700
class IGameServer * m_pGameServer
Definition server.h:65
class CConfig * m_pConfig
Definition server.h:66
std::vector< std::string > m_vAnnouncements
Definition server.h:293
static void ConUptime(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4137
int64_t m_GameStartTime
Definition server.h:237
static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4431
@ RECORDER_AUTO
Definition server.h:271
@ NUM_RECORDERS
Definition server.h:272
@ RECORDER_MANUAL
Definition server.h:270
void LogoutClient(int ClientId, const char *pReason)
Definition server.cpp:4504
bool SetClientClanImpl(int ClientId, const char *pClanRequest, bool Set)
Definition server.cpp:427
static void ConAuthAdd(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3924
const char * GetNetErrorString(int ClientId) override
Definition server.h:544
void InitMaplist()
Definition server.cpp:4933
void OnNetMsgEnterGame(int ClientId)
Definition server.cpp:2189
static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4045
CCache m_aServerInfoCache[3 *2]
Definition server.h:421
void FillAntibot(CAntibotRoundData *pData) override
Definition server.cpp:2808
void SendMap(int ClientId)
Definition server.cpp:1397
void OnNetMsgRconAuth(int ClientId, const char *pName, const char *pPw, bool SendRconCmds)
Definition server.cpp:2254
void SendRconCmdGroupEnd(int ClientId)
Definition server.cpp:1540
void SendRconLogLine(int ClientId, const CLogMessage *pMessage)
Definition server.cpp:1496
void DemoRecorder_HandleAutoStart() override
Definition server.cpp:4147
int m_RconClientId
Definition server.h:255
std::optional< bool > RateLimitServerInfoConnless()
Definition server.cpp:2346
static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4667
int DistinctClientCount() const override
Definition server.cpp:838
class IRegister * m_pRegister
Definition server.h:71
std::optional< int > SnapNewId() override
Definition server.cpp:4809
static const char * DnsblStateStr(EDnsblState State)
Definition server.cpp:313
CNameBans m_NameBans
Definition server.h:290
int ClientCountry(int ClientId) const override
Definition server.cpp:794
static void ConStatus(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3810
bool CanClientUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const
Definition server.cpp:3891
std::vector< CMaplistEntry > m_vMaplistEntries
Definition server.h:385
@ RUNNING
Definition server.h:243
@ STOPPING
Definition server.h:244
@ UNINITIALIZED
Definition server.h:242
int SendMsg(CMsgPacker *pMsg, int Flags, int ClientId) override
Definition server.cpp:930
static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4454
int m_PrintCBIndex
Definition server.h:257
CSnapIdPool m_IdPool
Definition server.h:231
CCache m_aSixupServerInfoCache[2]
Definition server.h:422
static void ConchainAnnouncementFilename(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4687
static int DelClientCallback(int ClientId, const char *pReason, void *pUser)
Definition server.cpp:1330
bool ClientSupportsServerMaxClients(int ClientId) const override
Definition server.cpp:3034
void UpdateClientMaplistEntries(int ClientId)
Definition server.cpp:1601
void SendRconLine(int ClientId, const char *pLine)
Definition server.cpp:1489
CServer()
Definition server.cpp:249
bool IsRconAuthed(int ClientId) const override
Definition server.cpp:690
int GetClientVersion(int ClientId) const override
Definition server.cpp:867
void LogoutKey(int Key, const char *pReason)
Definition server.cpp:4541
int64_t m_StartTime
Definition server.h:238
void ProcessClientPacket(CNetChunk *pPacket)
Definition server.cpp:1756
void ResetNetErrorString(int ClientId) override
Definition server.h:545
friend class CServerLogger
Definition server.h:63
bool WouldClientNameChange(int ClientId, const char *pNameRequest) override
Definition server.cpp:469
IEngineHttp * m_pHttp
Definition server.h:68
void * m_pPersistentData
Definition server.h:259
void StopRecord(int ClientId) override
Definition server.cpp:4215
void SendMaplistGroupEnd(int ClientId)
Definition server.cpp:1595
bool ClientPrevIngame(int ClientId) override
Definition server.h:543
char m_aMapDownloadUrl[256]
Definition server.h:279
static void ConAuthRemove(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4091
void UpdateDebugDummies(bool ForceDisconnect)
Definition server.cpp:3271
bool m_ServerInfoNeedsUpdate
Definition server.h:423
void PumpNetwork()
Definition server.cpp:3045
void ReloadMap() override
Definition server.cpp:3174
static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4014
IEngine * m_pEngine
Definition server.h:72
CONN_LOGGING_CMD
Definition server.h:562
@ OPEN_SESSION
Definition server.h:563
@ CLOSE_SESSION
Definition server.h:564
void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr)
Definition server.cpp:1314
bool GetClientInfo(int ClientId, CClientInfo *pInfo) const override
Definition server.cpp:715
static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4437
void OnNetMsgRconCmd(int ClientId, const char *pCmd)
Definition server.cpp:2225
void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients)
Definition server.cpp:2748
static void ConchainReservedSlotsAuthLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4599
CClient m_aClients[MAX_CLIENTS]
Definition server.h:226
UNIXSOCKETADDR m_ConnLoggingDestAddr
Definition server.h:79
unsigned char * m_apCurrentMapData[NUM_MAP_TYPES]
Definition server.h:277
static void ConShowIps(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4296
class IEngineAntibot * Antibot()
Definition server.h:94
static int NewClientNoAuthCallback(int ClientId, void *pUser)
Definition server.cpp:1220
IEngine * Engine()
Definition server.h:96
static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4578
static void ConStopRecord(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4275
CEcon m_Econ
Definition server.h:233
int NumRconCommands(int ClientId)
Definition server.cpp:1546
static int ClientRejoinCallback(int ClientId, void *pUser, bool Sixup, bool VanillaAuth)
Definition server.cpp:1186
class CDbConnectionPool * DbPool()
Definition server.h:95
int m_PreviousDebugDummies
Definition server.h:86
static void ConHideAuthStatus(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4316
class CConfig * Config()
Definition server.h:90
int Init()
Definition server.cpp:606
int ClientCount() const override
Definition server.cpp:824
CFifo m_Fifo
Definition server.h:234
void ChangeMap(const char *pMap) override
Definition server.cpp:3168
bool ClientIngame(int ClientId) const override
Definition server.cpp:809
size_t m_AnnouncementLastLine
Definition server.h:292
const std::array< char, NETADDR_MAXSTRSIZE > & ClientAddrStringImpl(int ClientId, bool IncludePort) const override
Definition server.cpp:763
void StartRecord(int ClientId) override
Definition server.cpp:4193
bool IsRconAuthedAdmin(int ClientId) const override
Definition server.cpp:695
int LoadMap(const char *pMapName)
Definition server.cpp:3179
int m_aPrevStates[MAX_CLIENTS]
Definition server.h:515
void WritePortFile()
Definition server.cpp:3335
int m_RconAuthLevel
Definition server.h:256
bool ErrorShutdown() const
Definition server.h:551
bool HasAuthHidden(int ClientId) const override
Definition server.cpp:709
unsigned int m_aCurrentMapSize[NUM_MAP_TYPES]
Definition server.h:278
static int MaplistEntryCallback(const char *pFilename, int IsDir, int DirType, void *pUser)
Definition server.cpp:4896
void SendMaplistGroupStart(int ClientId)
Definition server.cpp:1588
static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4710
static void ConchainInputFifo(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4698
int64_t m_ServerInfoFirstRequest
Definition server.h:285
char m_aShutdownReason[128]
Definition server.h:258
IConsole::EAccessLevel ConsoleAccessLevel(int ClientId) const
Definition server.cpp:330
static void ConLogout(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4285
static void ConKick(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3796
void SaveDemo(int ClientId, float Time) override
Definition server.cpp:4180
void SetClientDDNetVersion(int ClientId, int DDNetVersion) override
Definition server.cpp:741
void SetLoggers(std::shared_ptr< ILogger > &&pFileLogger, std::shared_ptr< ILogger > &&pStdoutLogger)
Definition server.cpp:5011
void SetErrorShutdown(const char *pReason) override
Definition server.cpp:5006
class IConsole * Console()
Definition server.h:92
static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4443
void Kick(int ClientId, const char *pReason) override
Definition server.cpp:520
void SendMapData(int ClientId, int Chunk)
Definition server.cpp:1434
void UpdateServerInfo(bool Resend)
Definition server.cpp:2981
bool TakePreInputBudget(int ClientId)
Definition server.cpp:1738
CAuthManager m_AuthManager
Definition server.h:282
bool m_SameMapReload
Definition server.h:250
void SetTimeoutProtected(int ClientId) override
Definition server.h:547
void SnapFreeId(int Id) override
Definition server.cpp:4814
static void ConMapReload(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4280
Definition snap_id_pool.h:11
Definition snapshot.h:164
Definition snapshot.h:94
Definition snapshot.h:133
Definition upnp.h:13
Definition uuid_manager.h:7
Definition console.h:92
Definition console.h:66
Definition console.h:22
EAccessLevel
Definition console.h:57
void(*) FCommandCallback(IResult *pResult, void *pUserData)
Definition console.h:107
Definition antibot.h:29
Definition http.h:266
Definition engine.h:15
Definition server.h:388
Definition logger.h:68
Definition register.h:11
Definition server.h:39
int Tick() const
Definition server.h:58
Definition storage.h:21
int UNIXSOCKET
Definition net.h:42
struct sockaddr_un UNIXSOCKETADDR
Definition net.h:47
bool IsInterrupted()
Definition main.cpp:40
@ LEGACY_MAX_CLIENTS
Definition protocol.h:92
@ MAX_CLAN_LENGTH
Definition protocol.h:110
@ MAX_INPUT_SIZE
Definition protocol.h:106
@ MAX_CLIENTS
Definition protocol.h:89
@ MAX_NAME_LENGTH
Definition protocol.h:109
CServer * CreateServer()
Definition server.cpp:4834
@ SERVER_DEMO_CLIENT
Definition server.h:35
Definition antibot_data.h:111
Definition network.h:142
Definition server.h:49
Definition types.h:168
Definition hash.h:12
Definition score_test.cpp:25