X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fprotocol.h;h=e626686277245eade9606b7aef6c35ef6845837a;hp=89ef40731840fb2535fdabf09a9dd8b026eff7ef;hb=f353beded3963b67da6ac0878700dee8e61abfc4;hpb=02bebb4c8f1c45397c55f1660176bfa0c303e703 diff --git a/src/common/protocol.h b/src/common/protocol.h index 89ef4073..e6266862 100644 --- a/src/common/protocol.h +++ b/src/common/protocol.h @@ -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 * @@ -18,8 +18,7 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef PROTOCOL_H_ -#define PROTOCOL_H_ +#pragma once #include #include @@ -27,33 +26,48 @@ namespace Protocol { +const quint32 magic = 0x42b33f00; + enum Type { - LegacyProtocol = 1 + InternalProtocol = 0x00, + LegacyProtocol = 0x01, + DataStreamProtocol = 0x02 +}; + + +enum Feature { + Encryption = 0x01, + Compression = 0x02 }; -enum Handler { + +enum class Handler { SignalProxy, AuthHandler }; -/*** Handshake, handled by AuthHandler ***/ +/*** Handshake, handled by AuthHandler ***/ struct HandshakeMessage { - inline Handler handler() const { return AuthHandler; } + inline Handler handler() const { return Handler::AuthHandler; } }; struct RegisterClient : public HandshakeMessage { - inline RegisterClient(const QString &clientVersion, bool sslSupported = false) + inline RegisterClient(const QString &clientVersion, const QString &buildDate, bool sslSupported = false, quint32 features = 0) : clientVersion(clientVersion) - , sslSupported(sslSupported) {} + , buildDate(buildDate) + , sslSupported(sslSupported) + , clientFeatures(features) {} QString clientVersion; + QString buildDate; // this is only used by the LegacyProtocol in compat mode bool sslSupported; + quint32 clientFeatures; }; @@ -68,33 +82,45 @@ 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, bool sslSupported, const QVariantList &authenticatorInfo) : coreFeatures(coreFeatures) , coreConfigured(coreConfigured) , backendInfo(backendInfo) + , authenticatorInfo(authenticatorInfo) , sslSupported(sslSupported) - , coreStartTime(coreStartTime) {} quint32 coreFeatures; bool coreConfigured; + + // The authenticatorInfo should be optional! QVariantList backendInfo; // TODO: abstract this better + QVariantList authenticatorInfo; // 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 QVariantMap &setupData, const QString &authenticator = QString(), + const QVariantMap &authSetupData = QVariantMap()) + : adminUser(adminUser) + , adminPassword(adminPassword) + , backend(backend) + , setupData(setupData) + , authenticator(authenticator) + , authSetupData(authSetupData) + {} QString adminUser; QString adminPassword; QString backend; QVariantMap setupData; + QString authenticator; + QVariantMap authSetupData; }; @@ -141,6 +167,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,12 +176,11 @@ struct SessionState : public HandshakeMessage QVariantList networkIds; }; - /*** handled by SignalProxy ***/ struct SignalProxyMessage { - inline Handler handler() const { return SignalProxy; } + inline Handler handler() const { return Handler::SignalProxy; } }; @@ -220,5 +246,3 @@ struct HeartBeatReply }; - -#endif