Add handshake message types to protocol.h
[quassel.git] / src / common / protocol.h
index af98b8b..89ef407 100644 (file)
 
 namespace Protocol {
 
-/*** handled by SignalProxy ***/
+enum Type {
+    LegacyProtocol = 1
+};
+
+enum Handler {
+    SignalProxy,
+    AuthHandler
+};
+
+/*** Handshake, handled by AuthHandler ***/
+
+
+struct HandshakeMessage {
+    inline Handler handler() const { return AuthHandler; }
+};
+
 
-class SyncMessage
+struct RegisterClient : public HandshakeMessage
 {
-public:
-    inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList &params)
-    : _className(className), _objectName(objectName), _slotName(slotName), _params(params) {}
+    inline RegisterClient(const QString &clientVersion, bool sslSupported = false)
+    : clientVersion(clientVersion)
+    , sslSupported(sslSupported) {}
+
+    QString clientVersion;
+
+    // this is only used by the LegacyProtocol in compat mode
+    bool sslSupported;
+};
 
-    inline QByteArray className() const { return _className; }
-    inline QString objectName() const { return _objectName; }
-    inline QByteArray slotName() const { return _slotName; }
 
-    inline QVariantList params() const { return _params; }
+struct ClientDenied : public HandshakeMessage
+{
+    inline ClientDenied(const QString &errorString)
+    : errorString(errorString) {}
 
-private:
-    QByteArray _className;
-    QString _objectName;
-    QByteArray _slotName;
-    QVariantList _params;
+    QString errorString;
 };
 
 
-class RpcCall
+struct ClientRegistered : public HandshakeMessage
 {
-public:
-    inline RpcCall(const QByteArray &slotName, const QVariantList &params)
-    : _slotName(slotName), _params(params) {}
+    inline ClientRegistered(quint32 coreFeatures, bool coreConfigured, const QVariantList &backendInfo, bool sslSupported, const QDateTime &coreStartTime)
+    : coreFeatures(coreFeatures)
+    , coreConfigured(coreConfigured)
+    , backendInfo(backendInfo)
+    , sslSupported(sslSupported)
+    , coreStartTime(coreStartTime)
+    {}
+
+    quint32 coreFeatures;
+    bool coreConfigured;
+    QVariantList backendInfo; // TODO: abstract this better
+
+    // this is only used by the LegacyProtocol in compat mode
+    bool sslSupported;
+    QDateTime coreStartTime;
+};
 
-    inline QByteArray slotName() const { return _slotName; }
-    inline QVariantList params() const { return _params; }
 
-private:
-    QByteArray _slotName;
-    QVariantList _params;
+struct SetupData : public HandshakeMessage
+{
+    inline SetupData(const QString &adminUser, const QString &adminPassword, const QString &backend, const QVariantMap &setupData)
+    : adminUser(adminUser), adminPassword(adminPassword), backend(backend), setupData(setupData) {}
+
+    QString adminUser;
+    QString adminPassword;
+    QString backend;
+    QVariantMap setupData;
 };
 
 
-class InitRequest
+struct SetupFailed : public HandshakeMessage
 {
-public:
-    inline InitRequest(const QByteArray &className, const QString &objectName)
-    : _className(className), _objectName(objectName) {}
+    inline SetupFailed(const QString &errorString)
+    : errorString(errorString) {}
+
+    QString errorString;
+};
 
-    inline QByteArray className() const { return _className; }
-    inline QString objectName() const { return _objectName; }
 
-private:
-    QByteArray _className;
-    QString _objectName;
+struct SetupDone : public HandshakeMessage
+{
+    inline SetupDone() {}
 };
 
 
-class InitData
+struct Login : public HandshakeMessage
 {
-public:
-    inline InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData)
-    : _className(className), _objectName(objectName), _initData(initData) {}
+    inline Login(const QString &user, const QString &password)
+    : user(user), password(password) {}
+
+    QString user;
+    QString password;
+};
 
-    inline QByteArray className() const { return _className; }
-    inline QString objectName() const { return _objectName; }
 
-    inline QVariantMap initData() const { return _initData; }
+struct LoginFailed : public HandshakeMessage
+{
+    inline LoginFailed(const QString &errorString)
+    : errorString(errorString) {}
 
-private:
-    QByteArray _className;
-    QString _objectName;
-    QVariantMap _initData;
+    QString errorString;
 };
 
 
-/*** handled by RemoteConnection ***/
+struct LoginSuccess : public HandshakeMessage
+{
+    inline LoginSuccess() {}
+};
 
-class HeartBeat
+
+// TODO: more generic format
+struct SessionState : public HandshakeMessage
 {
-public:
-    inline HeartBeat(const QDateTime &timestamp) : _timestamp(timestamp) {}
+    inline SessionState(const QVariantList &identities, const QVariantList &bufferInfos, const QVariantList &networkIds)
+    : identities(identities), bufferInfos(bufferInfos), networkIds(networkIds) {}
+
+    QVariantList identities;
+    QVariantList bufferInfos;
+    QVariantList networkIds;
+};
 
-    inline QDateTime timestamp() const { return _timestamp; }
 
-private:
-    QDateTime _timestamp;
+/*** handled by SignalProxy ***/
+
+struct SignalProxyMessage
+{
+    inline Handler handler() const { return SignalProxy; }
+};
+
+
+struct SyncMessage : public SignalProxyMessage
+{
+    inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList &params)
+    : className(className), objectName(objectName), slotName(slotName), params(params) {}
+
+    QByteArray className;
+    QString objectName;
+    QByteArray slotName;
+    QVariantList params;
+};
+
+
+struct RpcCall : public SignalProxyMessage
+{
+    inline RpcCall(const QByteArray &slotName, const QVariantList &params)
+    : slotName(slotName), params(params) {}
+
+    QByteArray slotName;
+    QVariantList params;
+};
+
+
+struct InitRequest : public SignalProxyMessage
+{
+    inline InitRequest(const QByteArray &className, const QString &objectName)
+    : className(className), objectName(objectName) {}
+
+    QByteArray className;
+    QString objectName;
+};
+
+
+struct InitData : public SignalProxyMessage
+{
+    inline InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData)
+    : className(className), objectName(objectName), initData(initData) {}
+
+    QByteArray className;
+    QString objectName;
+    QVariantMap initData;
 };
 
 
-class HeartBeatReply
+/*** handled by RemoteConnection ***/
+
+struct HeartBeat
 {
-public:
-    inline HeartBeatReply(const QDateTime &timestamp) : _timestamp(timestamp) {}
+    inline HeartBeat(const QDateTime &timestamp) : timestamp(timestamp) {}
 
-    inline QDateTime timestamp() const { return _timestamp; }
+    QDateTime timestamp;
+};
+
+
+struct HeartBeatReply
+{
+    inline HeartBeatReply(const QDateTime &timestamp) : timestamp(timestamp) {}
 
-private:
-    QDateTime _timestamp;
+    QDateTime timestamp;
 };