/***************************************************************************
- * Copyright (C) 2005-2016 by the Quassel Project *
+ * Copyright (C) 2005-2018 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
***************************************************************************/
-#ifndef PROTOCOL_H_
-#define PROTOCOL_H_
+#pragma once
#include <QByteArray>
#include <QDateTime>
#include <QVariantList>
+#include <utility>
+
+#include "quassel.h"
namespace Protocol {
};
-enum Handler {
+enum class Handler {
SignalProxy,
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, const QString &buildDate, bool sslSupported = false)
- : clientVersion(clientVersion)
- , buildDate(buildDate)
- , sslSupported(sslSupported) {}
+ inline RegisterClient(Quassel::Features clientFeatures, QString clientVersion, QString buildDate, bool sslSupported = false)
+ : features(std::move(clientFeatures))
+ , clientVersion(std::move(clientVersion))
+ , buildDate(std::move(buildDate))
+ , sslSupported(sslSupported)
+ {}
+ Quassel::Features features;
QString clientVersion;
QString buildDate;
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(quint32 coreFeatures, bool coreConfigured, const QVariantList &backendInfo, bool sslSupported, const QVariantList &authenticatorInfo)
- : coreFeatures(coreFeatures)
- , coreConfigured(coreConfigured)
- , backendInfo(backendInfo)
- , authenticatorInfo(authenticatorInfo)
- , sslSupported(sslSupported)
+ inline ClientRegistered(Quassel::Features coreFeatures, bool coreConfigured, QVariantList backendInfo, QVariantList authenticatorInfo, bool sslSupported)
+ : features(std::move(coreFeatures))
+ , coreConfigured(coreConfigured)
+ , backendInfo(std::move(backendInfo))
+ , authenticatorInfo(std::move(authenticatorInfo))
+ , sslSupported(sslSupported)
{}
- quint32 coreFeatures;
+ Quassel::Features features;
bool coreConfigured;
+ QVariantList backendInfo; // TODO: abstract this better
// The authenticatorInfo should be optional!
- QVariantList backendInfo; // TODO: abstract this better
QVariantList authenticatorInfo;
// this is only used by the LegacyProtocol in compat mode
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;
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;
struct SignalProxyMessage
{
- inline Handler handler() const { return SignalProxy; }
+ 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;
struct RpcCall : public SignalProxyMessage
{
- inline RpcCall(const QByteArray &slotName, const QVariantList ¶ms)
- : slotName(slotName), params(params) {}
+ RpcCall() = default;
+ RpcCall(QByteArray slotName, QVariantList params)
+ : slotName(std::move(slotName)), params(std::move(params)) {}
QByteArray slotName;
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;
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;
};
-};
+}
-#endif
+// Required for InternalPeer
+Q_DECLARE_METATYPE(Protocol::SyncMessage)
+Q_DECLARE_METATYPE(Protocol::RpcCall)
+Q_DECLARE_METATYPE(Protocol::InitRequest)
+Q_DECLARE_METATYPE(Protocol::InitData)