Cockatrice 2026-06-27-Development-3.1.0-beta.3
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
serversocketinterface.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 SERVERSOCKETINTERFACE_H
21#define SERVERSOCKETINTERFACE_H
22
23#include <QHostAddress>
24#include <QMutex>
25#include <QTcpSocket>
26#include <QWebSocket>
28
29class Servatrice;
31class DeckList;
32class ServerInfo_DeckStorage_Folder;
33
34class Command_AddToList;
35class Command_RemoveFromList;
36class Command_DeckList;
37class Command_DeckNewDir;
38class Command_DeckDelDir;
39class Command_DeckDel;
40class Command_DeckDownload;
41class Command_DeckUpload;
42class Command_ReplayList;
43class Command_ReplayDownload;
44class Command_ReplayModifyMatch;
45class Command_ReplayDeleteMatch;
46class Command_ReplayGetCode;
47class Command_ReplaySubmitCode;
48
49class Command_BanFromServer;
50class Command_UpdateServerMessage;
51class Command_ShutdownServer;
52class Command_ReloadConfig;
53
54class Command_AccountEdit;
55class Command_AccountImage;
56class Command_AccountPassword;
57
59{
60 Q_OBJECT
61protected slots:
62 void catchSocketError(QAbstractSocket::SocketError socketError);
64 virtual void flushOutputQueue() = 0;
65signals:
67 void incTxBytes(qint64 amount);
68
69protected:
70 void logDebugMessage(const QString &message);
71 bool tooManyRegistrationAttempts(const QString &ipAddress);
72
73 virtual void writeToSocket(QByteArray &data) = 0;
74 virtual void flushSocket() = 0;
75
77 QList<ServerMessage> outputQueue;
79
80private:
82
83 Response::ResponseCode cmdAddToList(const Command_AddToList &cmd, ResponseContainer &rc);
84 Response::ResponseCode cmdRemoveFromList(const Command_RemoveFromList &cmd, ResponseContainer &rc);
85 int getDeckPathId(int basePathId, QStringList path);
86 int getDeckPathId(const QString &path);
87 bool deckListHelper(int folderId, ServerInfo_DeckStorage_Folder *folder);
88 Response::ResponseCode cmdDeckList(const Command_DeckList &cmd, ResponseContainer &rc);
89 Response::ResponseCode cmdDeckNewDir(const Command_DeckNewDir &cmd, ResponseContainer &rc);
90 void deckDelDirHelper(int basePathId);
91 void sendServerMessage(const QString userName, const QString message);
92 Response::ResponseCode cmdDeckDelDir(const Command_DeckDelDir &cmd, ResponseContainer &rc);
93 Response::ResponseCode cmdDeckDel(const Command_DeckDel &cmd, ResponseContainer &rc);
94 Response::ResponseCode cmdDeckUpload(const Command_DeckUpload &cmd, ResponseContainer &rc);
96 Response::ResponseCode cmdDeckDownload(const Command_DeckDownload &cmd, ResponseContainer &rc);
97 Response::ResponseCode cmdReplayList(const Command_ReplayList &cmd, ResponseContainer &rc);
98 Response::ResponseCode cmdReplayDownload(const Command_ReplayDownload &cmd, ResponseContainer &rc);
99 Response::ResponseCode cmdReplayModifyMatch(const Command_ReplayModifyMatch &cmd, ResponseContainer &rc);
100 Response::ResponseCode cmdReplayDeleteMatch(const Command_ReplayDeleteMatch &cmd, ResponseContainer &rc);
101 QString createHashForReplay(int gameId);
102 Response::ResponseCode cmdReplayGetCode(const Command_ReplayGetCode &cmd, ResponseContainer &rc);
103 Response::ResponseCode cmdReplaySubmitCode(const Command_ReplaySubmitCode &cmd, ResponseContainer &rc);
104 Response::ResponseCode cmdBanFromServer(const Command_BanFromServer &cmd, ResponseContainer &rc);
105 Response::ResponseCode cmdWarnUser(const Command_WarnUser &cmd, ResponseContainer &rc);
106 Response::ResponseCode cmdGetLogHistory(const Command_ViewLogHistory &cmd, ResponseContainer &rc);
107 Response::ResponseCode cmdGetBanHistory(const Command_GetBanHistory &cmd, ResponseContainer &rc);
108 Response::ResponseCode cmdGetWarnList(const Command_GetWarnList &cmd, ResponseContainer &rc);
109 Response::ResponseCode cmdGetWarnHistory(const Command_GetWarnHistory &cmd, ResponseContainer &rc);
110 Response::ResponseCode cmdShutdownServer(const Command_ShutdownServer &cmd, ResponseContainer &rc);
111 Response::ResponseCode cmdUpdateServerMessage(const Command_UpdateServerMessage &cmd, ResponseContainer &rc);
112 Response::ResponseCode cmdRegisterAccount(const Command_Register &cmd, ResponseContainer &rc);
113 Response::ResponseCode cmdActivateAccount(const Command_Activate &cmd, ResponseContainer & /* rc */);
114 Response::ResponseCode cmdReloadConfig(const Command_ReloadConfig & /* cmd */, ResponseContainer & /*rc*/);
115 Response::ResponseCode cmdAdjustMod(const Command_AdjustMod &cmd, ResponseContainer & /*rc*/);
116 Response::ResponseCode cmdForgotPasswordRequest(const Command_ForgotPasswordRequest &cmd, ResponseContainer &rc);
117 Response::ResponseCode continuePasswordRequest(const QString &userName,
118 const QString &clientId,
120 bool challenged = false);
121 Response::ResponseCode cmdForgotPasswordReset(const Command_ForgotPasswordReset &cmd, ResponseContainer &rc);
122 Response::ResponseCode cmdForgotPasswordChallenge(const Command_ForgotPasswordChallenge &cmd,
124 Response::ResponseCode cmdRequestPasswordSalt(const Command_RequestPasswordSalt &cmd, ResponseContainer &rc);
125 Response::ResponseCode processExtendedSessionCommand(int cmdType, const SessionCommand &cmd, ResponseContainer &rc);
126 Response::ResponseCode
127 processExtendedModeratorCommand(int cmdType, const ModeratorCommand &cmd, ResponseContainer &rc);
128 Response::ResponseCode processExtendedAdminCommand(int cmdType, const AdminCommand &cmd, ResponseContainer &rc);
129
130 Response::ResponseCode cmdAccountEdit(const Command_AccountEdit &cmd, ResponseContainer &rc);
131 Response::ResponseCode cmdAccountImage(const Command_AccountImage &cmd, ResponseContainer &rc);
132 bool isCardNameAllowed(const QString &cardName, const QString &cardProviderId);
133 Response::ResponseCode cmdSetCardArtParams(const Command_SetCardArtParams &cmd, ResponseContainer &);
134 Response::ResponseCode cmdAddCardArtRule(const Command_AddCardArtRule &cmd, ResponseContainer &);
135 Response::ResponseCode cmdRemoveCardArtRule(const Command_RemoveCardArtRule &cmd, ResponseContainer &);
136 Response::ResponseCode cmdListCardArtRules(const Command_ListCardArtRules &, ResponseContainer &rc);
137 Response::ResponseCode cmdAccountPassword(const Command_AccountPassword &cmd, ResponseContainer &rc);
138 Response::ResponseCode cmdGrantReplayAccess(const Command_GrantReplayAccess &cmd, ResponseContainer &rc);
139 Response::ResponseCode cmdForceActivateUser(const Command_ForceActivateUser &cmd, ResponseContainer &rc);
140
141 Response::ResponseCode cmdGetAdminNotes(const Command_GetAdminNotes &cmd, ResponseContainer &rc);
142 Response::ResponseCode cmdUpdateAdminNotes(const Command_UpdateAdminNotes &cmd, ResponseContainer &rc);
143
144 bool addAdminFlagToUser(const QString &user, int flag);
145 bool removeAdminFlagFromUser(const QString &user, int flag);
146
147 bool isPasswordLongEnough(const int passwordLength);
148 void removeSaidMessages(const QString &userName, int amount);
149
150public:
152 Servatrice_DatabaseInterface *_databaseInterface,
153 QObject *parent = 0);
157 bool initSession();
158
159 virtual QHostAddress getPeerAddress() const = 0;
160 virtual QString getAddress() const = 0;
161
162 void transmitProtocolItem(const ServerMessage &item);
163};
164
166{
167 Q_OBJECT
168public:
170 Servatrice_DatabaseInterface *_databaseInterface,
171 QObject *parent = 0);
173
174 QHostAddress getPeerAddress() const
175 {
176 return socket->peerAddress();
177 }
178 QString getAddress() const
179 {
180 return socket->peerAddress().toString();
181 }
182 QString getConnectionType() const
183 {
184 return "tcp";
185 }
186
187private:
188 QTcpSocket *socket;
189 QByteArray inputBuffer;
193
194protected:
195 void writeToSocket(QByteArray &data)
196 {
197 socket->write(data);
198 }
200 {
201 socket->flush();
202 }
204 bool initTcpSession();
205protected slots:
206 void readClient();
207 void flushOutputQueue();
208public slots:
209 void initConnection(int socketDescriptor);
210};
211
213{
214 Q_OBJECT
215public:
217 Servatrice_DatabaseInterface *_databaseInterface,
218 QObject *parent = nullptr);
220
221 QHostAddress getPeerAddress() const
222 {
223 return address;
224 }
225 QString getAddress() const
226 {
227 return address.toString();
228 }
229 QString getConnectionType() const
230 {
231 return "websocket";
232 }
233
234private:
235 QWebSocket *socket;
236 QHostAddress address;
237
238protected:
239 void writeToSocket(QByteArray &data)
240 {
241 socket->sendBinaryMessage(data);
242 }
244 {
245 socket->flush();
246 }
248protected slots:
249 void binaryMessageReceived(const QByteArray &message);
250 void flushOutputQueue();
251public slots:
252 void initConnection(void *_socket);
253};
254
255#endif
bool isPasswordLongEnough(const int passwordLength)
Definition serversocketinterface.cpp:2548
Response::ResponseCode cmdReplayDeleteMatch(const Command_ReplayDeleteMatch &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:801
Response::ResponseCode cmdRegisterAccount(const Command_Register &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1248
QMutex outputQueueMutex
Definition serversocketinterface.h:78
Response::ResponseCode processExtendedSessionCommand(int cmdType, const SessionCommand &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:167
Response::ResponseCode cmdRequestPasswordSalt(const Command_RequestPasswordSalt &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1965
Response::ResponseCode cmdDeckDownload(const Command_DeckDownload &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:661
Response::ResponseCode cmdGrantReplayAccess(const Command_GrantReplayAccess &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2097
Response::ResponseCode cmdDeckList(const Command_DeckList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:461
Response::ResponseCode cmdAccountEdit(const Command_AccountEdit &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1474
Response::ResponseCode cmdRemoveCardArtRule(const Command_RemoveCardArtRule &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:1702
virtual QString getAddress() const =0
Response::ResponseCode cmdForceActivateUser(const Command_ForceActivateUser &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2143
Response::ResponseCode cmdDeckDel(const Command_DeckDel &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:566
Response::ResponseCode cmdGetAdminNotes(const Command_GetAdminNotes &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2173
Response::ResponseCode cmdShutdownServer(const Command_ShutdownServer &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1995
Response::ResponseCode cmdAddToList(const Command_AddToList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:284
int getDeckPathId(int basePathId, QStringList path)
Definition serversocketinterface.cpp:380
Response::ResponseCode cmdReplaySubmitCode(const Command_ReplaySubmitCode &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:892
bool tooManyRegistrationAttempts(const QString &ipAddress)
Definition serversocketinterface.cpp:1434
void sendServerMessage(const QString userName, const QString message)
Definition serversocketinterface.cpp:532
Response::ResponseCode cmdGetWarnList(const Command_GetWarnList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1056
Response::ResponseCode cmdAdjustMod(const Command_AdjustMod &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:2064
virtual void writeToSocket(QByteArray &data)=0
Response::ResponseCode cmdDeckUpload(const Command_DeckUpload &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:589
Response::ResponseCode cmdGetLogHistory(const Command_ViewLogHistory &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:958
Response::ResponseCode cmdUpdateServerMessage(const Command_UpdateServerMessage &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1988
Response::ResponseCode cmdReplayDownload(const Command_ReplayDownload &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:739
Response::ResponseCode cmdDeckNewDir(const Command_DeckNewDir &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:481
bool isCardNameAllowed(const QString &cardName, const QString &cardProviderId)
Definition serversocketinterface.cpp:1580
Response::ResponseCode processExtendedAdminCommand(int cmdType, const AdminCommand &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:268
Response::ResponseCode cmdSetCardArtParams(const Command_SetCardArtParams &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:1600
void deckDelDirHelper(int basePathId)
Definition serversocketinterface.cpp:512
Response::ResponseCode cmdForgotPasswordChallenge(const Command_ForgotPasswordChallenge &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1924
bool addAdminFlagToUser(const QString &user, int flag)
Definition serversocketinterface.cpp:2012
bool removeAdminFlagFromUser(const QString &user, int flag)
Definition serversocketinterface.cpp:2036
void transmitProtocolItem(const ServerMessage &item)
Definition serversocketinterface.cpp:153
AbstractServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent=0)
Definition serversocketinterface.cpp:97
void logDebugMessage(const QString &message)
Definition serversocketinterface.cpp:162
Response::ResponseCode cmdForgotPasswordRequest(const Command_ForgotPasswordRequest &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1783
~AbstractServerSocketInterface()
Definition serversocketinterface.h:154
Response::ResponseCode cmdReloadConfig(const Command_ReloadConfig &, ResponseContainer &)
Definition serversocketinterface.cpp:2003
Response::ResponseCode cmdAccountPassword(const Command_AccountPassword &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1747
void catchSocketDisconnected()
Definition serversocketinterface.cpp:148
Response::ResponseCode cmdReplayGetCode(const Command_ReplayGetCode &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:856
Response::ResponseCode cmdAccountImage(const Command_AccountImage &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1558
Servatrice_DatabaseInterface * sqlInterface
Definition serversocketinterface.h:81
Response::ResponseCode cmdReplayList(const Command_ReplayList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:683
bool initSession()
Definition serversocketinterface.cpp:109
bool deckListHelper(int folderId, ServerInfo_DeckStorage_Folder *folder)
Definition serversocketinterface.cpp:413
void incTxBytes(qint64 amount)
QString createHashForReplay(int gameId)
Definition serversocketinterface.cpp:833
Response::ResponseCode processExtendedModeratorCommand(int cmdType, const ModeratorCommand &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:231
void removeSaidMessages(const QString &userName, int amount)
Definition serversocketinterface.cpp:1087
Response::ResponseCode cmdDeckDelDir(const Command_DeckDelDir &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:549
Response::ResponseCode cmdGetBanHistory(const Command_GetBanHistory &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1041
QList< ServerMessage > outputQueue
Definition serversocketinterface.h:77
Response::ResponseCode cmdUpdateAdminNotes(const Command_UpdateAdminNotes &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2196
virtual void flushOutputQueue()=0
Response::ResponseCode cmdActivateAccount(const Command_Activate &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:1441
void catchSocketError(QAbstractSocket::SocketError socketError)
Definition serversocketinterface.cpp:141
Response::ResponseCode cmdForgotPasswordReset(const Command_ForgotPasswordReset &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1869
DeckList * getDeckFromDatabase(int deckId)
Response::ResponseCode cmdGetWarnHistory(const Command_GetWarnHistory &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1072
Response::ResponseCode cmdAddCardArtRule(const Command_AddCardArtRule &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:1668
Response::ResponseCode cmdWarnUser(const Command_WarnUser &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1094
Response::ResponseCode continuePasswordRequest(const QString &userName, const QString &clientId, ResponseContainer &rc, bool challenged=false)
Definition serversocketinterface.cpp:1819
Servatrice * servatrice
Definition serversocketinterface.h:76
Response::ResponseCode cmdListCardArtRules(const Command_ListCardArtRules &, ResponseContainer &rc)
Definition serversocketinterface.cpp:1723
Response::ResponseCode cmdReplayModifyMatch(const Command_ReplayModifyMatch &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:778
Response::ResponseCode cmdBanFromServer(const Command_BanFromServer &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1139
virtual QHostAddress getPeerAddress() const =0
virtual void flushSocket()=0
Response::ResponseCode cmdRemoveFromList(const Command_RemoveFromList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:333
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:63
Definition server_response_containers.h:89
Definition servatrice_database_interface.h:18
Definition servatrice.h:131
Server_ProtocolHandler(Server *_server, Server_DatabaseInterface *_databaseInterface, QObject *parent=0)
Definition server_protocolhandler.cpp:31
TcpServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent=0)
Definition serversocketinterface.cpp:2215
QByteArray inputBuffer
Definition serversocketinterface.h:189
QHostAddress getPeerAddress() const
Definition serversocketinterface.h:174
void readClient()
Definition serversocketinterface.cpp:2296
void flushSocket()
Definition serversocketinterface.h:199
void writeToSocket(QByteArray &data)
Definition serversocketinterface.h:195
bool messageInProgress
Definition serversocketinterface.h:190
bool handshakeStarted
Definition serversocketinterface.h:191
QString getConnectionType() const
Definition serversocketinterface.h:182
void initSessionDeprecated()
Definition serversocketinterface.cpp:2247
QString getAddress() const
Definition serversocketinterface.h:178
QTcpSocket * socket
Definition serversocketinterface.h:188
~TcpServerSocketInterface()
Definition serversocketinterface.cpp:2229
void flushOutputQueue()
Definition serversocketinterface.cpp:2257
int messageLength
Definition serversocketinterface.h:192
void initConnection(int socketDescriptor)
Definition serversocketinterface.cpp:2236
bool initTcpSession()
Definition serversocketinterface.cpp:2366
QString getConnectionType() const
Definition serversocketinterface.h:229
QString getAddress() const
Definition serversocketinterface.h:225
void binaryMessageReceived(const QByteArray &message)
Definition serversocketinterface.cpp:2510
WebsocketServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent=nullptr)
Definition serversocketinterface.cpp:2393
void flushOutputQueue()
Definition serversocketinterface.cpp:2475
~WebsocketServerSocketInterface()
Definition serversocketinterface.cpp:2400
QHostAddress getPeerAddress() const
Definition serversocketinterface.h:221
QHostAddress address
Definition serversocketinterface.h:236
void initConnection(void *_socket)
Definition serversocketinterface.cpp:2407
void flushSocket()
Definition serversocketinterface.h:243
QWebSocket * socket
Definition serversocketinterface.h:235
bool initWebsocketSession()
Definition serversocketinterface.cpp:2447
void writeToSocket(QByteArray &data)
Definition serversocketinterface.h:239
static constexpr int amount
Definition deck_hash_performance_test.cpp:5