Let RemotePeer(s) tell their protocol type and features
[quassel.git] / src / common / protocols / legacy / legacypeer.h
index a3aa178..1d09dd6 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2005-2013 by the Quassel Project                        *
+ *   Copyright (C) 2005-2014 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
@@ -41,11 +41,23 @@ public:
         HeartBeatReply
     };
 
-    LegacyPeer(QTcpSocket *socket, QObject *parent = 0);
-    ~LegacyPeer() {}
+    LegacyPeer(AuthHandler *authHandler, QTcpSocket *socket, QObject *parent = 0);
+
+    Protocol::Type protocol() const { return Protocol::LegacyProtocol; }
 
     void setSignalProxy(SignalProxy *proxy);
 
+    void dispatch(const Protocol::RegisterClient &msg);
+    void dispatch(const Protocol::ClientDenied &msg);
+    void dispatch(const Protocol::ClientRegistered &msg);
+    void dispatch(const Protocol::SetupData &msg);
+    void dispatch(const Protocol::SetupFailed &msg);
+    void dispatch(const Protocol::SetupDone &msg);
+    void dispatch(const Protocol::Login &msg);
+    void dispatch(const Protocol::LoginFailed &msg);
+    void dispatch(const Protocol::LoginSuccess &msg);
+    void dispatch(const Protocol::SessionState &msg);
+
     void dispatch(const Protocol::SyncMessage &msg);
     void dispatch(const Protocol::RpcCall &msg);
     void dispatch(const Protocol::InitRequest &msg);
@@ -57,16 +69,23 @@ public:
     // FIXME: this is only used for the auth phase and should be replaced by something more generic
     void writeSocketData(const QVariant &item);
 
-private slots:
-    void socketDataAvailable();
+signals:
+    void protocolError(const QString &errorString);
+
+    // only used in compat mode
+    void protocolVersionMismatch(int actual, int expected);
+
+protected slots:
+    void onSocketDataAvailable();
 
 private:
     bool readSocketData(QVariant &item);
+    void handleHandshakeMessage(const QVariant &msg);
     void handlePackedFunc(const QVariant &packedFunc);
     void dispatchPackedFunc(const QVariantList &packedFunc);
 
     QDataStream _stream;
-    qint32 _blockSize;
+    quint32 _blockSize;
     bool _useCompression;
 };