/***************************************************************************
- * Copyright (C) 2009 by the Quassel Project *
+ * Copyright (C) 2005-2013 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_
#endif
#include "coreaccount.h"
+#include "remotepeer.h"
#include "types.h"
class CoreAccountModel;
+class InternalPeer;
class Network;
+class Peer;
class SignalProxy;
-class CoreConnection : public QObject {
- Q_OBJECT
+class 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(CoreAccountModel *model, QObject *parent = 0);
- 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;
- //! Check if we consider the last connect as reconnect
- inline bool wasReconnect() const { return _wasReconnect; }
+ //! Check if we consider the last connect as reconnect
+ bool wasReconnect() const { return _wasReconnect; }
#ifdef HAVE_SSL
- inline const QSslSocket *sslSocket() const;
+ const QSslSocket *sslSocket() const;
#endif
public slots:
- bool connectToCore(AccountId = 0);
- void reconnectToCore();
- void disconnectFromCore();
+ bool connectToCore(AccountId = 0);
+ void reconnectToCore();
+ void disconnectFromCore();
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 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(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 connectToCurrentAccount();
+ void disconnectFromCore(const QString &errorString, bool wantReconnect = true);
- void socketStateChanged(QAbstractSocket::SocketState);
- void coreSocketError(QAbstractSocket::SocketError);
- void coreHasData();
- void coreSocketConnected();
- void coreSocketDisconnected();
+ void socketStateChanged(QAbstractSocket::SocketState);
+ void coreSocketError(QAbstractSocket::SocketError);
+ void coreHasData(const QVariant &item);
+ void coreSocketConnected();
+ void coreSocketDisconnected();
- void clientInitAck(const QVariantMap &msg);
+ void clientInitAck(const QVariantMap &msg);
- // for sync progress
- void networkInitDone();
- void checkSyncState();
+ // for sync progress
+ void networkInitDone();
+ void checkSyncState();
- void syncToCore(const QVariantMap &sessionState);
- void internalSessionStateReceived(const QVariant &packedState);
- void sessionStateReceived(const QVariantMap &state);
+ void syncToCore(const QVariantMap &sessionState);
+ void internalSessionStateReceived(const QVariant &packedState);
+ void sessionStateReceived(const QVariantMap &state);
- void resetConnection(bool wantReconnect = false);
- void connectionReady();
+ 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 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 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 updateProgress(int value, int maximum);
+ void setProgressText(const QString &text);
+ void setProgressValue(int value);
+ void setProgressMinimum(int minimum);
+ void setProgressMaximum(int maximum);
- void setState(QAbstractSocket::SocketState socketState);
- void setState(ConnectionState state);
+ void setState(QAbstractSocket::SocketState socketState);
+ void setState(ConnectionState state);
#ifdef HAVE_SSL
- void sslSocketEncrypted();
- void sslErrors();
+ void sslSocketEncrypted();
+ void sslErrors();
#endif
- 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);
+ void solidNetworkStatusChanged(Solid::Networking::Status status);
#endif
private:
- CoreAccountModel *_model;
- CoreAccount _account;
- QVariantMap _coreMsgBuffer;
+ CoreAccountModel *_model;
+ CoreAccount _account;
+ QVariantMap _coreMsgBuffer;
- QPointer<QAbstractSocket> _socket;
- quint32 _blockSize;
- ConnectionState _state;
+ QPointer<QTcpSocket> _socket;
+ QPointer<Peer> _peer;
+ ConnectionState _state;
- QTimer _reconnectTimer;
- bool _wantReconnect;
+ QTimer _reconnectTimer;
+ bool _wantReconnect;
- QSet<QObject *> _netsToSync;
- int _numNetsToSync;
- int _progressMinimum, _progressMaximum, _progressValue;
- QString _progressText;
+ QSet<QObject *> _netsToSync;
+ int _numNetsToSync;
+ int _progressMinimum, _progressMaximum, _progressValue;
+ QString _progressText;
- QString _coreInfoString(const QVariantMap &);
- bool _wasReconnect;
- bool _requestedDisconnect;
+ QString _coreInfoString(const QVariantMap &);
+ bool _wasReconnect;
+ bool _requestedDisconnect;
+ bool _resetting;
- inline CoreAccountModel *accountModel() const;
+ inline CoreAccountModel *accountModel() const;
- 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; }
+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; }
-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; }
+inline CoreConnection::ConnectionState CoreConnection::state() const { return _state; }
+inline bool CoreConnection::isConnected() const { return state() >= Connected; }
+inline CoreAccount CoreConnection::currentAccount() const { return _account; }
+inline CoreAccountModel *CoreConnection::accountModel() const { return _model; }
#ifdef HAVE_SSL
-const QSslSocket *CoreConnection::sslSocket() const { return qobject_cast<QSslSocket *>(_socket); }
+inline const QSslSocket *CoreConnection::sslSocket() const { return qobject_cast<QSslSocket *>(_socket); }
#endif
#endif