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>
18#include <engine/shared/http.h>
24
25#include <memory>
26#include <optional>
27#include <vector>
28
29#if defined(CONF_UPNP)
30#include "upnp.h"
31#endif
32
33class CConfig;
34class CHostLookup;
35class CLogMessage;
36class CMsgPacker;
37class CPacker;
38class IEngine;
39class IEngineHttp;
40class ILogger;
41
42class CServerBan : public CNetBan
43{
45
46 template<class T>
47 int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason);
48
49public:
50 class CServer *Server() const { return m_pServer; }
51
52 void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer);
53
54 int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override;
55 int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override;
56
57 static void ConBanExt(class IConsole::IResult *pResult, void *pUser);
58 static void ConBanRegion(class IConsole::IResult *pResult, void *pUser);
59 static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser);
60};
61
62class CServer : public IServer
63{
64 friend class CServerLogger;
65
74
75#if defined(CONF_UPNP)
77#endif
78
79#if defined(CONF_FAMILY_UNIX)
83#endif
84
86
88 void UpdateDebugDummies(bool ForceDisconnect);
89
90public:
92 class CConfig *Config() { return m_pConfig; }
93 const CConfig *Config() const { return m_pConfig; }
94 class IConsole *Console() { return m_pConsole; }
95 class IStorage *Storage() { return m_pStorage; }
96 class IEngineAntibot *Antibot() { return m_pAntibot; }
98 IEngine *Engine() { return m_pEngine; }
99
100 enum
101 {
103 };
104
112
113 static const char *DnsblStateStr(EDnsblState State);
114
116 {
117 public:
118 enum
119 {
127 };
128
129 enum
130 {
134 };
135
136 class CInput
137 {
138 public:
140 int m_GameTick; // the tick that was chosen for the input
141 };
142
143 // connection state info
147
148 double m_Traffic;
150
154
157 CInput m_aInputs[200]; // TODO: handle input better
159
166 std::optional<int> m_Score;
176 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrString;
177 std::array<char, NETADDR_MAXSTRSIZE> m_aDebugDummyAddrStringNoPort;
178
180 enum
181 {
185 };
187
190
191 void Reset();
192
193 // DDRace
194
201
202 // DNSBL
204 std::shared_ptr<CHostLookup> m_pDnsblLookup;
205
207
209 {
210 return m_State != STATE_EMPTY && !m_DebugDummy;
211 }
212 };
213
214 IConsole::EAccessLevel ConsoleAccessLevel(int ClientId) const;
215
218
219 rust::Box<CSnapshotDelta> m_pSnapshotDelta;
220 rust::Box<CSnapshotDelta> m_pSnapshotDeltaSixup;
221 rust::Box<CSnapshotBuilder> m_pSnapshotBuilder;
227
229
230 enum
231 {
235 };
236
238
247
248 enum
249 {
253 };
254
255 enum
256 {
260 };
261
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() override;
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 int64_t TickStartTime(int Tick);
307
308 int Init();
309
310 static bool StrHideIps(const char *pInput, char *pOutputWithIps, size_t OutputWithIpsSize, char *pOutputWithoutIps, size_t OutputWithoutIpsSize);
311 void SendLogLine(const CLogMessage *pMessage);
312 void SetRconCid(int ClientId) override;
313 int GetAuthedState(int ClientId) const override;
314 bool IsRconAuthed(int ClientId) const override;
315 bool IsRconAuthedAdmin(int ClientId) const override;
316 const char *GetAuthName(int ClientId) const override;
317 bool HasAuthHidden(int ClientId) const 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::ICommandInfo *pCommandInfo, int ClientId);
354 void SendRconCmdRem(const IConsole::ICommandInfo *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 void OnNetMsgClientVer(int ClientId, CUuid *pConnectionId, int DDNetVersion, const char *pDDNetVersionStr);
377 void OnNetMsgInfo(int ClientId, const char *pVersion, const char *pPasswordOrNullptr);
378 void OnNetMsgReady(int ClientId);
379 void OnNetMsgEnterGame(int ClientId);
380 void OnNetMsgRconCmd(int ClientId, const char *pCmd);
381 void OnNetMsgRconAuth(int ClientId, const char *pName, const char *pPw, bool SendRconCmds);
382
383 class CCache
384 {
385 public:
387 {
388 public:
389 CCacheChunk(const void *pData, int Size);
390 CCacheChunk(const CCacheChunk &) = delete;
392
393 std::vector<uint8_t> m_vData;
394 };
395
396 std::vector<CCacheChunk> m_vCache;
397
398 CCache();
399 ~CCache();
400
401 void AddChunk(const void *pData, int Size);
402 void Clear();
403 };
408
409 void FillAntibot(CAntibotRoundData *pData) override;
410
411 void ExpireServerInfo() override;
413 void CacheServerInfo(CCache *pCache, int Type, bool SendClients);
414 void CacheServerInfoSixup(CCache *pCache, bool SendClients, int MaxConsideredClients);
415 void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients);
416 void GetServerInfoSixup(CPacker *pPacker, bool SendClients);
418 void SendServerInfoConnless(const NETADDR *pAddr, int Token, int Type);
420 void UpdateServerInfo(bool Resend);
421
422 void PumpNetwork(bool PacketWaiting);
423
424 void ChangeMap(const char *pMap) override;
425 void ReloadMap() override;
426 int LoadMap(const char *pMapName);
427
428 void SaveDemo(int ClientId, float Time) override;
429 void StartRecord(int ClientId) override;
430 void StopRecord(int ClientId) override;
431 bool IsRecording(int ClientId) override;
432 void StopDemos() override;
433
434 int Run();
435
436 static void ConKick(IConsole::IResult *pResult, void *pUser);
437 static void ConStatus(IConsole::IResult *pResult, void *pUser);
438 static void ConShutdown(IConsole::IResult *pResult, void *pUser);
439 static void ConRecord(IConsole::IResult *pResult, void *pUser);
440 static void ConStopRecord(IConsole::IResult *pResult, void *pUser);
441 static void ConMapReload(IConsole::IResult *pResult, void *pUser);
442 static void ConLogout(IConsole::IResult *pResult, void *pUser);
443 static void ConShowIps(IConsole::IResult *pResult, void *pUser);
444 static void ConHideAuthStatus(IConsole::IResult *pResult, void *pUser);
445 static void ConForceHighBandwidthOnSpectate(IConsole::IResult *pResult, void *pUser);
446
447 static void ConAuthAdd(IConsole::IResult *pResult, void *pUser);
448 static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser);
449 static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser);
450 static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser);
451 static void ConAuthRemove(IConsole::IResult *pResult, void *pUser);
452 static void ConAuthList(IConsole::IResult *pResult, void *pUser);
453
454 // console commands for sqlmasters
455 static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData);
456 static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData);
457
458 static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData);
459 static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData);
460
461 static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
462 static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
463 static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
464
465 void LogoutClient(int ClientId, const char *pReason);
466 void LogoutKey(int Key, const char *pReason);
467
468 void ConchainRconPasswordChangeGeneric(const char *pRoleName, const char *pCurrent, IConsole::IResult *pResult);
469 static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
470 static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
471 static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
472 static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
473 static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
474 static void ConchainRegisterCommunityTokenRedact(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
475 static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
476 static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
477 static void ConchainAnnouncementFilename(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
478 static void ConchainInputFifo(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
479
480#if defined(CONF_FAMILY_UNIX)
481 static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
482#endif
483
484 void RegisterCommands();
485
486 std::optional<int> SnapNewId() override;
487 void SnapFreeId(int Id) override;
488 bool SnapNewItem(int Type, int Id, rust::Slice<const int32_t> Data) override;
489 void SnapSetStaticsize(int ItemType, int Size) override;
490 void SnapSetStaticsize7(int ItemType, int Size) override;
491
492 // DDRace
493
495 const char *GetAnnouncementLine() override;
497
498 static int MaplistEntryCallback(const char *pFilename, int IsDir, int DirType, void *pUser);
499 void InitMaplist();
500
501 int *GetIdMap(int ClientId) override;
502
503 void InitDnsbl(int ClientId);
504 bool DnsblWhite(int ClientId) override
505 {
506 return m_aClients[ClientId].m_DnsblState == EDnsblState::NONE ||
507 m_aClients[ClientId].m_DnsblState == EDnsblState::WHITELISTED;
508 }
509 bool DnsblPending(int ClientId) override
510 {
511 return m_aClients[ClientId].m_DnsblState == EDnsblState::PENDING;
512 }
513 bool DnsblBlack(int ClientId) override
514 {
515 return m_aClients[ClientId].m_DnsblState == EDnsblState::BLACKLISTED;
516 }
517
518 static bool CanClientUseCommandCallback(int ClientId, const IConsole::ICommandInfo *pCommand, void *pUser);
519 bool CanClientUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const;
520 void AuthRemoveKey(int KeySlot);
521 bool ClientPrevIngame(int ClientId) override { return m_aPrevStates[ClientId] == CClient::STATE_INGAME; }
522 const char *GetNetErrorString(int ClientId) override { return m_NetServer.ErrorString(ClientId); }
523 void ResetNetErrorString(int ClientId) override { m_NetServer.ResetErrorString(ClientId); }
524 bool SetTimedOut(int ClientId, int OrigId) override;
525 void SetTimeoutProtected(int ClientId) override { m_NetServer.IgnoreTimeouts(ClientId); }
526
527 void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override;
528
529 bool ErrorShutdown() const { return m_aErrorShutdownReason[0] != 0; }
530 void SetErrorShutdown(const char *pReason) override;
531
532 bool IsSixup(int ClientId) const override { return ClientId != SERVER_DEMO_CLIENT && m_aClients[ClientId].m_Sixup; }
533
534 void SetLoggers(std::shared_ptr<ILogger> &&pFileLogger, std::shared_ptr<ILogger> &&pStdoutLogger);
535
536#ifdef CONF_FAMILY_UNIX
542
543 void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr);
544#endif
545};
546
547bool IsInterrupted();
548
549extern CServer *CreateServer();
550#endif
Definition authmanager.h:55
Definition config.h:30
Definition connection_pool.h:60
Definition demo.h:23
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:415
Definition packer.h:38
Definition server.h:43
static void ConBanRegionRange(class IConsole::IResult *pResult, void *pUser)
Definition server.cpp:183
static void ConBanRegion(class IConsole::IResult *pResult, void *pUser)
Definition server.cpp:173
void InitServerBan(class IConsole *pConsole, class IStorage *pStorage, class CServer *pServer)
Definition server.cpp:59
class CServer * m_pServer
Definition server.h:44
int BanExt(T *pBanPool, const typename T::CDataType *pData, int Seconds, const char *pReason, bool VerbatimReason)
Definition server.cpp:71
class CServer * Server() const
Definition server.h:50
static void ConBanExt(class IConsole::IResult *pResult, void *pUser)
Definition server.cpp:147
int BanAddr(const NETADDR *pAddr, int Seconds, const char *pReason, bool VerbatimReason) override
Definition server.cpp:133
int BanRange(const CNetRange *pRange, int Seconds, const char *pReason) override
Definition server.cpp:138
std::vector< uint8_t > m_vData
Definition server.h:393
CCacheChunk(CCacheChunk &&)=default
CCacheChunk(const CCacheChunk &)=delete
CCacheChunk(const void *pData, int Size)
Definition server.cpp:2260
Definition server.h:384
void Clear()
Definition server.cpp:2270
void AddChunk(const void *pData, int Size)
Definition server.cpp:2265
CCache()
Definition server.cpp:2250
std::vector< CCacheChunk > m_vCache
Definition server.h:396
~CCache()
Definition server.cpp:2255
Definition server.h:137
int m_aData[MAX_INPUT_SIZE]
Definition server.h:139
int m_GameTick
Definition server.h:140
Definition server.h:116
CNetMsg_Sv_PreInput m_LastPreInput
Definition server.h:155
const IConsole::ICommandInfo * m_pRconCmdToSend
Definition server.h:179
double m_Traffic
Definition server.h:148
@ SNAPRATE_FULL
Definition server.h:132
@ SNAPRATE_RECOVER
Definition server.h:133
@ SNAPRATE_INIT
Definition server.h:131
int64_t m_RedirectDropTime
Definition server.h:200
int m_CurrentInput
Definition server.h:158
void Reset()
Definition server.cpp:219
int m_NextMapChunk
Definition server.h:170
CSnapshotStorage m_Snapshots
Definition server.h:153
EDnsblState m_DnsblState
Definition server.h:203
bool m_DebugDummy
Definition server.h:173
bool m_ShowIps
Definition server.h:172
int m_LastAckedSnapshot
Definition server.h:151
CInput m_aInputs[200]
Definition server.h:157
int m_DDNetVersion
Definition server.h:197
char m_aDDNetVersionStr[64]
Definition server.h:198
bool m_ForceHighBandwidthOnSpectate
Definition server.h:174
int m_AuthTries
Definition server.h:168
bool m_AuthHidden
Definition server.h:169
void * m_pPersistentData
Definition server.h:189
@ STATE_REDIRECTED
Definition server.h:120
@ STATE_INGAME
Definition server.h:126
@ STATE_EMPTY
Definition server.h:121
@ STATE_CONNECTING
Definition server.h:124
@ STATE_AUTH
Definition server.h:123
@ STATE_READY
Definition server.h:125
@ STATE_PREAUTH
Definition server.h:122
int m_Latency
Definition server.h:145
int m_State
Definition server.h:144
int m_AuthKey
Definition server.h:167
char m_aClan[MAX_CLAN_LENGTH]
Definition server.h:161
bool m_HasPersistentData
Definition server.h:188
CUuid m_ConnectionId
Definition server.h:199
bool m_Sixup
Definition server.h:206
bool IncludedInServerInfo() const
Definition server.h:208
int m_Flags
Definition server.h:171
int m_LastInputTick
Definition server.h:152
char m_aName[MAX_NAME_LENGTH]
Definition server.h:160
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrStringNoPort
Definition server.h:177
std::array< char, NETADDR_MAXSTRSIZE > m_aDebugDummyAddrString
Definition server.h:176
@ MAPLIST_UNINITIALIZED
Definition server.h:182
@ MAPLIST_DONE
Definition server.h:184
@ MAPLIST_DISABLED
Definition server.h:183
bool m_DDNetVersionSettled
Definition server.h:196
int m_Country
Definition server.h:165
int m_SnapRate
Definition server.h:146
std::optional< int > m_Score
Definition server.h:166
bool m_GotDDNetVersionPacket
Definition server.h:195
int m_MaplistEntryToSend
Definition server.h:186
CInput m_LatestInput
Definition server.h:156
NETADDR m_DebugDummyAddr
Definition server.h:175
int64_t m_TrafficSince
Definition server.h:149
std::shared_ptr< CHostLookup > m_pDnsblLookup
Definition server.h:204
bool operator<(const CMaplistEntry &Other) const
Definition server.cpp:1528
char m_aName[128]
Definition server.h:363
Definition server.h:63
void SendMsgRaw(int ClientId, const void *pData, int Size, int Flags) override
Definition server.cpp:990
@ MAX_RCONCMD_SEND
Definition server.h:102
UNIXSOCKET m_ConnLoggingSocket
Definition server.h:82
EDnsblState
Definition server.h:106
@ WHITELISTED
Definition server.h:110
@ NONE
Definition server.h:107
@ PENDING
Definition server.h:108
@ BLACKLISTED
Definition server.h:109
void SetClientName(int ClientId, const char *pName) override
Definition server.cpp:469
static void ConchainSixupUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4352
bool CheckReservedSlotAuth(int ClientId, const char *pPassword)
Definition server.cpp:1627
void ExpireServerInfo() override
Definition server.cpp:2666
void SetClientCountry(int ClientId, int Country) override
Definition server.cpp:479
void SetClientFlags(int ClientId, int Flags) override
Definition server.cpp:498
static bool StrHideIps(const char *pInput, char *pOutputWithIps, size_t OutputWithIpsSize, char *pOutputWithoutIps, size_t OutputWithoutIpsSize)
Definition server.cpp:619
int GetAuthedState(int ClientId) const override
Definition server.cpp:660
static void ConDumpSqlServers(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4154
void DoSnapshot()
Definition server.cpp:1009
static void ConchainCommandAccessUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4204
int64_t TickStartTime(int Tick)
Definition server.cpp:587
static void ConForceHighBandwidthOnSpectate(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4083
void OnNetMsgInfo(int ClientId, const char *pVersion, const char *pPasswordOrNullptr)
Definition server.cpp:1989
char m_aErrorShutdownReason[128]
Definition server.h:274
void ConchainRconPasswordChangeGeneric(const char *pRoleName, const char *pCurrent, IConsole::IResult *pResult)
Definition server.cpp:4291
void CacheServerInfo(CCache *pCache, int Type, bool SendClients)
Definition server.cpp:2275
void Ban(int ClientId, int Seconds, const char *pReason, bool VerbatimReason) override
Definition server.cpp:527
int m_aIdMap[MAX_CLIENTS *VANILLA_MAX_CLIENTS]
Definition server.h:217
static bool CanClientUseCommandCallback(int ClientId, const IConsole::ICommandInfo *pCommand, void *pUser)
Definition server.cpp:3646
const char * GetAnnouncementLine() override
Definition server.cpp:4571
void UpdateClientRconCommands(int ClientId)
Definition server.cpp:1502
void SetClientClan(int ClientId, const char *pClan) override
Definition server.cpp:474
static void ConAddSqlServer(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4103
bool DnsblPending(int ClientId) override
Definition server.h:509
void ReadAnnouncementsFile()
Definition server.cpp:4548
CServerBan m_ServerBan
Definition server.h:226
bool IsSixup(int ClientId) const override
Definition server.h:532
void CacheServerInfoSixup(CCache *pCache, bool SendClients, int MaxConsideredClients)
Definition server.cpp:2489
void SetRconCid(int ClientId) override
Definition server.cpp:655
class CDbConnectionPool * m_pConnectionPool
Definition server.h:85
bool IsRecording(int ClientId) override
Definition server.cpp:3969
const char * ClientClan(int ClientId) const override
Definition server.cpp:767
int * GetIdMap(int ClientId) override
Definition server.cpp:4668
void SetClientScore(int ClientId, std::optional< int > Score) override
Definition server.cpp:487
void StopDemos() override
Definition server.cpp:3974
void AuthRemoveKey(int KeySlot)
Definition server.cpp:3662
void SendCapabilities(int ClientId)
Definition server.cpp:1342
class IConsole * m_pConsole
Definition server.h:68
bool SetTimedOut(int ClientId, int OrigId) override
Definition server.cpp:4673
void RegisterCommands()
Definition server.cpp:4449
bool IsClientNameAvailable(int ClientId, const char *pNameRequest)
Definition server.cpp:338
int Port() const override
Definition server.cpp:797
bool SetClientNameImpl(int ClientId, const char *pNameRequest, bool Set)
Definition server.cpp:362
SHA256_DIGEST m_aCurrentMapSha256[NUM_MAP_TYPES]
Definition server.h:262
void OnNetMsgReady(int ClientId)
Definition server.cpp:2036
void SendConnectionReady(int ClientId)
Definition server.cpp:1428
static void ConchainStdoutOutputLevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4389
void SnapSetStaticsize(int ItemType, int Size) override
Definition server.cpp:4534
int Run()
Definition server.cpp:3117
void ExpireServerInfoAndQueueResend()
Definition server.cpp:2671
void RedirectClient(int ClientId, int Port) override
Definition server.cpp:556
std::shared_ptr< ILogger > m_pFileLogger
Definition server.h:281
bool m_ConnLoggingSocketCreated
Definition server.h:81
bool m_ServerInfoNeedsResend
Definition server.h:407
bool DnsblWhite(int ClientId) override
Definition server.h:504
void SendRconCmdGroupStart(int ClientId)
Definition server.cpp:1478
void GetServerInfoSixup(CPacker *pPacker, bool SendClients)
Definition server.cpp:2635
class IStorage * m_pStorage
Definition server.h:70
static void ConchainRconHelperPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4335
class IEngineAntibot * m_pAntibot
Definition server.h:71
void ReconnectClient(int ClientId)
Definition server.cpp:532
void SendRconCmdAdd(const IConsole::ICommandInfo *pCommandInfo, int ClientId)
Definition server.cpp:1462
static int ClientRejoinCallback(int ClientId, void *pUser)
Definition server.cpp:1158
void InitDnsbl(int ClientId)
Definition server.cpp:1247
CNetServer m_NetServer
Definition server.h:223
static void ConchainRegisterCommunityTokenRedact(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4362
const NETADDR * ClientAddr(int ClientId) const override
Definition server.cpp:735
void PumpNetwork(bool PacketWaiting)
Definition server.cpp:2852
void SendLogLine(const CLogMessage *pMessage)
Definition server.cpp:643
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:3985
int m_RunServer
Definition server.h:237
@ MAP_TYPE_SIX
Definition server.h:250
@ NUM_MAP_TYPES
Definition server.h:252
@ MAP_TYPE_SIXUP
Definition server.h:251
static void ConchainMapUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4342
bool ClientSlotEmpty(int ClientId) const override
Definition server.cpp:787
static void ConAuthAddHashed(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3718
void SendMapReload(int ClientId)
Definition server.cpp:1422
bool m_ReloadedWhenEmpty
Definition server.h:241
const char * ClientName(int ClientId) const override
Definition server.cpp:757
CDemoRecorder m_aDemoRecorder[NUM_RECORDERS]
Definition server.h:268
bool DnsblBlack(int ClientId) override
Definition server.h:513
void SendRconCmdRem(const IConsole::ICommandInfo *pCommandInfo, int ClientId)
Definition server.cpp:1471
void SnapSetStaticsize7(int ItemType, int Size) override
Definition server.cpp:4539
bool m_MapReload
Definition server.h:239
void OnNetMsgClientVer(int ClientId, CUuid *pConnectionId, int DDNetVersion, const char *pDDNetVersionStr)
Definition server.cpp:1974
static int NewClientCallback(int ClientId, void *pUser, bool Sixup)
Definition server.cpp:1214
CUPnP m_UPnP
Definition server.h:76
bool WouldClientClanChange(int ClientId, const char *pClanRequest) override
Definition server.cpp:464
unsigned m_aCurrentMapCrc[NUM_MAP_TYPES]
Definition server.h:263
int MaxClients() const override
Definition server.cpp:802
class IStorage * Storage()
Definition server.h:95
static void ConShutdown(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3883
const CConfig * Config() const
Definition server.h:93
class IGameServer * GameServer()
Definition server.h:91
static void ConchainRconModPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4328
void UpdateRegisterServerInfo()
Definition server.cpp:2677
void SendRconType(int ClientId, bool UsernameReq)
Definition server.cpp:1335
static void ConAuthList(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3875
const char * GetAuthName(int ClientId) const override
Definition server.cpp:683
class IGameServer * m_pGameServer
Definition server.h:66
class CConfig * m_pConfig
Definition server.h:67
std::vector< std::string > m_vAnnouncements
Definition server.h:279
int64_t m_GameStartTime
Definition server.h:228
static void ConReloadAnnouncement(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4174
@ RECORDER_AUTO
Definition server.h:258
@ NUM_RECORDERS
Definition server.h:259
@ RECORDER_MANUAL
Definition server.h:257
void LogoutClient(int ClientId, const char *pReason)
Definition server.cpp:4247
bool SetClientClanImpl(int ClientId, const char *pClanRequest, bool Set)
Definition server.cpp:418
static void ConAuthAdd(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3681
const char * GetNetErrorString(int ClientId) override
Definition server.h:522
void InitMaplist()
Definition server.cpp:4643
void OnNetMsgEnterGame(int ClientId)
Definition server.cpp:2062
void SendServerInfoConnless(const NETADDR *pAddr, int Token, int Type)
Definition server.cpp:2235
static void ConAuthUpdateHashed(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3802
CCache m_aServerInfoCache[3 *2]
Definition server.h:404
void FillAntibot(CAntibotRoundData *pData) override
Definition server.cpp:2641
void SendMap(int ClientId)
Definition server.cpp:1350
void OnNetMsgRconAuth(int ClientId, const char *pName, const char *pPw, bool SendRconCmds)
Definition server.cpp:2117
void SendRconCmdGroupEnd(int ClientId)
Definition server.cpp:1485
void SendRconLogLine(int ClientId, const CLogMessage *pMessage)
Definition server.cpp:1441
void DemoRecorder_HandleAutoStart() override
Definition server.cpp:3894
int m_RconClientId
Definition server.h:242
static void ConchainLoglevel(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4379
int DistinctClientCount() const override
Definition server.cpp:821
class IRegister * m_pRegister
Definition server.h:72
std::optional< int > SnapNewId() override
Definition server.cpp:4519
static const char * DnsblStateStr(EDnsblState State)
Definition server.cpp:305
CNameBans m_NameBans
Definition server.h:276
int ClientCountry(int ClientId) const override
Definition server.cpp:777
static void ConStatus(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3570
bool RateLimitServerInfoConnless()
Definition server.cpp:2213
bool CanClientUseCommand(int ClientId, const IConsole::ICommandInfo *pCommand) const
Definition server.cpp:3651
std::vector< CMaplistEntry > m_vMaplistEntries
Definition server.h:369
@ RUNNING
Definition server.h:233
@ STOPPING
Definition server.h:234
@ UNINITIALIZED
Definition server.h:232
int SendMsg(CMsgPacker *pMsg, int Flags, int ClientId) override
Definition server.cpp:913
static void ConchainMaxclientsperipUpdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4197
int m_PrintCBIndex
Definition server.h:244
CSnapIdPool m_IdPool
Definition server.h:222
CCache m_aSixupServerInfoCache[2]
Definition server.h:405
static void ConchainAnnouncementFilename(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4399
static int DelClientCallback(int ClientId, const char *pReason, void *pUser)
Definition server.cpp:1290
void UpdateClientMaplistEntries(int ClientId)
Definition server.cpp:1546
void SendRconLine(int ClientId, const char *pLine)
Definition server.cpp:1434
CServer()
Definition server.cpp:238
bool IsRconAuthed(int ClientId) const override
Definition server.cpp:673
int GetClientVersion(int ClientId) const override
Definition server.cpp:850
rust::Box< CSnapshotDelta > m_pSnapshotDelta
Definition server.h:219
~CServer() override
Definition server.cpp:285
void LogoutKey(int Key, const char *pReason)
Definition server.cpp:4284
void ProcessClientPacket(CNetChunk *pPacket)
Definition server.cpp:1655
void ResetNetErrorString(int ClientId) override
Definition server.h:523
friend class CServerLogger
Definition server.h:64
bool WouldClientNameChange(int ClientId, const char *pNameRequest) override
Definition server.cpp:459
IEngineHttp * m_pHttp
Definition server.h:69
void * m_pPersistentData
Definition server.h:246
void StopRecord(int ClientId) override
Definition server.cpp:3961
void SendMaplistGroupEnd(int ClientId)
Definition server.cpp:1540
bool ClientPrevIngame(int ClientId) override
Definition server.h:521
char m_aMapDownloadUrl[256]
Definition server.h:266
static void ConAuthRemove(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3848
rust::Box< CSnapshotDelta > m_pSnapshotDeltaSixup
Definition server.h:220
void UpdateDebugDummies(bool ForceDisconnect)
Definition server.cpp:3058
bool m_ServerInfoNeedsUpdate
Definition server.h:406
void ReloadMap() override
Definition server.cpp:2961
static void ConAuthUpdate(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3771
IEngine * m_pEngine
Definition server.h:73
CONN_LOGGING_CMD
Definition server.h:538
@ OPEN_SESSION
Definition server.h:539
@ CLOSE_SESSION
Definition server.h:540
void SendConnLoggingCommand(CONN_LOGGING_CMD Cmd, const NETADDR *pAddr)
Definition server.cpp:1274
bool GetClientInfo(int ClientId, CClientInfo *pInfo) const override
Definition server.cpp:698
static void ConReloadMaplist(IConsole::IResult *pResult, void *pUserData)
Definition server.cpp:4180
void OnNetMsgRconCmd(int ClientId, const char *pCmd)
Definition server.cpp:2089
void SendServerInfo(const NETADDR *pAddr, int Token, int Type, bool SendClients)
Definition server.cpp:2581
CClient m_aClients[MAX_CLIENTS]
Definition server.h:216
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:4043
class IEngineAntibot * Antibot()
Definition server.h:96
static int NewClientNoAuthCallback(int ClientId, void *pUser)
Definition server.cpp:1180
IEngine * Engine()
Definition server.h:98
static void ConchainRconPasswordChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4321
static void ConStopRecord(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4022
CEcon m_Econ
Definition server.h:224
int NumRconCommands(int ClientId)
Definition server.cpp:1491
rust::Box< CSnapshotBuilder > m_pSnapshotBuilder
Definition server.h:221
class CDbConnectionPool * DbPool()
Definition server.h:97
int m_PreviousDebugDummies
Definition server.h:87
static void ConHideAuthStatus(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4063
class CConfig * Config()
Definition server.h:92
int Init()
Definition server.cpp:592
int ClientCount() const override
Definition server.cpp:807
CFifo m_Fifo
Definition server.h:225
void ChangeMap(const char *pMap) override
Definition server.cpp:2955
bool ClientIngame(int ClientId) const override
Definition server.cpp:792
bool SnapNewItem(int Type, int Id, rust::Slice< const int32_t > Data) override
Definition server.cpp:4529
size_t m_AnnouncementLastLine
Definition server.h:278
const std::array< char, NETADDR_MAXSTRSIZE > & ClientAddrStringImpl(int ClientId, bool IncludePort) const override
Definition server.cpp:746
void StartRecord(int ClientId) override
Definition server.cpp:3938
bool IsRconAuthedAdmin(int ClientId) const override
Definition server.cpp:678
int LoadMap(const char *pMapName)
Definition server.cpp:2966
int m_aPrevStates[MAX_CLIENTS]
Definition server.h:494
int m_RconAuthLevel
Definition server.h:243
bool ErrorShutdown() const
Definition server.h:529
bool HasAuthHidden(int ClientId) const override
Definition server.cpp:692
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:4606
void SendMaplistGroupStart(int ClientId)
Definition server.cpp:1533
static void ConchainConnLoggingServerChange(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4422
static void ConchainInputFifo(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4410
int64_t m_ServerInfoFirstRequest
Definition server.h:271
char m_aShutdownReason[128]
Definition server.h:245
IConsole::EAccessLevel ConsoleAccessLevel(int ClientId) const
Definition server.cpp:322
static void ConLogout(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4032
static void ConKick(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:3556
void SaveDemo(int ClientId, float Time) override
Definition server.cpp:3928
void SetClientDDNetVersion(int ClientId, int DDNetVersion) override
Definition server.cpp:724
void SetLoggers(std::shared_ptr< ILogger > &&pFileLogger, std::shared_ptr< ILogger > &&pStdoutLogger)
Definition server.cpp:4704
void SetErrorShutdown(const char *pReason) override
Definition server.cpp:4699
class IConsole * Console()
Definition server.h:94
static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
Definition server.cpp:4186
void Kick(int ClientId, const char *pReason) override
Definition server.cpp:506
void SendMapData(int ClientId, int Chunk)
Definition server.cpp:1386
void UpdateServerInfo(bool Resend)
Definition server.cpp:2814
CAuthManager m_AuthManager
Definition server.h:269
bool m_SameMapReload
Definition server.h:240
void SetTimeoutProtected(int ClientId) override
Definition server.h:525
void SnapFreeId(int Id) override
Definition server.cpp:4524
static void ConMapReload(IConsole::IResult *pResult, void *pUser)
Definition server.cpp:4027
Definition snap_id_pool.h:10
Definition snapshot.h:89
Definition upnp.h:13
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:105
Definition antibot.h:29
Definition http.h:22
Definition engine.h:15
Definition server.h:305
Definition logger.h:68
Definition register.h:11
Definition server.h:36
int Tick() const
Definition server.h:55
Definition storage.h:21
@ MAX_CLAN_LENGTH
Definition protocol.h:109
@ MAX_INPUT_SIZE
Definition protocol.h:105
@ MAX_CLIENTS
Definition protocol.h:89
@ VANILLA_MAX_CLIENTS
Definition protocol.h:90
@ MAX_NAME_LENGTH
Definition protocol.h:108
int UNIXSOCKET
Definition net.h:42
struct sockaddr_un UNIXSOCKETADDR
Definition net.h:47
CServer * CreateServer()
Definition server.cpp:4544
bool IsInterrupted()
Definition main.cpp:39
@ SERVER_DEMO_CLIENT
Definition server.h:32
Definition antibot_data.h:111
Definition network.h:139
Definition protocol.h:1532
Definition uuid_manager.h:18
Definition server.h:46
Definition types.h:168
Definition hash.h:12
Definition score_test.cpp:25