X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fclient%2Fclientsyncer.cpp;h=2c2a5df537323b27bc744f6d4a4cec15218ab82d;hb=ea13d09349df9851908e617c25223646bb165a0a;hp=dfadf321664c7a728d8b496d62008d591d17dc21;hpb=a2d4978097260c8af1f51ade497071793db2a0c0;p=quassel.git diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp index dfadf321..2c2a5df5 100644 --- a/src/client/clientsyncer.cpp +++ b/src/client/clientsyncer.cpp @@ -20,6 +20,8 @@ #include "clientsyncer.h" +#include + #include "client.h" #include "global.h" #include "identity.h" @@ -29,17 +31,16 @@ #include "signalproxy.h" -ClientSyncer::ClientSyncer(QObject *parent) : QObject(parent) { +ClientSyncer::ClientSyncer(QObject *parent) + : QObject(parent) +{ socket = 0; blockSize = 0; connect(Client::signalProxy(), SIGNAL(disconnected()), this, SLOT(coreSocketDisconnected())); - } ClientSyncer::~ClientSyncer() { - - } void ClientSyncer::coreHasData() { @@ -85,6 +86,7 @@ void ClientSyncer::coreHasData() { } void ClientSyncer::coreSocketError(QAbstractSocket::SocketError) { + qDebug() << "coreSocketError" << socket << socket->errorString(); emit connectionError(socket->errorString()); socket->deleteLater(); } @@ -118,7 +120,22 @@ void ClientSyncer::connectToCore(const QVariantMap &conn) { //clientMode = RemoteCore; //emit coreConnectionMsg(tr("Connecting...")); Q_ASSERT(!socket); + +#ifndef QT_NO_OPENSSL + QSslSocket *sock = new QSslSocket(Client::instance()); +#else + if(conn["useSsl"].toBool()) { + emit connectionError(tr("This client is built without SSL Support!
Disable the usage of SSL in the account settings.")); + emit encrypted(false); + return; + } QTcpSocket *sock = new QTcpSocket(Client::instance()); +#endif + + if(conn.contains("useProxy") && conn["useProxy"].toBool()) { + QNetworkProxy proxy((QNetworkProxy::ProxyType)conn["proxyType"].toInt(), conn["proxyHost"].toString(), conn["proxyPort"].toUInt(), conn["proxyUser"].toString(), conn["proxyPassword"].toString()); + sock->setProxy(proxy); + } socket = sock; connect(sock, SIGNAL(readyRead()), this, SLOT(coreHasData())); connect(sock, SIGNAL(connected()), this, SLOT(coreSocketConnected())); @@ -139,7 +156,8 @@ void ClientSyncer::coreSocketConnected() { clientInit["ClientVersion"] = Global::quasselVersion; clientInit["ClientDate"] = Global::quasselDate; clientInit["ClientBuild"] = Global::quasselBuild; // this is a minimum, since we probably won't update for every commit - clientInit["UseSsl"] = false; // FIXME implement SSL + clientInit["UseSsl"] = coreConnectionInfo["useSsl"]; + SignalProxy::writeDataToDevice(socket, clientInit); } @@ -166,6 +184,24 @@ void ClientSyncer::clientInitAck(const QVariantMap &msg) { return; } emit connectionMsg(msg["CoreInfo"].toString()); + +#ifndef QT_NO_OPENSSL + if(coreConnectionInfo["useSsl"].toBool()) { + if(msg["SupportSsl"].toBool()) { + QSslSocket *sslSocket = qobject_cast(socket); + Q_ASSERT(sslSocket); + connect(sslSocket, SIGNAL(sslErrors(const QList &)), this, SLOT(sslErrors(const QList &))); + sslSocket->startClientEncryption(); + emit encrypted(true); + } else { + emit connectionError(tr("The Quassel Core you are trying to connect to does not support SSL!
If you want to connect anyways, disable the usage of SSL in the account settings.")); + emit encrypted(false); + disconnectFromCore(); + return; + } + } +#endif + if(!msg["Configured"].toBool()) { // start wizard emit startCoreSetup(msg["StorageBackends"].toList()); @@ -324,3 +360,14 @@ void ClientSyncer::checkSyncState() { } } +#ifndef QT_NO_OPENSSL +void ClientSyncer::sslErrors(const QList &errors) { + qDebug() << "SSL Errors:"; + foreach(QSslError err, errors) + qDebug() << " " << err; + + QSslSocket *socket = qobject_cast(sender()); + if(socket) + socket->ignoreSslErrors(); +} +#endif