X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fcoreconnection.h;h=f8be383a8627b3e005727ee9d2fc29a8c0c2b72a;hp=f1afab9f418a2bd35427fb5e7c5e98a55d514310;hb=52209badc8e769e50aa3019b63689dda0e79e9d0;hpb=0f87a72d470196f5781053927d9b91e52cc363f2 diff --git a/src/client/coreconnection.h b/src/client/coreconnection.h index f1afab9f..f8be383a 100644 --- a/src/client/coreconnection.h +++ b/src/client/coreconnection.h @@ -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 * @@ -15,151 +15,194 @@ * 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 +#include +#include #ifdef HAVE_SSL -# include +# include #else -# include +# include #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 ConnectionState state() const; - inline bool isConnected() const; - inline CoreAccount currentAccount() const; + bool isConnected() const; + ConnectionState state() const; + CoreAccount currentAccount() const; - inline int progressMinimum() const; - inline int progressMaximum() const; - inline int progressValue() const; - inline QString progressText() const; + bool isEncrypted() const; + bool isLocalConnection() const; -public slots: - bool connectToCore(AccountId = 0); - void reconnectToCore(); - void disconnectFromCore(); - -// void useInternalCore(); - -signals: - void stateChanged(CoreConnection::ConnectionState); - void synchronized(); + int progressMinimum() const; + int progressMaximum() const; + int progressValue() const; + QString progressText() const; - void connectionError(const QString &errorMsg); - void connectionWarnings(const QStringList &warnings); - void connectionMsg(const QString &msg); - void disconnected(); + //! Check if we consider the last connect as reconnect + bool wasReconnect() const { return _wasReconnect; } - void progressRangeChanged(int minimum, int maximum); - void progressValueChanged(int value); - void progressTextChanged(const QString &); + QPointer peer() const; - void startCoreSetup(const QVariantList &); - void startInternalCore(); - void connectToInternalCore(SignalProxy *proxy); +public slots: + bool connectToCore(AccountId = 0); + void reconnectToCore(); + void disconnectFromCore(); + void internalSessionStateReceived(const Protocol::SessionState& sessionState); - // This signal MUST be handled synchronously! - void userAuthenticationRequired(CoreAccount *, bool *valid, const QString &errorMessage = QString()); + void setupCore(const Protocol::SetupData& setupData); - void handleIgnoreWarnings(bool permanently); +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 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 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); +#endif private slots: - void connectToCurrentAccount(); + void connectToCurrentAccount(); + void disconnectFromCore(const QString& errorString, bool wantReconnect = true); + + void coreSocketError(QAbstractSocket::SocketError error, const QString& errorString); + void coreSocketDisconnected(); - void socketStateChanged(QAbstractSocket::SocketState); - void coreSocketError(QAbstractSocket::SocketError); - void coreHasData(); - void coreSocketConnected(); - void coreSocketDisconnected(); + // for sync progress + void networkInitDone(); + void checkSyncState(); - void clientInitAck(const QVariantMap &msg); + void loginToCore(const QString& user, const QString& password, bool remember); // for config wizard + void syncToCore(const Protocol::SessionState& sessionState); - // for sync progress - void networkInitDone(); - void checkSyncState(); + void resetConnection(bool wantReconnect = false); - void syncToCore(const QVariantMap &sessionState); - void internalSessionStateReceived(const QVariant &packedState); - void sessionStateReceived(const QVariantMap &state); + void onConnectionReady(); + void onLoginSuccessful(const CoreAccount& account); + void onHandshakeComplete(RemotePeer* peer, const Protocol::SessionState& sessionState); - void setWarningsHandler(const char *slot); - void resetWarningsHandler(); - void resetConnection(); - void connectionReady(); - //void doCoreSetup(const QVariant &setupData); + void updateProgress(int value, int maximum); + void setProgressText(const QString& text); + void setProgressValue(int value); + void setProgressMinimum(int minimum); + void setProgressMaximum(int maximum); - void loginToCore(const QString &previousError = QString()); - void loginSuccess(); - void loginFailed(const QString &errorMessage); + 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); + void networkDetectionModeChanged(const QVariant& mode); + void pingTimeoutIntervalChanged(const QVariant& interval); + void reconnectIntervalChanged(const QVariant& interval); + void reconnectTimeout(); - void setState(QAbstractSocket::SocketState socketState); - void setState(ConnectionState state); + void onlineStateChanged(bool isOnline); private: - CoreAccountModel *_model; - CoreAccount _account; - QVariantMap _coreMsgBuffer; + QPointer _authHandler; + QPointer _peer; + ConnectionState _state{Disconnected}; + + QTimer _reconnectTimer; + bool _wantReconnect{false}; + bool _wasReconnect{false}; + + QSet _netsToSync; + int _numNetsToSync; + int _progressMinimum{0}, _progressMaximum{-1}, _progressValue{-1}; + QString _progressText; - QPointer _socket; - quint32 _blockSize; - ConnectionState _state; + bool _resetting{false}; - QSet _netsToSync; - int _numNetsToSync; - int _progressMinimum, _progressMaximum, _progressValue; - QString _progressText; + CoreAccount _account; + CoreAccountModel* accountModel() const; - QString _coreInfoString(const QVariantMap &); + QPointer _qNetworkConfigurationManager; - inline CoreAccountModel *accountModel() const; + 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; } - -#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; +}