Implement authenticator class used for logging in users
[quassel.git] / src / common / protocol.h
index 89ef407..b686a51 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2016 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
 
 namespace Protocol {
 
+const quint32 magic = 0x42b33f00;
+
 enum Type {
-    LegacyProtocol = 1
+    InternalProtocol = 0x00,
+    LegacyProtocol = 0x01,
+    DataStreamProtocol = 0x02
 };
 
+
+enum Feature {
+    Encryption = 0x01,
+    Compression = 0x02
+};
+
+
 enum Handler {
     SignalProxy,
     AuthHandler
 };
 
-/*** Handshake, handled by AuthHandler ***/
 
+/*** Handshake, handled by AuthHandler ***/
 
 struct HandshakeMessage {
     inline Handler handler() const { return AuthHandler; }
@@ -46,11 +57,13 @@ struct HandshakeMessage {
 
 struct RegisterClient : public HandshakeMessage
 {
-    inline RegisterClient(const QString &clientVersion, bool sslSupported = false)
+    inline RegisterClient(const QString &clientVersion, const QString &buildDate, bool sslSupported = false)
     : clientVersion(clientVersion)
+    , buildDate(buildDate)
     , sslSupported(sslSupported) {}
 
     QString clientVersion;
+    QString buildDate;
 
     // this is only used by the LegacyProtocol in compat mode
     bool sslSupported;
@@ -68,33 +81,37 @@ struct ClientDenied : public HandshakeMessage
 
 struct ClientRegistered : public HandshakeMessage
 {
-    inline ClientRegistered(quint32 coreFeatures, bool coreConfigured, const QVariantList &backendInfo, bool sslSupported, const QDateTime &coreStartTime)
+    inline ClientRegistered(quint32 coreFeatures, bool coreConfigured, const QVariantList &backendInfo, const QVariantList &authBackendInfo, bool sslSupported)
     : coreFeatures(coreFeatures)
     , coreConfigured(coreConfigured)
     , backendInfo(backendInfo)
+    , authBackendInfo(authBackendInfo)
     , sslSupported(sslSupported)
-    , coreStartTime(coreStartTime)
     {}
 
     quint32 coreFeatures;
     bool coreConfigured;
+    
+    // The authBackendInfo should be optional!
     QVariantList backendInfo; // TODO: abstract this better
-
+    QVariantList authBackendInfo;
+    
     // this is only used by the LegacyProtocol in compat mode
     bool sslSupported;
-    QDateTime coreStartTime;
 };
 
 
 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) {}
+    inline SetupData(const QString &adminUser, const QString &adminPassword, const QString &backend, const QString &authenticator, const QVariantMap &setupData, const QVariantMap &authSetupData)
+    : adminUser(adminUser), adminPassword(adminPassword), backend(backend), authenticator(authenticator), setupData(setupData), authSetupData(authSetupData) {}
 
     QString adminUser;
     QString adminPassword;
     QString backend;
+       QString authenticator;
     QVariantMap setupData;
+       QVariantMap authSetupData;
 };
 
 
@@ -141,6 +158,7 @@ struct LoginSuccess : public HandshakeMessage
 // TODO: more generic format
 struct SessionState : public HandshakeMessage
 {
+    inline SessionState() {} // needed for QMetaType (for the mono client)
     inline SessionState(const QVariantList &identities, const QVariantList &bufferInfos, const QVariantList &networkIds)
     : identities(identities), bufferInfos(bufferInfos), networkIds(networkIds) {}
 
@@ -149,7 +167,6 @@ struct SessionState : public HandshakeMessage
     QVariantList networkIds;
 };
 
-
 /*** handled by SignalProxy ***/
 
 struct SignalProxyMessage