From 72d3feccc4f260c9582ea210dcd9e9ce3bf90519 Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Fri, 15 Jun 2018 10:06:48 -0700 Subject: [PATCH] Better logging for SSL debugging --- src/QGCLoggingCategory.cc | 2 -- src/Terrain/TerrainQuery.cc | 44 +++++++++++++++++++++++++++---------- src/Terrain/TerrainQuery.h | 3 ++- 3 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/QGCLoggingCategory.cc b/src/QGCLoggingCategory.cc index 662de9b4f..fc1670c34 100644 --- a/src/QGCLoggingCategory.cc +++ b/src/QGCLoggingCategory.cc @@ -66,8 +66,6 @@ void QGCLoggingCategoryRegister::setFilterRulesFromSettings(const QString& comma } QString filterRules; - // Turn off bogus ssl warning - filterRules += "qt.network.ssl.warning=false\n"; filterRules += "*Log.debug=false\n"; // Set up filters defined in settings diff --git a/src/Terrain/TerrainQuery.cc b/src/Terrain/TerrainQuery.cc index ec9c96c35..27bc6cf32 100644 --- a/src/Terrain/TerrainQuery.cc +++ b/src/Terrain/TerrainQuery.cc @@ -17,11 +17,13 @@ #include #include #include +#include #include #include #include #include #include + #include QGC_LOGGING_CATEGORY(TerrainQueryLog, "TerrainQueryLog") @@ -33,7 +35,7 @@ Q_GLOBAL_STATIC(TerrainTileManager, _terrainTileManager) TerrainAirMapQuery::TerrainAirMapQuery(QObject* parent) : TerrainQueryInterface(parent) { - + qCDebug(TerrainQueryVerboseLog) << "supportsSsl" << QSslSocket::supportsSsl() << "sslLibraryBuildVersionString" << QSslSocket::sslLibraryBuildVersionString(); } void TerrainAirMapQuery::requestCoordinateHeights(const QList& coordinates) @@ -107,18 +109,24 @@ void TerrainAirMapQuery::_sendQuery(const QString& path, const QUrlQuery& urlQue QNetworkRequest request(url); + QSslConfiguration sslConf = request.sslConfiguration(); + sslConf.setPeerVerifyMode(QSslSocket::VerifyNone); + request.setSslConfiguration(sslConf); + QNetworkProxy tProxy; tProxy.setType(QNetworkProxy::DefaultProxy); _networkManager.setProxy(tProxy); QNetworkReply* networkReply = _networkManager.get(request); if (!networkReply) { - qCDebug(TerrainQueryLog) << "QNetworkManager::Get did not return QNetworkReply"; + qCWarning(TerrainQueryLog) << "QNetworkManager::Get did not return QNetworkReply"; _requestFailed(); return; } + networkReply->ignoreSslErrors(); connect(networkReply, &QNetworkReply::finished, this, &TerrainAirMapQuery::_requestFinished); + connect(networkReply, &QNetworkReply::sslErrors, this, &TerrainAirMapQuery::_sslErrors); connect(networkReply, QOverload::of(&QNetworkReply::error), this, &TerrainAirMapQuery::_requestError); } @@ -127,17 +135,29 @@ void TerrainAirMapQuery::_requestError(QNetworkReply::NetworkError code) QNetworkReply* reply = qobject_cast(QObject::sender()); if (code != QNetworkReply::NoError) { - qCDebug(TerrainQueryLog) << "_requestError error:url:data" << reply->error() << reply->url() << reply->readAll(); + qCWarning(TerrainQueryLog) << "_requestError error:url:data" << reply->error() << reply->url() << reply->readAll(); return; } } +void TerrainAirMapQuery::_sslErrors(const QList &errors) +{ + for (const auto &error : errors) { + qCWarning(TerrainQueryLog) << "SSL error: " << error.errorString(); + + const auto &certificate = error.certificate(); + if (!certificate.isNull()) { + qCWarning(TerrainQueryLog) << "SSL Certificate problem: " << certificate.toText(); + } + } +} + void TerrainAirMapQuery::_requestFinished(void) { QNetworkReply* reply = qobject_cast(QObject::sender()); if (reply->error() != QNetworkReply::NoError) { - qCDebug(TerrainQueryLog) << "_requestFinished error:url:data" << reply->error() << reply->url() << reply->readAll(); + qCWarning(TerrainQueryLog) << "_requestFinished error:url:data" << reply->error() << reply->url() << reply->readAll(); reply->deleteLater(); _requestFailed(); return; @@ -150,7 +170,7 @@ void TerrainAirMapQuery::_requestFinished(void) QJsonParseError parseError; QJsonDocument responseJson = QJsonDocument::fromJson(responseBytes, &parseError); if (parseError.error != QJsonParseError::NoError) { - qCDebug(TerrainQueryLog) << "_requestFinished unable to parse json:" << parseError.errorString(); + qCWarning(TerrainQueryLog) << "_requestFinished unable to parse json:" << parseError.errorString(); _requestFailed(); return; } @@ -159,7 +179,7 @@ void TerrainAirMapQuery::_requestFinished(void) QJsonObject rootObject = responseJson.object(); QString status = rootObject["status"].toString(); if (status != "success") { - qCDebug(TerrainQueryLog) << "_requestFinished status != success:" << status; + qCWarning(TerrainQueryLog) << "_requestFinished status != success:" << status; _requestFailed(); return; } @@ -252,7 +272,7 @@ void TerrainAirMapQuery::_parseCarpetData(const QJsonValue& carpetJson) TerrainOfflineAirMapQuery::TerrainOfflineAirMapQuery(QObject* parent) : TerrainQueryInterface(parent) { - + qCDebug(TerrainQueryVerboseLog) << "supportsSsl" << QSslSocket::supportsSsl() << "sslLibraryBuildVersionString" << QSslSocket::sslLibraryBuildVersionString(); } void TerrainOfflineAirMapQuery::requestCoordinateHeights(const QList& coordinates) @@ -385,7 +405,7 @@ bool TerrainTileManager::_getAltitudesForCoordinates(const QList if (_tiles[tileHash].isIn(coordinate)) { altitudes.push_back(_tiles[tileHash].elevation(coordinate)); } else { - qCDebug(TerrainQueryLog) << "Error: coordinate not in tile region"; + qCWarning(TerrainQueryLog) << "Error: coordinate not in tile region"; altitudes.push_back(-1.0); } } @@ -412,7 +432,7 @@ void TerrainTileManager::_terrainDone(QByteArray responseBytes, QNetworkReply::N _state = State::Idle; if (!reply) { - qCDebug(TerrainQueryLog) << "Elevation tile fetched but invalid reply data type."; + qCWarning(TerrainQueryLog) << "Elevation tile fetched but invalid reply data type."; return; } @@ -422,13 +442,13 @@ void TerrainTileManager::_terrainDone(QByteArray responseBytes, QNetworkReply::N // handle potential errors if (error != QNetworkReply::NoError) { - qCDebug(TerrainQueryLog) << "Elevation tile fetching returned error (" << error << ")"; + qCWarning(TerrainQueryLog) << "Elevation tile fetching returned error (" << error << ")"; _tileFailed(); reply->deleteLater(); return; } if (responseBytes.isEmpty()) { - qCDebug(TerrainQueryLog) << "Error in fetching elevation tile. Empty response."; + qCWarning(TerrainQueryLog) << "Error in fetching elevation tile. Empty response."; _tileFailed(); reply->deleteLater(); return; @@ -446,7 +466,7 @@ void TerrainTileManager::_terrainDone(QByteArray responseBytes, QNetworkReply::N } _tilesMutex.unlock(); } else { - qCDebug(TerrainQueryLog) << "Received invalid tile"; + qCWarning(TerrainQueryLog) << "Received invalid tile"; } reply->deleteLater(); diff --git a/src/Terrain/TerrainQuery.h b/src/Terrain/TerrainQuery.h index f41c9be0b..3f53f6ca9 100644 --- a/src/Terrain/TerrainQuery.h +++ b/src/Terrain/TerrainQuery.h @@ -69,7 +69,8 @@ public: private slots: void _requestError (QNetworkReply::NetworkError code); - void _requestFinished (); + void _requestFinished (void); + void _sslErrors (const QList &errors); private: void _sendQuery (const QString& path, const QUrlQuery& urlQuery); -- 2.22.0