common: Make InternalPeer (more) thread-safe
[quassel.git] / src / common / protocol.h
index 4576080..2453a52 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   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 "quassel.h"
+
 namespace Protocol {
 
 const quint32 magic = 0x42b33f00;
@@ -57,18 +58,19 @@ struct HandshakeMessage {
 
 struct RegisterClient : public HandshakeMessage
 {
-    inline RegisterClient(const QString &clientVersion, const QString &buildDate, bool sslSupported = false, int32_t features = 0)
-    : clientVersion(clientVersion)
-    , buildDate(buildDate)
-    , sslSupported(sslSupported)
-    , clientFeatures(features) {}
+    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;
-    int32_t clientFeatures;
 };
 
 
@@ -83,19 +85,19 @@ struct ClientDenied : public HandshakeMessage
 
 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, const QVariantList &backendInfo, const QVariantList &authenticatorInfo, bool sslSupported)
+        : features(std::move(coreFeatures))
+        , coreConfigured(coreConfigured)
+        , backendInfo(backendInfo)
+        , authenticatorInfo(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
@@ -187,8 +189,9 @@ struct SignalProxyMessage
 
 struct SyncMessage : public SignalProxyMessage
 {
-    inline SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList &params)
-    : className(className), objectName(objectName), slotName(slotName), params(params) {}
+    SyncMessage() = default;
+    SyncMessage(const QByteArray &className, const QString &objectName, const QByteArray &slotName, const QVariantList &params)
+        : className(className), objectName(objectName), slotName(slotName), params(params) {}
 
     QByteArray className;
     QString objectName;
@@ -199,8 +202,9 @@ struct SyncMessage : public SignalProxyMessage
 
 struct RpcCall : public SignalProxyMessage
 {
-    inline RpcCall(const QByteArray &slotName, const QVariantList &params)
-    : slotName(slotName), params(params) {}
+    RpcCall() = default;
+    RpcCall(const QByteArray &slotName, const QVariantList &params)
+        : slotName(slotName), params(params) {}
 
     QByteArray slotName;
     QVariantList params;
@@ -209,8 +213,9 @@ struct RpcCall : public SignalProxyMessage
 
 struct InitRequest : public SignalProxyMessage
 {
-    inline InitRequest(const QByteArray &className, const QString &objectName)
-    : className(className), objectName(objectName) {}
+    InitRequest() = default;
+    InitRequest(const QByteArray &className, const QString &objectName)
+        : className(className), objectName(objectName) {}
 
     QByteArray className;
     QString objectName;
@@ -219,8 +224,9 @@ struct InitRequest : public SignalProxyMessage
 
 struct InitData : public SignalProxyMessage
 {
-    inline InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData)
-    : className(className), objectName(objectName), initData(initData) {}
+    InitData() = default;
+    InitData(const QByteArray &className, const QString &objectName, const QVariantMap &initData)
+        : className(className), objectName(objectName), initData(initData) {}
 
     QByteArray className;
     QString objectName;
@@ -248,4 +254,8 @@ struct HeartBeatReply
 
 };
 
-#endif
+// Required for InternalPeer
+Q_DECLARE_METATYPE(Protocol::SyncMessage)
+Q_DECLARE_METATYPE(Protocol::RpcCall)
+Q_DECLARE_METATYPE(Protocol::InitRequest)
+Q_DECLARE_METATYPE(Protocol::InitData)