+struct ClientRegistered : public HandshakeMessage
+{
+ 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)
+ {}
+
+ 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;
+};
+
+struct SetupData : public HandshakeMessage
+{
+ 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;
+ QString adminPassword;
+ QString backend;
+ QVariantMap setupData;
+ QString authenticator;
+ QVariantMap authSetupData;
+};
+
+struct SetupFailed : public HandshakeMessage
+{
+ inline SetupFailed(QString errorString)
+ : errorString(std::move(errorString))
+ {}
+
+ QString errorString;
+};
+
+struct SetupDone : public HandshakeMessage
+{};
+
+struct Login : public HandshakeMessage
+{
+ inline Login(QString user, QString password)
+ : user(std::move(user))
+ , password(std::move(password))
+ {}
+
+ QString user;
+ QString password;
+};
+
+struct LoginFailed : public HandshakeMessage
+{
+ inline LoginFailed(QString errorString)
+ : errorString(std::move(errorString))
+ {}
+
+ QString errorString;
+};
+
+struct LoginSuccess : public HandshakeMessage
+{};
+
+// TODO: more generic format
+struct SessionState : public HandshakeMessage
+{
+ 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;
+ QVariantList networkIds;
+};