X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fcoreconnection.h;h=a1d6cda05fc9749eca92a33ebf604c8dd3798fb2;hp=67b9b142ca7d07a0bc27f061084fbe7842cd722f;hb=635c26ca94d131d14af7d3948b0b22db3b84ddb6;hpb=11444d0219a994969c633f62543f7ef302f43300 diff --git a/src/client/coreconnection.h b/src/client/coreconnection.h index 67b9b142..a1d6cda0 100644 --- a/src/client/coreconnection.h +++ b/src/client/coreconnection.h @@ -24,6 +24,7 @@ // TODO: support system application proxy (new in Qt 4.6) #include "QPointer" +#include "QTimer" #ifdef HAVE_SSL # include @@ -31,11 +32,16 @@ # include #endif +#ifdef HAVE_KDE +# include +#endif + #include "coreaccount.h" #include "types.h" class CoreAccountModel; class Network; +class SignalProxy; class CoreConnection : public QObject { Q_OBJECT @@ -52,29 +58,36 @@ public: CoreConnection(CoreAccountModel *model, QObject *parent = 0); void init(); - void start(); - inline ConnectionState state() const; inline bool isConnected() const; + inline ConnectionState state() const; inline 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; +#ifdef HAVE_SSL + inline const QSslSocket *sslSocket() const; +#endif + public slots: - void connectToCore(AccountId); + bool connectToCore(AccountId = 0); void reconnectToCore(); void disconnectFromCore(); -// void useInternalCore(); - 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(); @@ -84,13 +97,24 @@ signals: void progressTextChanged(const QString &); void startCoreSetup(const QVariantList &); + void coreSetupSuccess(); + void coreSetupFailed(const QString &error); - // This signal MUST be handled synchronously! - void userAuthenticationRequired(CoreAccount *, const QString &errorMessage = QString()); + void startInternalCore(); + void connectToInternalCore(SignalProxy *proxy); - void handleIgnoreWarnings(bool permanently); + // 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 disconnectFromCore(const QString &errorString, bool wantReconnect = true); + void socketStateChanged(QAbstractSocket::SocketState); void coreSocketError(QAbstractSocket::SocketError); void coreHasData(); @@ -104,19 +128,19 @@ private slots: void checkSyncState(); void syncToCore(const QVariantMap &sessionState); - //void internalSessionStateReceived(const QVariant &packedState); + void internalSessionStateReceived(const QVariant &packedState); void sessionStateReceived(const QVariantMap &state); - void setWarningsHandler(const char *slot); - void resetWarningsHandler(); - void resetConnection(); + void resetConnection(bool wantReconnect = false); void connectionReady(); - //void doCoreSetup(const QVariant &setupData); - void loginToCore(); + 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 updateProgress(int value, int maximum); void setProgressText(const QString &text); void setProgressValue(int value); @@ -126,16 +150,33 @@ private slots: 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 reconnectTimeout(); + +#ifdef HAVE_KDE + void solidNetworkStatusChanged(Solid::Networking::Status status); +#endif + private: CoreAccountModel *_model; CoreAccount _account; QVariantMap _coreMsgBuffer; - QPointer _socket; + QPointer _socket; quint32 _blockSize; ConnectionState _state; - QSet _netsToSync; + QTimer _reconnectTimer; + bool _wantReconnect; + + QSet _netsToSync; int _numNetsToSync; int _progressMinimum, _progressMaximum, _progressValue; QString _progressText; @@ -143,6 +184,8 @@ private: QString _coreInfoString(const QVariantMap &); inline CoreAccountModel *accountModel() const; + + friend class CoreConfigWizard; }; Q_DECLARE_METATYPE(CoreConnection::ConnectionState) @@ -158,4 +201,8 @@ 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(_socket); } +#endif + #endif