X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fprotocol.h;h=bf6c401e339f1bde84a66629708cbcb70322c1bf;hp=89625f44ab144b5b678b519f3ee1fa412ad90fc8;hb=30fa961d1aca319b52071ad9d6e4527ea2638fb7;hpb=9dfc807d8f60135976d4ea0ed31022304fad8f4c diff --git a/src/common/protocol.h b/src/common/protocol.h index 89625f44..bf6c401e 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 * @@ -27,16 +27,159 @@ namespace Protocol { -enum Handler { - SignalProxy +const quint32 magic = 0x42b33f00; + +enum Type { + InternalProtocol = 0x00, + LegacyProtocol = 0x01, + DataStreamProtocol = 0x02 +}; + + +enum Feature { + Encryption = 0x01, + Compression = 0x02 }; +enum class Handler { + SignalProxy, + AuthHandler +}; + + +/*** Handshake, handled by AuthHandler ***/ + +struct HandshakeMessage { + inline Handler handler() const { return Handler::AuthHandler; } +}; + + +struct RegisterClient : public HandshakeMessage +{ + 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; +}; + + +struct ClientDenied : public HandshakeMessage +{ + inline ClientDenied(const QString &errorString) + : errorString(errorString) {} + + QString errorString; +}; + + +struct ClientRegistered : public HandshakeMessage +{ + inline ClientRegistered(quint32 coreFeatures, bool coreConfigured, const QVariantList &backendInfo, bool sslSupported, const QVariantList &authenticatorInfo) + : coreFeatures(coreFeatures) + , coreConfigured(coreConfigured) + , backendInfo(backendInfo) + , authenticatorInfo(authenticatorInfo) + , sslSupported(sslSupported) + {} + + 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; +}; + + +struct SetupData : public HandshakeMessage +{ + 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; +}; + + +struct SetupFailed : public HandshakeMessage +{ + inline SetupFailed(const QString &errorString) + : errorString(errorString) {} + + QString errorString; +}; + + +struct SetupDone : public HandshakeMessage +{ + inline SetupDone() {} +}; + + +struct Login : public HandshakeMessage +{ + inline Login(const QString &user, const QString &password) + : user(user), password(password) {} + + QString user; + QString password; +}; + + +struct LoginFailed : public HandshakeMessage +{ + inline LoginFailed(const QString &errorString) + : errorString(errorString) {} + + QString errorString; +}; + + +struct LoginSuccess : public HandshakeMessage +{ + inline LoginSuccess() {} +}; + + +// 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 SignalProxy; } + inline Handler handler() const { return Handler::SignalProxy; } };