X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcommon%2Fprotocol.h;h=38e53c6d6a6a6ccc4cd2cfca3cd9e1959642be67;hb=9f91e0dd3c4eb5c2e2dedfc8d36a068d433d51b1;hp=121f4e45e778b63315e56375b2e1ad97d2b62e00;hpb=fd25e92f19d6afd4eb02844bcbf20ba132868303;p=quassel.git diff --git a/src/common/protocol.h b/src/common/protocol.h index 121f4e45..38e53c6d 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,124 +18,234 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef PROTOCOL_H_ -#define PROTOCOL_H_ +#pragma once #include #include #include +#include "quassel.h" + namespace Protocol { -enum Handler { - SignalProxy +const quint32 magic = 0x42b33f00; + +enum Type { + InternalProtocol = 0x00, + LegacyProtocol = 0x01, + DataStreamProtocol = 0x02 }; -/*** handled by SignalProxy ***/ +enum Feature { + Encryption = 0x01, + Compression = 0x02 +}; + + +enum class Handler { + SignalProxy, + AuthHandler +}; + -class SyncMessage +/*** Handshake, handled by AuthHandler ***/ + +struct HandshakeMessage { + inline Handler handler() const { return Handler::AuthHandler; } +}; + + +struct RegisterClient : public HandshakeMessage { -public: - inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList ¶ms) - : _className(className), _objectName(objectName), _slotName(slotName), _params(params) {} + inline RegisterClient(Quassel::Features clientFeatures, const QString &clientVersion, const QString &buildDate, bool sslSupported = false) + : features(std::move(clientFeatures)) + , clientVersion(clientVersion) + , buildDate(buildDate) + , sslSupported(sslSupported) + {} + + Quassel::Features features; + QString clientVersion; + QString buildDate; + + // this is only used by the LegacyProtocol in compat mode + bool sslSupported; +}; + - inline Handler handler() const { return SignalProxy; } +struct ClientDenied : public HandshakeMessage +{ + inline ClientDenied(const QString &errorString) + : errorString(errorString) {} - inline QByteArray className() const { return _className; } - inline QString objectName() const { return _objectName; } - inline QByteArray slotName() const { return _slotName; } + QString errorString; +}; - inline QVariantList params() const { return _params; } -private: - QByteArray _className; - QString _objectName; - QByteArray _slotName; - QVariantList _params; +struct ClientRegistered : public HandshakeMessage +{ + inline ClientRegistered(Quassel::Features coreFeatures, bool coreConfigured, const QVariantList &backendInfo, const QVariantList &authenticatorInfo, bool sslSupported) + : features(std::move(coreFeatures)) + , coreConfigured(coreConfigured) + , backendInfo(backendInfo) + , authenticatorInfo(authenticatorInfo) + , sslSupported(sslSupported) + {} + + Quassel::Features features; + bool coreConfigured; + QVariantList backendInfo; // TODO: abstract this better + + // The authenticatorInfo should be optional! + QVariantList authenticatorInfo; + + // this is only used by the LegacyProtocol in compat mode + bool sslSupported; }; -class RpcCall +struct SetupData : public HandshakeMessage { -public: - inline RpcCall(const QByteArray &slotName, const QVariantList ¶ms) - : _slotName(slotName), _params(params) {} + 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; +}; - inline Handler handler() const { return SignalProxy; } - inline QByteArray slotName() const { return _slotName; } - inline QVariantList params() const { return _params; } +struct SetupFailed : public HandshakeMessage +{ + inline SetupFailed(const QString &errorString) + : errorString(errorString) {} -private: - QByteArray _slotName; - QVariantList _params; + QString errorString; }; -class InitRequest +struct SetupDone : public HandshakeMessage { -public: - inline InitRequest(const QByteArray &className, const QString &objectName) - : _className(className), _objectName(objectName) {} + inline SetupDone() {} +}; - inline Handler handler() const { return SignalProxy; } - inline QByteArray className() const { return _className; } - inline QString objectName() const { return _objectName; } +struct Login : public HandshakeMessage +{ + inline Login(const QString &user, const QString &password) + : user(user), password(password) {} -private: - QByteArray _className; - QString _objectName; + QString user; + QString password; }; -class InitData +struct LoginFailed : public HandshakeMessage { -public: - inline InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData) - : _className(className), _objectName(objectName), _initData(initData) {} + inline LoginFailed(const QString &errorString) + : errorString(errorString) {} - inline Handler handler() const { return SignalProxy; } + QString errorString; +}; - inline QByteArray className() const { return _className; } - inline QString objectName() const { return _objectName; } - inline QVariantMap initData() const { return _initData; } +struct LoginSuccess : public HandshakeMessage +{ + inline LoginSuccess() {} +}; + -private: - QByteArray _className; - QString _objectName; - QVariantMap _initData; +// 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) {} + + QVariantList identities; + QVariantList bufferInfos; + QVariantList networkIds; }; +/*** handled by SignalProxy ***/ + +struct SignalProxyMessage +{ + inline Handler handler() const { return Handler::SignalProxy; } +}; -/*** handled by RemoteConnection ***/ -class HeartBeat +struct SyncMessage : public SignalProxyMessage { -public: - inline HeartBeat(const QDateTime ×tamp) : _timestamp(timestamp) {} + inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList ¶ms) + : className(className), objectName(objectName), slotName(slotName), params(params) {} - inline QDateTime timestamp() const { return _timestamp; } + QByteArray className; + QString objectName; + QByteArray slotName; + QVariantList params; +}; -private: - QDateTime _timestamp; + +struct RpcCall : public SignalProxyMessage +{ + inline RpcCall(const QByteArray &slotName, const QVariantList ¶ms) + : slotName(slotName), params(params) {} + + QByteArray slotName; + QVariantList params; }; -class HeartBeatReply +struct InitRequest : public SignalProxyMessage { -public: - inline HeartBeatReply(const QDateTime ×tamp) : _timestamp(timestamp) {} + inline InitRequest(const QByteArray &className, const QString &objectName) + : className(className), objectName(objectName) {} + + QByteArray className; + QString objectName; +}; - inline QDateTime timestamp() const { return _timestamp; } -private: - QDateTime _timestamp; +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; +}; + + +/*** handled by RemoteConnection ***/ + +struct HeartBeat +{ + inline HeartBeat(const QDateTime ×tamp) : timestamp(timestamp) {} + + QDateTime timestamp; }; +struct HeartBeatReply +{ + inline HeartBeatReply(const QDateTime ×tamp) : timestamp(timestamp) {} + + QDateTime timestamp; }; -#endif + +};