diff options
author | Saturneric <[email protected]> | 2023-03-30 17:13:52 +0000 |
---|---|---|
committer | Saturneric <[email protected]> | 2023-03-30 17:13:52 +0000 |
commit | d2ff4d0ad8144702ef7b5945f531aff0c4e51101 (patch) | |
tree | ddb8e78dbe2ab69b295318cfa3df46f4ac513647 /src/ui/thread/ProxyConnectionTestTask.cpp | |
parent | feat: update ui of general settings (diff) | |
download | GpgFrontend-d2ff4d0ad8144702ef7b5945f531aff0c4e51101.tar.gz GpgFrontend-d2ff4d0ad8144702ef7b5945f531aff0c4e51101.zip |
fix: solve issues in proxy configure
Diffstat (limited to 'src/ui/thread/ProxyConnectionTestTask.cpp')
-rw-r--r-- | src/ui/thread/ProxyConnectionTestTask.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/ui/thread/ProxyConnectionTestTask.cpp b/src/ui/thread/ProxyConnectionTestTask.cpp new file mode 100644 index 00000000..c7d623d7 --- /dev/null +++ b/src/ui/thread/ProxyConnectionTestTask.cpp @@ -0,0 +1,74 @@ +/** + * Copyright (C) 2021 Saturneric + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see <https://www.gnu.org/licenses/>. + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * The source code version of this software was modified and released + * by Saturneric<[email protected]><[email protected]> starting on May 12, 2021. + * + */ + +#include "ProxyConnectionTestTask.h" + +GpgFrontend::UI::ProxyConnectionTestTask::ProxyConnectionTestTask(QString url, + int timeout) + : Task("proxy_connection_test_task"), + url_(std::move(url)), + timeout_(timeout), + network_manager_(new QNetworkAccessManager(this)) {} + +void GpgFrontend::UI::ProxyConnectionTestTask::run() { + SetFinishAfterRun(false); + + auto* network_reply = network_manager_->get(QNetworkRequest{url_}); + auto* timer = new QTimer(this); + + connect(network_reply, &QNetworkReply::finished, this, + [this, network_reply]() { + SPDLOG_DEBUG("key server domain reply: {} received", + url_.toStdString()); + this->slot_process_network_reply(network_reply); + }); + + connect(timer, &QTimer::timeout, this, [this, network_reply]() { + SPDLOG_DEBUG("timeout for key server: {}", url_.toStdString()); + if (network_reply->isRunning()) { + network_reply->abort(); + this->slot_process_network_reply(network_reply); + } + }); + + timer->start(timeout_); +} + +void GpgFrontend::UI::ProxyConnectionTestTask::slot_process_network_reply( + QNetworkReply* reply) { + auto buffer = reply->readAll(); + SPDLOG_DEBUG("key server domain reply: {}, buffer size: {}", + url_.toStdString(), buffer.size()); + + if (reply->error() == QNetworkReply::NoError && !buffer.isEmpty()) { + result_ = "Reachable"; + } else { + result_ = "Not Reachable"; + } + + emit SignalProxyConnectionTestResult(result_); + emit SignalTaskRunnableEnd(0); +} |