X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientsyncer.cpp;h=952860a68390bc9765863410650e00b6dd04bfc4;hp=9534b6fd84d8444a3a4c1a5748a0a71aceba71d2;hb=b79832bf9c4c21b05629cfd2fdbd008ad690572f;hpb=90ee8b5c90923a3d4a48fc5493ca999e9d0d6a97 diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp index 9534b6fd..952860a6 100644 --- a/src/client/clientsyncer.cpp +++ b/src/client/clientsyncer.cpp @@ -87,6 +87,7 @@ void ClientSyncer::coreHasData() { } void ClientSyncer::coreSocketError(QAbstractSocket::SocketError) { + qDebug() << "coreSocketError" << socket << socket->errorString(); emit connectionError(socket->errorString()); socket->deleteLater(); } @@ -120,7 +121,13 @@ 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 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); @@ -145,7 +152,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); } @@ -172,6 +180,27 @@ void ClientSyncer::clientInitAck(const QVariantMap &msg) { return; } emit connectionMsg(msg["CoreInfo"].toString()); + if(coreConnectionInfo["useSsl"].toBool()) { + if(msg["SupportSsl"].toBool()) { + QSslSocket *sslSocket = qobject_cast(socket); + if(sslSocket) { + connect(sslSocket, SIGNAL(sslErrors(const QList &)), this, SLOT(sslErrors(const QList &))); + sslSocket->startClientEncryption(); + emit encrypted(true); + } else { + emit connectionError(tr("This client is built without SSL Support!
Disable the usage of SSL in the account settings.")); + emit encrypted(false); + disconnectFromCore(); + return; + } + } 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; + } + } + if(!msg["Configured"].toBool()) { // start wizard emit startCoreSetup(msg["StorageBackends"].toList()); @@ -330,3 +359,12 @@ void ClientSyncer::checkSyncState() { } } +void ClientSyncer::sslErrors(const QList &errors) { + qDebug() << "SSL Errors:"; + foreach(QSslError err, errors) + qDebug() << " " << err; + + QSslSocket *socket = qobject_cast(sender()); + if(socket) + socket->ignoreSslErrors(); +}