qa: Avoid deprecation warnings for QList/QSet conversions
[quassel.git] / src / client / coreconnection.h
index 699a2db..f8be383 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2009 by the Quassel Project                             *
+ *   Copyright (C) 2005-2019 by the Quassel Project                        *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   You should have received a copy of the GNU General Public License     *
  *   along with this program; if not, write to the                         *
  *   Free Software Foundation, Inc.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
  ***************************************************************************/
 
-#ifndef CORECONNECTION_H_
-#define CORECONNECTION_H_
+#pragma once
 
-// TODO: support system application proxy (new in Qt 4.6)
+#include "client-export.h"
 
-#include "QPointer"
-#include "QTimer"
+#include <QNetworkConfigurationManager>
+#include <QPointer>
+#include <QTimer>
 
 #ifdef HAVE_SSL
-#  include <QSslSocket>
+#    include <QSslSocket>
 #else
-#  include <QTcpSocket>
-#endif
-
-#ifdef HAVE_KDE
-#  include <Solid/Networking>
+#    include <QTcpSocket>
 #endif
 
 #include "coreaccount.h"
+#include "remotepeer.h"
 #include "types.h"
 
+class ClientAuthHandler;
 class CoreAccountModel;
+class InternalPeer;
 class Network;
+class Peer;
 class SignalProxy;
 
-class CoreConnection : public QObject
+class CLIENT_EXPORT CoreConnection : public QObject
 {
     Q_OBJECT
 
 public:
-    enum ConnectionState {
+    enum ConnectionState
+    {
         Disconnected,
         Connecting,
         Connected,
@@ -56,33 +57,34 @@ public:
         Synchronized
     };
 
-    CoreConnection(CoreAccountModel *model, QObject *parent = 0);
+    CoreConnection(QObject* parent = nullptr);
 
     void init();
 
-    inline bool isConnected() const;
-    inline ConnectionState state() const;
-    inline CoreAccount currentAccount() const;
+    bool isConnected() const;
+    ConnectionState state() const;
+    CoreAccount currentAccount() const;
 
     bool isEncrypted() const;
     bool isLocalConnection() const;
 
-    inline int progressMinimum() const;
-    inline int progressMaximum() const;
-    inline int progressValue() const;
-    inline QString progressText() const;
+    int progressMinimum() const;
+    int progressMaximum() const;
+    int progressValue() const;
+    QString progressText() const;
 
     //! Check if we consider the last connect as reconnect
-    inline bool wasReconnect() const { return _wasReconnect; }
+    bool wasReconnect() const { return _wasReconnect; }
 
-#ifdef HAVE_SSL
-    inline const QSslSocket *sslSocket() const;
-#endif
+    QPointer<Peer> peer() const;
 
 public slots:
     bool connectToCore(AccountId = 0);
     void reconnectToCore();
     void disconnectFromCore();
+    void internalSessionStateReceived(const Protocol::SessionState& sessionState);
+
+    void setupCore(const Protocol::SetupData& setupData);
 
 signals:
     void stateChanged(CoreConnection::ConnectionState);
@@ -90,126 +92,117 @@ signals:
     void synchronized();
     void lagUpdated(int msecs);
 
-    void connectionError(const QString &errorMsg);
-    void connectionErrorPopup(const QString &errorMsg);
-    void connectionWarnings(const QStringList &warnings);
-    void connectionMsg(const QString &msg);
+    void connectionError(const QString& errorMsg);
+    void connectionErrorPopup(const QString& errorMsg);
+    void connectionMsg(const QString& msg);
     void disconnected();
 
     void progressRangeChanged(int minimum, int maximum);
     void progressValueChanged(int value);
-    void progressTextChanged(const QString &);
+    void progressTextChanged(const QString&);
 
-    void startCoreSetup(const QVariantList &);
+    void startCoreSetup(const QVariantList& backendInfo, const QVariantList& authenticatorInfo);
     void coreSetupSuccess();
-    void coreSetupFailed(const QString &error);
+    void coreSetupFailed(const QStringerror);
 
-    void startInternalCore();
-    void connectToInternalCore(SignalProxy *proxy);
+    void connectToInternalCore(QPointer<InternalPeer> connection);
 
     // These signals MUST be handled synchronously!
-    void userAuthenticationRequired(CoreAccount *, bool *valid, const QString &errorMessage = QString());
-    void handleNoSslInClient(bool *accepted);
-    void handleNoSslInCore(bool *accepted);
+    void userAuthenticationRequired(CoreAccount*, bool* valid, const QString& errorMessage = QString());
+    void handleNoSslInClient(boolaccepted);
+    void handleNoSslInCore(boolaccepted);
 #ifdef HAVE_SSL
-    void handleSslErrors(const QSslSocket *socket, bool *accepted, bool *permanently);
+    void handleSslErrors(const QSslSocket* socket, bool* accepted, bool* permanently);
 #endif
 
 private slots:
     void connectToCurrentAccount();
-    void disconnectFromCore(const QString &errorString, bool wantReconnect = true);
+    void disconnectFromCore(const QStringerrorString, bool wantReconnect = true);
 
-    void socketStateChanged(QAbstractSocket::SocketState);
-    void coreSocketError(QAbstractSocket::SocketError);
-    void coreHasData();
-    void coreSocketConnected();
+    void coreSocketError(QAbstractSocket::SocketError error, const QString& errorString);
     void coreSocketDisconnected();
 
-    void clientInitAck(const QVariantMap &msg);
-
     // for sync progress
     void networkInitDone();
     void checkSyncState();
 
-    void syncToCore(const QVariantMap &sessionState);
-    void internalSessionStateReceived(const QVariant &packedState);
-    void sessionStateReceived(const QVariantMap &state);
+    void loginToCore(const QString& user, const QString& password, bool remember);  // for config wizard
+    void syncToCore(const Protocol::SessionState& sessionState);
 
     void resetConnection(bool wantReconnect = false);
-    void connectionReady();
-
-    void loginToCore(const QString &user, const QString &password, bool remember); // for config wizard
-    void loginToCore(const QString &previousError = QString());
-    void loginSuccess();
-    void loginFailed(const QString &errorMessage);
 
-    void doCoreSetup(const QVariant &setupData);
+    void onConnectionReady();
+    void onLoginSuccessful(const CoreAccount& account);
+    void onHandshakeComplete(RemotePeer* peer, const Protocol::SessionState& sessionState);
 
     void updateProgress(int value, int maximum);
-    void setProgressText(const QString &text);
+    void setProgressText(const QStringtext);
     void setProgressValue(int value);
     void setProgressMinimum(int minimum);
     void setProgressMaximum(int maximum);
 
-    void setState(QAbstractSocket::SocketState socketState);
     void setState(ConnectionState state);
 
-#ifdef HAVE_SSL
-    void sslSocketEncrypted();
-    void sslErrors();
-#endif
-
-    void networkDetectionModeChanged(const QVariant &mode);
-    void pingTimeoutIntervalChanged(const QVariant &interval);
-    void reconnectIntervalChanged(const QVariant &interval);
+    void networkDetectionModeChanged(const QVariant& mode);
+    void pingTimeoutIntervalChanged(const QVariant& interval);
+    void reconnectIntervalChanged(const QVariant& interval);
     void reconnectTimeout();
 
-#ifdef HAVE_KDE
-    void solidNetworkStatusChanged(Solid::Networking::Status status);
-#endif
+    void onlineStateChanged(bool isOnline);
 
 private:
-    CoreAccountModel *_model;
-    CoreAccount _account;
-    QVariantMap _coreMsgBuffer;
-
-    QPointer<QAbstractSocket> _socket;
-    quint32 _blockSize;
-    ConnectionState _state;
+    QPointer<ClientAuthHandler> _authHandler;
+    QPointer<Peer> _peer;
+    ConnectionState _state{Disconnected};
 
     QTimer _reconnectTimer;
-    bool _wantReconnect;
+    bool _wantReconnect{false};
+    bool _wasReconnect{false};
 
-    QSet<QObject *> _netsToSync;
+    QSet<QObject*> _netsToSync;
     int _numNetsToSync;
-    int _progressMinimum, _progressMaximum, _progressValue;
+    int _progressMinimum{0}, _progressMaximum{-1}, _progressValue{-1};
     QString _progressText;
 
-    QString _coreInfoString(const QVariantMap &);
-    bool _wasReconnect;
-    bool _requestedDisconnect;
+    bool _resetting{false};
+
+    CoreAccount _account;
+    CoreAccountModel* accountModel() const;
 
-    inline CoreAccountModel *accountModel() const;
+    QPointer<QNetworkConfigurationManager> _qNetworkConfigurationManager;
 
     friend class CoreConfigWizard;
 };
 
-
 Q_DECLARE_METATYPE(CoreConnection::ConnectionState)
 
 // Inlines
-int CoreConnection::progressMinimum() const { return _progressMinimum; }
-int CoreConnection::progressMaximum() const { return _progressMaximum; }
-int CoreConnection::progressValue() const { return _progressValue; }
-QString CoreConnection::progressText() const { return _progressText; }
-
-CoreConnection::ConnectionState CoreConnection::state() const { return _state; }
-bool CoreConnection::isConnected() const { return state() >= Connected; }
-CoreAccount CoreConnection::currentAccount() const { return _account; }
-CoreAccountModel *CoreConnection::accountModel() const { return _model; }
-
-#ifdef HAVE_SSL
-const QSslSocket *CoreConnection::sslSocket() const { return qobject_cast<QSslSocket *>(_socket); }
-#endif
+inline int CoreConnection::progressMinimum() const
+{
+    return _progressMinimum;
+}
+inline int CoreConnection::progressMaximum() const
+{
+    return _progressMaximum;
+}
+inline int CoreConnection::progressValue() const
+{
+    return _progressValue;
+}
+inline QString CoreConnection::progressText() const
+{
+    return _progressText;
+}
 
-#endif
+inline CoreConnection::ConnectionState CoreConnection::state() const
+{
+    return _state;
+}
+inline bool CoreConnection::isConnected() const
+{
+    return state() >= Connected;
+}
+inline CoreAccount CoreConnection::currentAccount() const
+{
+    return _account;
+}