/***************************************************************************
- * Copyright (C) 2005-2018 by the Quassel Project *
+ * Copyright (C) 2005-2020 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#pragma once
+#include <utility>
+
#include <QByteArray>
#include <QDateTime>
#include <QVariantList>
const quint32 magic = 0x42b33f00;
-enum Type {
+const quint32 proxyMagic = 0x50524f58;
+
+enum Type
+{
InternalProtocol = 0x00,
LegacyProtocol = 0x01,
DataStreamProtocol = 0x02
};
-
-enum Feature {
+enum Feature
+{
Encryption = 0x01,
Compression = 0x02
};
-
-enum class Handler {
+enum class Handler
+{
SignalProxy,
AuthHandler
};
-
/*** Handshake, handled by AuthHandler ***/
-struct HandshakeMessage {
+struct HandshakeMessage
+{
inline Handler handler() const { return Handler::AuthHandler; }
};
-
struct RegisterClient : public HandshakeMessage
{
- inline RegisterClient(Quassel::Features clientFeatures, const QString &clientVersion, const QString &buildDate, bool sslSupported = false)
+ inline RegisterClient(Quassel::Features clientFeatures, QString clientVersion, QString buildDate, bool sslSupported = false)
: features(std::move(clientFeatures))
- , clientVersion(clientVersion)
- , buildDate(buildDate)
+ , clientVersion(std::move(clientVersion))
+ , buildDate(std::move(buildDate))
, sslSupported(sslSupported)
{}
bool sslSupported;
};
-
struct ClientDenied : public HandshakeMessage
{
- inline ClientDenied(const QString &errorString)
- : errorString(errorString) {}
+ inline ClientDenied(QString errorString)
+ : errorString(std::move(errorString))
+ {}
QString errorString;
};
-
struct ClientRegistered : public HandshakeMessage
{
- inline ClientRegistered(Quassel::Features coreFeatures, bool coreConfigured, const QVariantList &backendInfo, const QVariantList &authenticatorInfo, bool sslSupported)
+ inline ClientRegistered(
+ Quassel::Features coreFeatures, bool coreConfigured, QVariantList backendInfo, QVariantList authenticatorInfo, bool sslSupported)
: features(std::move(coreFeatures))
, coreConfigured(coreConfigured)
- , backendInfo(backendInfo)
- , authenticatorInfo(authenticatorInfo)
+ , backendInfo(std::move(backendInfo))
+ , authenticatorInfo(std::move(authenticatorInfo))
, sslSupported(sslSupported)
{}
Quassel::Features features;
bool coreConfigured;
- QVariantList backendInfo; // TODO: abstract this better
+ QVariantList backendInfo; // TODO: abstract this better
// The authenticatorInfo should be optional!
QVariantList authenticatorInfo;
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)
+ inline SetupData(QString adminUser,
+ QString adminPassword,
+ QString backend,
+ QVariantMap setupData,
+ QString authenticator = QString(),
+ QVariantMap authSetupData = QVariantMap())
+ : adminUser(std::move(adminUser))
+ , adminPassword(std::move(adminPassword))
+ , backend(std::move(backend))
+ , setupData(std::move(setupData))
+ , authenticator(std::move(authenticator))
+ , authSetupData(std::move(authSetupData))
{}
QString adminUser;
QVariantMap authSetupData;
};
-
struct SetupFailed : public HandshakeMessage
{
- inline SetupFailed(const QString &errorString)
- : errorString(errorString) {}
+ inline SetupFailed(QString errorString)
+ : errorString(std::move(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) {}
+ inline Login(QString user, QString password)
+ : user(std::move(user))
+ , password(std::move(password))
+ {}
QString user;
QString password;
};
-
struct LoginFailed : public HandshakeMessage
{
- inline LoginFailed(const QString &errorString)
- : errorString(errorString) {}
+ inline LoginFailed(QString errorString)
+ : errorString(std::move(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) {}
+ inline SessionState() = default; // needed for QMetaType (for the mono client)
+ inline SessionState(QVariantList identities, QVariantList bufferInfos, QVariantList networkIds)
+ : identities(std::move(identities))
+ , bufferInfos(std::move(bufferInfos))
+ , networkIds(std::move(networkIds))
+ {}
QVariantList identities;
QVariantList bufferInfos;
inline Handler handler() const { return Handler::SignalProxy; }
};
-
struct SyncMessage : public SignalProxyMessage
{
- inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList ¶ms)
- : className(className), objectName(objectName), slotName(slotName), params(params) {}
+ SyncMessage() = default;
+ SyncMessage(QByteArray className, QString objectName, QByteArray slotName, QVariantList params)
+ : className(std::move(className))
+ , objectName(std::move(objectName))
+ , slotName(std::move(slotName))
+ , params(std::move(params))
+ {}
QByteArray className;
QString objectName;
QVariantList params;
};
-
struct RpcCall : public SignalProxyMessage
{
- inline RpcCall(const QByteArray &slotName, const QVariantList ¶ms)
- : slotName(slotName), params(params) {}
+ RpcCall() = default;
+ RpcCall(QByteArray signalName, QVariantList params)
+ : signalName(std::move(signalName))
+ , params(std::move(params))
+ {}
- QByteArray slotName;
+ QByteArray signalName;
QVariantList params;
};
-
struct InitRequest : public SignalProxyMessage
{
- inline InitRequest(const QByteArray &className, const QString &objectName)
- : className(className), objectName(objectName) {}
+ InitRequest() = default;
+ InitRequest(QByteArray className, QString objectName)
+ : className(std::move(className))
+ , objectName(std::move(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) {}
+ InitData() = default;
+ InitData(QByteArray className, QString objectName, QVariantMap initData)
+ : className(std::move(className))
+ , objectName(std::move(objectName))
+ , initData(std::move(initData))
+ {}
QByteArray className;
QString objectName;
QVariantMap initData;
};
-
/*** handled by RemoteConnection ***/
struct HeartBeat
{
- inline HeartBeat(const QDateTime ×tamp) : timestamp(timestamp) {}
+ inline HeartBeat(QDateTime timestamp)
+ : timestamp(std::move(timestamp))
+ {}
QDateTime timestamp;
};
-
struct HeartBeatReply
{
- inline HeartBeatReply(const QDateTime ×tamp) : timestamp(timestamp) {}
+ inline HeartBeatReply(QDateTime timestamp)
+ : timestamp(std::move(timestamp))
+ {}
QDateTime timestamp;
};
+} // namespace Protocol
-};
+// Required for InternalPeer
+Q_DECLARE_METATYPE(Protocol::SyncMessage)
+Q_DECLARE_METATYPE(Protocol::RpcCall)
+Q_DECLARE_METATYPE(Protocol::InitRequest)
+Q_DECLARE_METATYPE(Protocol::InitData)