qa: Avoid deprecation warnings for QList/QSet conversions
[quassel.git] / src / client / coreconnection.h
index a1d6cda..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 {
-  Q_OBJECT
+class CLIENT_EXPORT CoreConnection : public QObject
+{
+    Q_OBJECT
 
 public:
-  enum ConnectionState {
-    Disconnected,
-    Connecting,
-    Connected,
-    Synchronizing,
-    Synchronized
-  };
+    enum ConnectionState
+    {
+        Disconnected,
+        Connecting,
+        Connected,
+        Synchronizing,
+        Synchronized
+    };
 
-  CoreConnection(CoreAccountModel *model, QObject *parent = 0);
+    CoreConnection(QObject* parent = nullptr);
 
-  void init();
+    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;
+    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;
 
-#ifdef HAVE_SSL
-  inline const QSslSocket *sslSocket() const;
-#endif
+    //! Check if we consider the last connect as reconnect
+    bool wasReconnect() const { return _wasReconnect; }
+
+    QPointer<Peer> peer() const;
 
 public slots:
-  bool connectToCore(AccountId = 0);
-  void reconnectToCore();
-  void disconnectFromCore();
+    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);
-  void encrypted(bool isEncrypted = true);
-  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 disconnected();
-
-  void progressRangeChanged(int minimum, int maximum);
-  void progressValueChanged(int value);
-  void progressTextChanged(const QString &);
-
-  void startCoreSetup(const QVariantList &);
-  void coreSetupSuccess();
-  void coreSetupFailed(const QString &error);
-
-  void startInternalCore();
-  void connectToInternalCore(SignalProxy *proxy);
-
-  // These signals MUST be handled synchronously!
-  void userAuthenticationRequired(CoreAccount *, bool *valid, const QString &errorMessage = QString());
-  void handleNoSslInClient(bool *accepted);
-  void handleNoSslInCore(bool *accepted);
+    void stateChanged(CoreConnection::ConnectionState);
+    void encrypted(bool isEncrypted = true);
+    void synchronized();
+    void lagUpdated(int msecs);
+
+    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 startCoreSetup(const QVariantList& backendInfo, const QVariantList& authenticatorInfo);
+    void coreSetupSuccess();
+    void coreSetupFailed(const QString& error);
+
+    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);
 #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 socketStateChanged(QAbstractSocket::SocketState);
-  void coreSocketError(QAbstractSocket::SocketError);
-  void coreHasData();
-  void coreSocketConnected();
-  void coreSocketDisconnected();
-
-  void clientInitAck(const QVariantMap &msg);
-
-  // for sync progress
-  void networkInitDone();
-  void checkSyncState();
+    void connectToCurrentAccount();
+    void disconnectFromCore(const QString& errorString, bool wantReconnect = true);
 
-  void syncToCore(const QVariantMap &sessionState);
-  void internalSessionStateReceived(const QVariant &packedState);
-  void sessionStateReceived(const QVariantMap &state);
+    void coreSocketError(QAbstractSocket::SocketError error, const QString& errorString);
+    void coreSocketDisconnected();
 
-  void resetConnection(bool wantReconnect = false);
-  void connectionReady();
+    // for sync progress
+    void networkInitDone();
+    void checkSyncState();
 
-  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 loginToCore(const QString& user, const QString& password, bool remember);  // for config wizard
+    void syncToCore(const Protocol::SessionState& sessionState);
 
-  void doCoreSetup(const QVariant &setupData);
+    void resetConnection(bool wantReconnect = false);
 
-  void updateProgress(int value, int maximum);
-  void setProgressText(const QString &text);
-  void setProgressValue(int value);
-  void setProgressMinimum(int minimum);
-  void setProgressMaximum(int maximum);
+    void onConnectionReady();
+    void onLoginSuccessful(const CoreAccount& account);
+    void onHandshakeComplete(RemotePeer* peer, const Protocol::SessionState& sessionState);
 
-  void setState(QAbstractSocket::SocketState socketState);
-  void setState(ConnectionState state);
+    void updateProgress(int value, int maximum);
+    void setProgressText(const QString& text);
+    void setProgressValue(int value);
+    void setProgressMinimum(int minimum);
+    void setProgressMaximum(int maximum);
 
-#ifdef HAVE_SSL
-  void sslSocketEncrypted();
-  void sslErrors();
-#endif
+    void setState(ConnectionState state);
 
-  void networkDetectionModeChanged(const QVariant &mode);
-  void pingTimeoutIntervalChanged(const QVariant &interval);
-  void reconnectIntervalChanged(const QVariant &interval);
-  void reconnectTimeout();
+    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<ClientAuthHandler> _authHandler;
+    QPointer<Peer> _peer;
+    ConnectionState _state{Disconnected};
 
-  QPointer<QAbstractSocket> _socket;
-  quint32 _blockSize;
-  ConnectionState _state;
+    QTimer _reconnectTimer;
+    bool _wantReconnect{false};
+    bool _wasReconnect{false};
 
-  QTimer _reconnectTimer;
-  bool _wantReconnect;
+    QSet<QObject*> _netsToSync;
+    int _numNetsToSync;
+    int _progressMinimum{0}, _progressMaximum{-1}, _progressValue{-1};
+    QString _progressText;
 
-  QSet<QObject *> _netsToSync;
-  int _numNetsToSync;
-  int _progressMinimum, _progressMaximum, _progressValue;
-  QString _progressText;
+    bool _resetting{false};
 
-  QString _coreInfoString(const QVariantMap &);
+    CoreAccount _account;
+    CoreAccountModel* accountModel() const;
 
-  inline CoreAccountModel *accountModel() const;
+    QPointer<QNetworkConfigurationManager> _qNetworkConfigurationManager;
 
-  friend class CoreConfigWizard;
+    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
-
-#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;
+}
+
+inline CoreConnection::ConnectionState CoreConnection::state() const
+{
+    return _state;
+}
+inline bool CoreConnection::isConnected() const
+{
+    return state() >= Connected;
+}
+inline CoreAccount CoreConnection::currentAccount() const
+{
+    return _account;
+}