Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
servatrice.h
Go to the documentation of this file.
1/***************************************************************************
2 * Copyright (C) 2008 by Max-Wilhelm Bruker *
3 * brukie@laptop *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20#ifndef SERVATRICE_H
21#define SERVATRICE_H
22
23#include "metrics_registry.h"
24#include "ratelimiter.h"
25#include "smtpclient.h"
26
27#include <QByteArray>
28#include <QDateTime>
29#include <QHostAddress>
30#include <QList>
31#include <QMap>
32#include <QMetaType>
33#include <QMutex>
34#include <QMutexLocker>
35#include <QReadWriteLock>
36#include <QSslCertificate>
37#include <QSslKey>
38#include <QString>
39
40// IWYU pragma: keep
41// Q_DECLARE_METATYPE below needs the complete type.
42#include <QSqlDatabase>
43#include <QTcpServer>
44#include <QWebSocketServer>
45#include <QtGlobal>
46#include <atomic>
47#include <libcockatrice/protocol/pb/response_report_stats.pb.h>
48#include <memory>
49#include <qtmetamacros.h>
50#include <server.h>
51#include <utility>
52
53class QObject;
54class QThread;
55class SessionEvent;
56
57Q_DECLARE_METATYPE(QSqlDatabase)
58
59class QTimer;
60class Servatrice;
64class IslInterface;
65
66class Servatrice_GameServer : public QTcpServer
67{
68 Q_OBJECT
69private:
72
73public:
75 int _numberPools,
76 const QSqlDatabase &_sqlDatabase,
77 QObject *parent = nullptr);
78 ~Servatrice_GameServer() override;
79
80protected:
81 void incomingConnection(qintptr socketDescriptor) override;
83};
84
85class Servatrice_WebsocketGameServer : public QWebSocketServer
86{
87 Q_OBJECT
88private:
91
92public:
94 int _numberPools,
95 const QSqlDatabase &_sqlDatabase,
96 QObject *parent = nullptr);
98
99protected:
101protected slots:
102 void onNewConnection();
103};
104
105class Servatrice_IslServer : public QTcpServer
106{
107 Q_OBJECT
108private:
110 QSslCertificate cert;
111 QSslKey privateKey;
112
113public:
115 const QSslCertificate &_cert,
116 QSslKey _privateKey,
117 QObject *parent = nullptr)
118 : QTcpServer(parent), server(_server), cert(_cert), privateKey(std::move(_privateKey))
119 {
120 }
121
122protected:
123 void incomingConnection(qintptr socketDescriptor) override;
124};
125
127{
128public:
129 int id;
130 QSslCertificate cert;
131 QString hostname;
132 QHostAddress address;
135
137 const QSslCertificate &_cert,
138 QString _hostname,
139 const QHostAddress &_address,
140 int _gamePort,
141 int _controlPort)
142 : id(_id), cert(_cert), hostname(std::move(_hostname)), address(_address), gamePort(_gamePort),
143 controlPort(_controlPort)
144 {
145 }
146};
147
148class Servatrice : public Server
149{
150 Q_OBJECT
151public:
164private slots:
165 void statusUpdate();
166 void sweepLegacyBackups();
167 void shutdownTimeout();
169
170protected:
171 void doSendIslMessage(const IslMessage &msg, int _serverId) override;
172
173private:
187 mutable QMutex loginMessageMutex;
189 mutable QMutex shutdownStateMutex;
190 QString dbPrefix;
194 bool cleanupDatabaseForEmail(const QString &userName, EmailType type, const QString &token, qint64 rowId);
198 quint64 txBytes, rxBytes;
202 std::atomic<qint64> eventLoopStallsTotal{0};
203 std::atomic<qint64> eventLoopLastStallMs{0};
204 std::atomic<qint64> eventLoopMaxStallMs{0};
205
210
211 mutable QMutex reportStatsMutex;
213 std::shared_ptr<const Response_ReportStats> reportStatsCache;
214 static constexpr int reportStatsCacheTtlSeconds = 60;
215
217
218 mutable QMutex serverListMutex;
220 void updateServerList();
221
223
224 QString getDBPrefixString() const;
225 QString getDBHostNameString() const;
226 QString getDBDatabaseNameString() const;
227 QString getDBUserNameString() const;
228 QString getDBPasswordString() const;
229 QString getRoomsMethodString() const;
230 QString getISLNetworkSSLCertFile() const;
231 QString getISLNetworkSSLKeyFile() const;
232 int getServerStatusUpdateTime() const;
233 int getNumberOfTCPPools() const;
234 int getServerTCPPort() const;
235 int getNumberOfWebSocketPools() const;
236 int getServerWebSocketPort() const;
237 int getISLNetworkPort() const;
238 bool getISLNetworkEnabled() const;
239 bool getEnableInternalSMTPClient() const;
240 QHostAddress getServerTCPHost() const;
241 QHostAddress getServerWebSocketHost() const;
242
243public slots:
244 void scheduleShutdown(const QString &reason, int minutes);
245 void updateLoginMessage();
246 void setRequiredFeatures(const QString &featureList);
247 void onEmailDelivered(const QString &userName, EmailType type, const QString &token, qint64 rowId);
248 void onEmailPermanentlyFailed(const QString &userName,
250 FailureReason reason,
251 const QString &token,
252 qint64 rowId);
253
254public:
255 explicit Servatrice(QObject *parent = nullptr);
256 ~Servatrice() override;
257 bool initServer();
262 bool requiresChallengeResponseAuth() const override
263 {
265 }
266
267 QByteArray getLegacyBackupKey() const;
269 int getLegacyBackupTtlDays() const;
270 QString getServerName() const;
271 QString getLoginMessage() const override
272 {
273 QMutexLocker locker(&loginMessageMutex);
274 return loginMessage;
275 }
276 SessionEvent *getLoginSessionEvent() const override;
278 QString getRequiredFeatures() const override;
279 QString getAuthenticationMethodString() const;
280 QString getDBTypeString() const;
281 QString getDbPrefix() const
282 {
283 return dbPrefix;
284 }
285 QString getEmailBlackList() const;
286 QString getEmailWhiteList() const;
292 bool permitUnregisteredUsers() const override
293 {
295 }
296 bool getGameShouldPing() const override
297 {
298 return true;
299 }
300 bool getClientIDRequiredEnabled() const override;
301 bool getRegOnlyServerEnabled() const override;
302 bool getMaxUserLimitEnabled() const override;
303 bool getStoreReplaysEnabled() const override;
304 bool getRegistrationEnabled() const;
307 bool getEnableLogQuery() const override;
308 bool getEnableForgotPassword() const;
310 bool getEnableAudit() const;
311 bool getEnableRegistrationAudit() const;
312 bool getEnableForgotPasswordAudit() const;
313 int getMinPasswordLength() const;
314 int getIdleClientTimeout() const override;
315 int getServerID() const override;
316 int getMaxGameInactivityTime() const override;
317 int getMaxPlayerInactivityTime() const override;
318 int getClientKeepAlive() const override;
319 int getDeckShareExpiryDays() const;
320 int getDeckShareCleanupInterval() const;
322 int getDeckShareMaxSharesPerDay() const;
323 int getMaxUsersPerAddress() const;
325 QString getTrustedSources() const;
326 int getMessageCountingInterval() const override;
327 int getMaxMessageCountPerInterval() const override;
328 int getMaxMessageSizePerInterval() const override;
329 int getMaxGamesPerUser() const override;
330 int getCommandCountingInterval() const override;
331 int getMaxCommandCountPerInterval() const override;
332 int getMaxUserTotal() const override;
333 bool permitCreateGameAsJudge() const override;
334 int getMaxTcpUserLimit() const;
335 int getMaxWebSocketUserLimit() const;
336 int getUsersWithAddress(const QHostAddress &address) const;
337 int getMaxAccountsPerEmail() const;
338 int getForgotPasswordTokenLife() const;
339 QList<AbstractServerSocketInterface *> getUsersWithAddressAsList(const QHostAddress &address) const;
340 void incTxBytes(quint64 num);
341 void incRxBytes(quint64 num);
342 void addDatabaseInterface(QThread *thread, Servatrice_DatabaseInterface *databaseInterface);
343
344 // Metrics (see [metrics] section in servatrice.ini.example)
349
356 qint64 getCardsInGamesTotal() const;
358 {
360 }
361
363 {
364 return metricsStallWarnMs;
365 }
366 void observeGameStartDurationMs(qint64 elapsedMs) override;
368 {
369 return eventLoopStallsTotal.load(std::memory_order_relaxed);
370 }
372 {
373 return eventLoopLastStallMs.load(std::memory_order_relaxed);
374 }
376 {
377 return eventLoopMaxStallMs.load(std::memory_order_relaxed);
378 }
379
380 void observeEventLoopStall(const QString &threadName, qint64 overshootMs);
385 void watchWorkerThread(QThread *thread);
386
388 {
389 return &rateLimiter;
390 }
391 bool recordFailedLogin(const QString &ipAddress, const QString &userName) override;
392 bool isLoginRateLimited(const QString &ipAddress, const QString &userName) override;
393 int loginRateLimitRemainingSeconds(const QString &ipAddress, const QString &userName) override;
394 void clearFailedLogins(const QString &ipAddress, const QString &userName) override;
395 bool recordRegistrationAttempt(const QString &ipAddress);
396 bool recordForgotPasswordAttempt(const QString &ipAddress);
398 bool isRateLimitExempt(const QString &ipAddress) const;
399 int getMaxLoginAttemptsPerIp() const;
401 int getMaxRegistrationsPerIp() const;
405
406 bool islConnectionExists(int _serverId) const;
407 void addIslInterface(int _serverId, IslInterface *interface);
408 void removeIslInterface(int _serverId);
409 QReadWriteLock islLock;
410
411 // The moderation queue statistics are shared between all connected moderators and
412 // cached briefly to avoid re-running several full-table queries on every refresh.
413 std::shared_ptr<const Response_ReportStats> getCachedReportStats() const;
414 void cacheReportStats(const Response_ReportStats &stats);
415
417};
418
419#endif
Definition serversocketinterface.h:114
Definition isl_interface.h:40
Lock-free accumulation of command processing statistics.
Definition metrics_registry.h:30
Definition remote_connection_controller.h:20
Definition game.h:18
Thread-safe per-key attempt limiter used to throttle abusive requests.
Definition ratelimiter.h:11
Definition servatrice_connection_pool.h:12
Definition servatrice_database_interface.h:51
Definition servatrice.h:67
Servatrice_ConnectionPool * findLeastUsedConnectionPool()
Definition servatrice.cpp:133
void incomingConnection(qintptr socketDescriptor) override
Definition servatrice.cpp:121
Servatrice * server
Definition servatrice.h:70
Servatrice_GameServer(Servatrice *_server, int _numberPools, const QSqlDatabase &_sqlDatabase, QObject *parent=nullptr)
Definition servatrice.cpp:85
QList< Servatrice_ConnectionPool * > connectionPools
Definition servatrice.h:71
Definition servatrice.h:106
QSslCertificate cert
Definition servatrice.h:110
Servatrice * server
Definition servatrice.h:109
void incomingConnection(qintptr socketDescriptor) override
Definition servatrice.cpp:224
QSslKey privateKey
Definition servatrice.h:111
Servatrice_IslServer(Servatrice *_server, const QSslCertificate &_cert, QSslKey _privateKey, QObject *parent=nullptr)
Definition servatrice.h:114
Definition servatrice.h:86
Servatrice_WebsocketGameServer(Servatrice *_server, int _numberPools, const QSqlDatabase &_sqlDatabase, QObject *parent=nullptr)
Definition servatrice.cpp:152
QList< Servatrice_ConnectionPool * > connectionPools
Definition servatrice.h:90
Servatrice * server
Definition servatrice.h:89
Servatrice_ConnectionPool * findLeastUsedConnectionPool()
Definition servatrice.cpp:207
void onNewConnection()
Definition servatrice.cpp:191
Definition servatrice.h:149
QString getISLNetworkSSLKeyFile() const
Definition servatrice.cpp:1455
void sweepLegacyBackups()
Definition servatrice.cpp:1023
int getMessageCountingInterval() const override
Definition servatrice.cpp:1341
bool initServer()
Definition servatrice.cpp:292
int getDeckShareCleanupInterval() const
Definition servatrice.cpp:1381
int getMetricsSlowCommandMs() const
Definition servatrice.h:357
std::atomic< qint64 > eventLoopLastStallMs
overshoot of the most recent stall
Definition servatrice.h:203
int getNumberOfTCPPools() const
Definition servatrice.cpp:1397
int getServerWebSocketPort() const
Definition servatrice.cpp:1437
int getUsersWithAddress(const QHostAddress &address) const
Definition servatrice.cpp:783
bool recordRegistrationAttempt(const QString &ipAddress)
Definition servatrice.cpp:1532
QString getAuthenticationMethodString() const
Definition servatrice.cpp:1180
quint64 rxBytes
Definition servatrice.h:198
int metricsStallWarnMs
Definition servatrice.h:201
int getDeckShareExpiryDays() const
Definition servatrice.cpp:1376
QString getDBHostNameString() const
Definition servatrice.cpp:1275
QHostAddress getServerWebSocketHost() const
Definition servatrice.cpp:1427
QString getDBTypeString() const
Definition servatrice.cpp:1259
int getMaxCommandCountPerInterval() const override
Definition servatrice.cpp:1366
int metricsSlowCommandMs
Definition servatrice.h:200
bool getISLNetworkEnabled() const
Definition servatrice.cpp:1445
int getForgotPasswordWindowSeconds() const
Definition servatrice.cpp:1591
std::atomic< qint64 > eventLoopMaxStallMs
worst overshoot seen since process start
Definition servatrice.h:204
QList< ServerProperties > serverList
Definition servatrice.h:219
int nextShutdownMessageMinutes
Definition servatrice.h:208
QList< AbstractServerSocketInterface * > getUsersWithAddressAsList(const QHostAddress &address) const
Definition servatrice.cpp:796
int getMaxUsersPerAddress() const
Definition servatrice.cpp:1331
void onEmailDelivered(const QString &userName, EmailType type, const QString &token, qint64 rowId)
Definition servatrice.cpp:942
bool getEnableAudit() const
Definition servatrice.cpp:1611
Servatrice(QObject *parent=nullptr)
Definition servatrice.cpp:237
void onEmailPermanentlyFailed(const QString &userName, EmailType type, FailureReason reason, const QString &token, qint64 rowId)
Definition servatrice.cpp:952
AuthenticationStrictness
Definition servatrice.h:159
@ AuthenticationLegacy
Definition servatrice.h:160
@ AuthenticationMixed
Definition servatrice.h:161
@ AuthenticationStrict
Definition servatrice.h:162
std::shared_ptr< const Response_ReportStats > reportStatsCache
Definition servatrice.h:213
bool getRequireEmailActivationEnabled() const
Definition servatrice.cpp:1213
bool getRegOnlyServerEnabled() const override
Definition servatrice.cpp:1175
QTimer * shutdownTimer
Definition servatrice.h:209
void shutdownTimeout()
Definition servatrice.cpp:1060
int getMaxMessageCountPerInterval() const override
Definition servatrice.cpp:1346
int getMaxGameInactivityTime() const override
Definition servatrice.cpp:1316
void addDatabaseInterface(QThread *thread, Servatrice_DatabaseInterface *databaseInterface)
Definition servatrice.cpp:725
int getForgotPasswordTokenLife() const
Definition servatrice.cpp:1490
void doSendIslMessage(const IslMessage &msg, int _serverId) override
Definition servatrice.cpp:1131
MetricsRegistry & getMetricsRegistry()
Definition servatrice.h:345
QString getServerName() const
Definition servatrice.cpp:1160
int getMaxRegistrationsPerIp() const
Definition servatrice.cpp:1576
bool getEnableLogQuery() const override
Definition servatrice.cpp:1470
bool getRegistrationEnabled() const
Definition servatrice.cpp:1203
bool getClientIDRequiredEnabled() const override
Definition servatrice.cpp:1170
int getMaxPlayerInactivityTime() const override
Definition servatrice.cpp:1321
int getLoginAttemptWindowSeconds() const
Definition servatrice.cpp:1571
int getMaxAccountsPerEmail() const
Definition servatrice.cpp:1475
QString getLoginMessage() const override
Definition servatrice.h:271
std::shared_ptr< const Response_ReportStats > getCachedReportStats() const
Definition servatrice.cpp:766
QString loginMessage
Definition servatrice.h:188
int getMaxForgotPasswordRequestsPerIp() const
Definition servatrice.cpp:1586
DatabaseType
Definition servatrice.h:175
@ DatabaseMySql
Definition servatrice.h:177
@ DatabaseNone
Definition servatrice.h:176
QTimer * pingClock
Definition servatrice.h:181
bool recordForgotPasswordAttempt(const QString &ipAddress)
Definition servatrice.cpp:1541
Servatrice_DatabaseInterface * servatriceDatabaseInterface
Definition servatrice.h:193
int getCommandCountingInterval() const override
Definition servatrice.cpp:1361
DatabaseType databaseType
Definition servatrice.h:180
bool cleanupDatabaseForEmail(const QString &userName, EmailType type, const QString &token, qint64 rowId)
Definition servatrice.cpp:976
void cleanupExpiredDeckShares()
Definition servatrice.cpp:852
bool isRateLimitExempt(const QString &ipAddress) const
True when the address is in security/trusted_sources and therefore exempt from per-address limits.
Definition servatrice.cpp:1550
AuthenticationMethod authenticationMethod
Definition servatrice.h:179
bool getMaxUserLimitEnabled() const override
Definition servatrice.cpp:1155
QMutex serverListMutex
Definition servatrice.h:218
int getServerID() const override
Definition servatrice.cpp:1165
RateLimiter rateLimiter
Definition servatrice.h:216
AuthenticationStrictness getAuthenticationStrictness() const
Definition servatrice.cpp:1223
QString getRequiredFeatures() const override
Definition servatrice.cpp:1218
void updateServerList()
Definition servatrice.cpp:730
void scheduleShutdown(const QString &reason, int minutes)
Definition servatrice.cpp:1031
void statusUpdate()
Definition servatrice.cpp:857
bool getEnableForgotPasswordAudit() const
Definition servatrice.cpp:1621
bool isLoginRateLimited(const QString &ipAddress, const QString &userName) override
True if the (address, username) pair is already locked out of logging in.
Definition servatrice.cpp:1517
int loginRateLimitRemainingSeconds(const QString &ipAddress, const QString &userName) override
Seconds remaining before the login rate limit for the (address, username) pair lifts....
Definition servatrice.cpp:1526
int getMaxTcpUserLimit() const
Definition servatrice.cpp:1193
AuthenticationMethod
Definition servatrice.h:153
@ AuthenticationPassword
Definition servatrice.h:156
@ AuthenticationNone
Definition servatrice.h:154
@ AuthenticationSql
Definition servatrice.h:155
bool requiresChallengeResponseAuth() const override
True when only challenge-response logins are accepted (strict mode).
Definition servatrice.h:262
QReadWriteLock islLock
Definition servatrice.h:409
QString getRoomsMethodString() const
Definition servatrice.cpp:1308
QHostAddress getServerTCPHost() const
Definition servatrice.cpp:1407
int getServerStatusUpdateTime() const
Definition servatrice.cpp:1371
AuthenticationMethod getAuthenticationMethod() const
Definition servatrice.h:287
QString getEmailWhiteList() const
Definition servatrice.cpp:1606
SessionEvent * getLoginSessionEvent() const override
Definition servatrice.cpp:1013
QMutex reportStatsMutex
Definition servatrice.h:211
void updateLoginMessage()
Definition servatrice.cpp:808
void setRequiredFeatures(const QString &featureList)
Definition servatrice.cpp:837
void incRxBytes(quint64 num)
Definition servatrice.cpp:1053
SessionEvent * makeShutdownEvent() const
Definition servatrice.cpp:1005
QString getISLNetworkSSLCertFile() const
Definition servatrice.cpp:1450
MetricsRegistry metricsRegistry
Definition servatrice.h:199
int getMetricsStallWarnMs() const
Heartbeat overshoot that counts as a stall. A value of 0 disables the watchdogs.
Definition servatrice.h:362
bool getStoreReplaysEnabled() const override
Definition servatrice.cpp:1188
int getLegacyBackupTtlDays() const
Days a legacy password backup may go unused before it is purged.
Definition servatrice.cpp:1249
QString officialWarnings
Definition servatrice.h:192
int getNumberOfWebSocketPools() const
Definition servatrice.cpp:1422
bool getEnableInternalSMTPClient() const
Definition servatrice.cpp:1480
int getMaxGamesPerUser() const override
Definition servatrice.cpp:1356
int getMaxLoginAttemptsPerIp() const
Definition servatrice.cpp:1566
bool getEnableForgotPassword() const
Definition servatrice.cpp:1485
QByteArray getLegacyBackupKey() const
Key sealing legacy password backups, or empty when they are disabled.
Definition servatrice.cpp:1235
bool recordFailedLogin(const QString &ipAddress, const QString &userName) override
Record a failed login attempt for the (address, username) pair; returns true if now locked out.
Definition servatrice.cpp:1508
void removeIslInterface(int _serverId)
Definition servatrice.cpp:1123
bool islConnectionExists(int _serverId) const
Definition servatrice.cpp:1092
bool getEnableForgotPasswordChallenge() const
Definition servatrice.cpp:1596
void clearFailedLogins(const QString &ipAddress, const QString &userName) override
Clear any failed-login lockout for the (address, username) pair, e.g. after a successful login.
Definition servatrice.cpp:1561
QString getDBPrefixString() const
Definition servatrice.cpp:1267
static constexpr int reportStatsCacheTtlSeconds
Definition servatrice.h:214
int getDeckShareMaxSharesPerDay() const
Definition servatrice.cpp:1392
QString getDbPrefix() const
Definition servatrice.h:281
int getMaxMessageSizePerInterval() const override
Definition servatrice.cpp:1351
QTimer * legacyBackupSweepClock
Definition servatrice.h:183
int getMaxUserTotal() const override
Definition servatrice.cpp:1150
QMutex txBytesMutex
Definition servatrice.h:197
QMutex shutdownStateMutex
Definition servatrice.h:189
QString getDBDatabaseNameString() const
Definition servatrice.cpp:1283
bool permitCreateGameAsJudge() const override
Definition servatrice.cpp:1402
QList< ServerProperties > getServerList() const
Definition servatrice.cpp:757
QMap< int, IslInterface * > islInterfaces
Definition servatrice.h:222
Servatrice_IslServer * islServer
Definition servatrice.h:186
bool getRequireEmailForRegistrationEnabled() const
Definition servatrice.cpp:1208
int getIdleClientTimeout() const override
Definition servatrice.cpp:1465
std::atomic< qint64 > eventLoopStallsTotal
heartbeat overshoots past the warn threshold
Definition servatrice.h:202
bool getEnableRegistrationAudit() const
Definition servatrice.cpp:1616
int getMinPasswordLength() const
Definition servatrice.cpp:1626
void watchWorkerThread(QThread *thread)
Definition servatrice.cpp:698
QMap< QString, bool > serverRequiredFeatureList
Definition servatrice.h:191
Servatrice_WebsocketGameServer * websocketGameServer
Definition servatrice.h:185
QString dbPrefix
Definition servatrice.h:190
quint64 txBytes
Definition servatrice.h:198
qint64 getEventLoopMaxStallMs() const
Definition servatrice.h:375
int getServerTCPPort() const
Definition servatrice.cpp:1417
int getISLNetworkPort() const
Definition servatrice.cpp:1460
QTimer * statusUpdateClock
Definition servatrice.h:181
RateLimiter * getRateLimiter()
Definition servatrice.h:387
void incTxBytes(quint64 num)
Definition servatrice.cpp:1046
qint64 getEventLoopStallsTotal() const
Definition servatrice.h:367
int getClientKeepAlive() const override
Definition servatrice.cpp:1326
bool getGameShouldPing() const override
Definition servatrice.h:296
int uptime
Definition servatrice.h:196
QString getDBUserNameString() const
Definition servatrice.cpp:1292
int getRegistrationWindowSeconds() const
Definition servatrice.cpp:1581
int serverId
Definition servatrice.h:195
void observeGameStartDurationMs(qint64 elapsedMs) override
Definition servatrice.cpp:680
qint64 getCardsInGamesTotal() const
Definition servatrice.cpp:710
QString getTrustedSources() const
Raw security/trusted_sources list; match addresses against it with isTrustedSource().
Definition servatrice.cpp:1336
QMutex loginMessageMutex
Definition servatrice.h:187
QString shutdownReason
Definition servatrice.h:206
QString getEmailBlackList() const
Definition servatrice.cpp:1601
QTimer * deckShareCleanupClock
Definition servatrice.h:182
int getDeckShareMaxDecksPerShare() const
Definition servatrice.cpp:1387
Servatrice_GameServer * gameServer
Definition servatrice.h:184
QString getDBPasswordString() const
Definition servatrice.cpp:1300
qint64 getEventLoopLastStallMs() const
Definition servatrice.h:371
int shutdownMinutes
Definition servatrice.h:207
void observeEventLoopStall(const QString &threadName, qint64 overshootMs)
Records one heartbeat overshoot and logs a single warning for it.
Definition servatrice.cpp:685
void cacheReportStats(const Response_ReportStats &stats)
Definition servatrice.cpp:776
int getMaxWebSocketUserLimit() const
Definition servatrice.cpp:1198
QMap< QString, bool > getServerRequiredFeatureList() const override
Definition servatrice.h:258
bool permitUnregisteredUsers() const override
Definition servatrice.h:292
void addIslInterface(int _serverId, IslInterface *interface)
Definition servatrice.cpp:1098
QMutex rxBytesMutex
Definition servatrice.h:197
QDateTime reportStatsTimestamp
Definition servatrice.h:212
int controlPort
Definition servatrice.h:134
int id
Definition servatrice.h:129
QSslCertificate cert
Definition servatrice.h:130
QString hostname
Definition servatrice.h:131
int gamePort
Definition servatrice.h:133
ServerProperties(int _id, const QSslCertificate &_cert, QString _hostname, const QHostAddress &_address, int _gamePort, int _controlPort)
Definition servatrice.h:136
QHostAddress address
Definition servatrice.h:132
Server(QObject *parent=nullptr)
Definition server.cpp:64
EmailType const QString & token
Definition smtpclient.cpp:31
EmailType type
Definition smtpclient.cpp:30
EmailType
Types of e-mail the SMTP client is able to deliver.
Definition smtpclient.h:20
FailureReason
Why a permanent e-mail delivery failure occurred.
Definition smtpclient.h:31
Definition isl_message.proto:7
Definition response_report_stats.proto:3
Definition session_event.proto:2