/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel IRC Team *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#ifndef _CLIENTSYNCER_H_
-#define _CLIENTSYNCER_H_
+#ifndef CLIENTSYNCER_H_
+#define CLIENTSYNCER_H_
#include <QPointer>
#include <QString>
#include <QVariantMap>
-#ifndef QT_NO_OPENSSL
-#include <QSslSocket>
+#ifdef HAVE_SSL
+# include <QSslSocket>
#else
-#include <QTcpSocket>
+# include <QTcpSocket>
#endif
+#include "types.h"
+
class IrcUser;
class IrcChannel;
+class SignalProxy;
class ClientSyncer : public QObject {
Q_OBJECT
public:
ClientSyncer(QObject *parent = 0);
~ClientSyncer();
-
+
+ inline const QIODevice *currentDevice() { return _socket; }
+
signals:
void recvPartialItem(quint32 avail, quint32 size);
void connectionError(const QString &errorMsg);
+ void connectionWarnings(const QStringList &warnings);
void connectionMsg(const QString &msg);
void sessionProgress(quint32 part, quint32 total);
void networksProgress(quint32 part, quint32 total);
void socketStateChanged(QAbstractSocket::SocketState);
void socketDisconnected();
-
+
void startLogin();
void loginFailed(const QString &error);
void loginSuccess();
void startCoreSetup(const QVariantList &);
void coreSetupSuccess();
void coreSetupFailed(const QString &error);
-
- void encrypted(bool);
-
+
+ void encrypted(); // relaying encrypted signal of the encapsulated SslSocket
+
+ void startInternalCore(ClientSyncer *syncer);
+ void connectToInternalCore(SignalProxy *proxy);
+
+ void handleIgnoreWarnings(bool permanently);
+
public slots:
void connectToCore(const QVariantMap &);
void loginToCore(const QString &user, const QString &passwd);
void disconnectFromCore();
-
+ void useInternalCore();
+
+ inline void ignoreWarnings(bool permanently) { emit handleIgnoreWarnings(permanently); }
+
private slots:
void coreSocketError(QAbstractSocket::SocketError);
void coreHasData();
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 connectionReady();
void doCoreSetup(const QVariant &setupData);
-#ifndef QT_NO_OPENSSL
- void sslErrors(const QList<QSslError> &errors);
+
+ void setWarningsHandler(const char *slot);
+ void resetWarningsHandler();
+ void resetConnection();
+
+#ifdef HAVE_SSL
+ void ignoreSslWarnings(bool permanently);
+ void sslSocketEncrypted();
+ void sslErrors(const QList<QSslError> &errors);
#endif
-
+
private:
- QPointer<QIODevice> socket;
- quint32 blockSize;
+ QPointer<QIODevice> _socket;
+ quint32 _blockSize;
+
QVariantMap coreConnectionInfo;
-
+ QVariantMap _coreMsgBuffer;
+
QSet<QObject *> netsToSync;
int numNetsToSync;
+
+ QString coreInfoString(const QVariantMap &);
};
#endif