X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientsyncer.cpp;h=2c2a5df537323b27bc744f6d4a4cec15218ab82d;hp=9534b6fd84d8444a3a4c1a5748a0a71aceba71d2;hb=9a36f8e55bfa485467e093fba669841fdfacda2f;hpb=26c15c14a067c8709d2e04ef9d8965550dcee52d
diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp
index 9534b6fd..2c2a5df5 100644
--- a/src/client/clientsyncer.cpp
+++ b/src/client/clientsyncer.cpp
@@ -31,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() {
@@ -87,6 +86,7 @@ void ClientSyncer::coreHasData() {
}
void ClientSyncer::coreSocketError(QAbstractSocket::SocketError) {
+ qDebug() << "coreSocketError" << socket << socket->errorString();
emit connectionError(socket->errorString());
socket->deleteLater();
}
@@ -120,7 +120,18 @@ 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);
@@ -145,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);
}
@@ -172,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());
@@ -330,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