From e61f5fa38ff3ffc1ae8aadb94b53932d44b43195 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 4 Dec 2016 11:17:34 +0000 Subject: [PATCH] Make it possible to ignore SSL errors from network communications It seems that the OpenSSL version on some systems is not capable of correctly handling intermediate certificates for some sites. These sites include SourceForge which we use for serving sample files. This change adds a global handler for QNAM SSL errors with the option to ignore them at the users discretion. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7359 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- SampleDownloader/RemoteFile.cpp | 9 --------- main.cpp | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/SampleDownloader/RemoteFile.cpp b/SampleDownloader/RemoteFile.cpp index 295301317..ddcf6c40f 100644 --- a/SampleDownloader/RemoteFile.cpp +++ b/SampleDownloader/RemoteFile.cpp @@ -139,15 +139,6 @@ void RemoteFile::download (QUrl const& url) listener_->download_progress (bytes_received, total_bytes); } }); - connect (reply_, &QNetworkReply::sslErrors, [this] (QList const& errors) { - QString message; - for (auto const& error: errors) - { - message += '\n' + reply_->request ().url ().toDisplayString () + ": " - + error.errorString (); - } - listener_->error ("Network SSL Errors", message); - }); } void RemoteFile::abort () diff --git a/main.cpp b/main.cpp index 89272f3bd..e1a415695 100644 --- a/main.cpp +++ b/main.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -315,8 +316,25 @@ int main(int argc, char *argv[]) ).toBool () ? 1u : 4u; } + QNetworkAccessManager network_manager {&a}; + // run the application UI - MainWindow w(temp_dir, multiple, &multi_settings, &mem_jt9, downSampleFactor, new QNetworkAccessManager {&a}, &splash); + MainWindow w(temp_dir, multiple, &multi_settings, &mem_jt9, downSampleFactor, &network_manager, &splash); + + // set up handling for any SSL issues + QObject::connect (&network_manager, &QNetworkAccessManager::sslErrors, [&w] (QNetworkReply * reply, QList const& errors) { + QString message; + for (auto const& error: errors) + { + message += '\n' + reply->request ().url ().toDisplayString () + ": " + + error.errorString (); + } + if (QMessageBox::Ignore == QMessageBox::question (&w, "Network SSL Errors", message, QMessageBox::Abort | QMessageBox::Ignore)) + { + reply->ignoreSslErrors (); + } + }); + w.show(); splash.raise (); QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit()));