X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fclient%2Fclientsyncer.cpp;fp=src%2Fclient%2Fclientsyncer.cpp;h=e9d64f3206131bc36c917050eafca64558455ff6;hp=fb8bebc2f0e67c38b41d070697d2a7d44f0c68d9;hb=4aed4b037ea6feaeec09743e5d6018f58d47a535;hpb=4c2ec3f1bd9e2eb17d31585866f2b2d40a699aac diff --git a/src/client/clientsyncer.cpp b/src/client/clientsyncer.cpp index fb8bebc2..e9d64f32 100644 --- a/src/client/clientsyncer.cpp +++ b/src/client/clientsyncer.cpp @@ -222,33 +222,42 @@ void ClientSyncer::clientInitAck(const QVariantMap &msg) { } emit connectionMsg(msg["CoreInfo"].toString()); +#ifndef QT_NO_COMPRESS + if(msg["SupportsCompression"].toBool()) { + socket->setProperty("UseCompression", true); + } +#endif + + _coreMsgBuffer = msg; #ifdef HAVE_SSL if(coreConnectionInfo["useSsl"].toBool()) { if(msg["SupportSsl"].toBool()) { QSslSocket *sslSocket = qobject_cast(socket); Q_ASSERT(sslSocket); + connect(sslSocket, SIGNAL(encrypted()), this, SLOT(sslSocketEncrypted())); connect(sslSocket, SIGNAL(sslErrors(const QList &)), this, SLOT(sslErrors(const QList &))); + sslSocket->startClientEncryption(); } 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.")); disconnectFromCore(); - return; } + return; } #endif + // if we use SSL we wait for the next step until every SSL warning has been cleared + connectionReady(); +} -#ifndef QT_NO_COMPRESS - if(msg["SupportsCompression"].toBool()) { - socket->setProperty("UseCompression", true); - } -#endif - - if(!msg["Configured"].toBool()) { +void ClientSyncer::connectionReady() { + if(!_coreMsgBuffer["Configured"].toBool()) { // start wizard - emit startCoreSetup(msg["StorageBackends"].toList()); - } else if(msg["LoginEnabled"].toBool()) { + emit startCoreSetup(_coreMsgBuffer["StorageBackends"].toList()); + } else if(_coreMsgBuffer["LoginEnabled"].toBool()) { emit startLogin(); } + _coreMsgBuffer.clear(); + resetWarningsHandler(); } void ClientSyncer::doCoreSetup(const QVariant &setupData) { @@ -329,14 +338,44 @@ void ClientSyncer::checkSyncState() { } } +void ClientSyncer::setWarningsHandler(const char *slot) { + resetWarningsHandler(); + connect(this, SIGNAL(handleIgnoreWarnings(bool)), this, slot); +} + +void ClientSyncer::resetWarningsHandler() { + disconnect(this, SIGNAL(handleIgnoreWarnings(bool)), this, 0); +} + #ifdef HAVE_SSL -void ClientSyncer::sslErrors(const QList &errors) { - qDebug() << "SSL Errors:"; - foreach(QSslError err, errors) - qDebug() << " " << err; +void ClientSyncer::ignoreSslWarnings(bool permanently) { + QAbstractSocket *sock = qobject_cast(socket); + if(sock) { + // ensure that a proper state is displayed and no longer a warning + emit socketStateChanged(sock->state()); + } + emit connectionMsg(_coreMsgBuffer["CoreInfo"].toString()); + connectionReady(); +} + +void ClientSyncer::sslSocketEncrypted() { + QSslSocket *socket = qobject_cast(sender()); + if(socket) { + QByteArray digest = socket->peerCertificate().digest(); + } +} +void ClientSyncer::sslErrors(const QList &errors) { QSslSocket *socket = qobject_cast(sender()); - if(socket) + if(socket) { socket->ignoreSslErrors(); + } + + QStringList warnings; + foreach(QSslError err, errors) + warnings << err.errorString(); + + setWarningsHandler(SLOT(ignoreSslWarnings(bool))); + emit connectionWarnings(warnings); } #endif