1 /***************************************************************************
2 * Copyright (C) 2005-2016 by the Quassel Project *
3 * devel@quassel-irc.org *
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) version 3. *
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. *
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 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19 ***************************************************************************/
26 #include <QVariantList>
30 const quint32 magic = 0x42b33f00;
33 InternalProtocol = 0x00,
34 LegacyProtocol = 0x01,
35 DataStreamProtocol = 0x02
51 /*** Handshake, handled by AuthHandler ***/
53 struct HandshakeMessage {
54 inline Handler handler() const { return Handler::AuthHandler; }
58 struct RegisterClient : public HandshakeMessage
60 inline RegisterClient(const QString &clientVersion, const QString &buildDate, bool sslSupported = false, int32_t features = 0)
61 : clientVersion(clientVersion)
62 , buildDate(buildDate)
63 , sslSupported(sslSupported)
64 , clientFeatures(features) {}
66 QString clientVersion;
69 // this is only used by the LegacyProtocol in compat mode
71 int32_t clientFeatures;
75 struct ClientDenied : public HandshakeMessage
77 inline ClientDenied(const QString &errorString)
78 : errorString(errorString) {}
84 struct ClientRegistered : public HandshakeMessage
86 inline ClientRegistered(quint32 coreFeatures, bool coreConfigured, const QVariantList &backendInfo, bool sslSupported, const QVariantList &authenticatorInfo)
87 : coreFeatures(coreFeatures)
88 , coreConfigured(coreConfigured)
89 , backendInfo(backendInfo)
90 , authenticatorInfo(authenticatorInfo)
91 , sslSupported(sslSupported)
97 // The authenticatorInfo should be optional!
98 QVariantList backendInfo; // TODO: abstract this better
99 QVariantList authenticatorInfo;
101 // this is only used by the LegacyProtocol in compat mode
106 struct SetupData : public HandshakeMessage
108 inline SetupData(const QString &adminUser, const QString &adminPassword, const QString &backend,
109 const QVariantMap &setupData, const QString &authenticator = QString(),
110 const QVariantMap &authSetupData = QVariantMap())
111 : adminUser(adminUser)
112 , adminPassword(adminPassword)
114 , setupData(setupData)
115 , authenticator(authenticator)
116 , authSetupData(authSetupData)
120 QString adminPassword;
122 QVariantMap setupData;
123 QString authenticator;
124 QVariantMap authSetupData;
128 struct SetupFailed : public HandshakeMessage
130 inline SetupFailed(const QString &errorString)
131 : errorString(errorString) {}
137 struct SetupDone : public HandshakeMessage
139 inline SetupDone() {}
143 struct Login : public HandshakeMessage
145 inline Login(const QString &user, const QString &password)
146 : user(user), password(password) {}
153 struct LoginFailed : public HandshakeMessage
155 inline LoginFailed(const QString &errorString)
156 : errorString(errorString) {}
162 struct LoginSuccess : public HandshakeMessage
164 inline LoginSuccess() {}
168 // TODO: more generic format
169 struct SessionState : public HandshakeMessage
171 inline SessionState() {} // needed for QMetaType (for the mono client)
172 inline SessionState(const QVariantList &identities, const QVariantList &bufferInfos, const QVariantList &networkIds)
173 : identities(identities), bufferInfos(bufferInfos), networkIds(networkIds) {}
175 QVariantList identities;
176 QVariantList bufferInfos;
177 QVariantList networkIds;
180 /*** handled by SignalProxy ***/
182 struct SignalProxyMessage
184 inline Handler handler() const { return Handler::SignalProxy; }
188 struct SyncMessage : public SignalProxyMessage
190 inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList ¶ms)
191 : className(className), objectName(objectName), slotName(slotName), params(params) {}
193 QByteArray className;
200 struct RpcCall : public SignalProxyMessage
202 inline RpcCall(const QByteArray &slotName, const QVariantList ¶ms)
203 : slotName(slotName), params(params) {}
210 struct InitRequest : public SignalProxyMessage
212 inline InitRequest(const QByteArray &className, const QString &objectName)
213 : className(className), objectName(objectName) {}
215 QByteArray className;
220 struct InitData : public SignalProxyMessage
222 inline InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData)
223 : className(className), objectName(objectName), initData(initData) {}
225 QByteArray className;
227 QVariantMap initData;
231 /*** handled by RemoteConnection ***/
235 inline HeartBeat(const QDateTime ×tamp) : timestamp(timestamp) {}
241 struct HeartBeatReply
243 inline HeartBeatReply(const QDateTime ×tamp) : timestamp(timestamp) {}