From 0480c63b3a2d057fea42d22c140cbeff57720f32 Mon Sep 17 00:00:00 2001 From: Qv2ray-dev <59914293+Qv2ray-dev@users.noreply.github.com> Date: Fri, 24 Apr 2020 15:29:29 +0800 Subject: [PATCH] fix: refactored Qv2ray Proxy settings --- makespec/BUILDVERSION | 2 +- src/base/models/QvSettingsObject.hpp | 17 ++- src/common/HTTPRequestHelper.cpp | 77 +++++++------ src/common/HTTPRequestHelper.hpp | 1 + src/ui/w_PreferencesWindow.cpp | 39 ++++++- src/ui/w_PreferencesWindow.hpp | 8 +- src/ui/w_PreferencesWindow.ui | 158 +++++++++++++++------------ 7 files changed, 181 insertions(+), 121 deletions(-) diff --git a/makespec/BUILDVERSION b/makespec/BUILDVERSION index 39c3d2f7..ee53c3b9 100644 --- a/makespec/BUILDVERSION +++ b/makespec/BUILDVERSION @@ -1 +1 @@ -5311 \ No newline at end of file +5312 \ No newline at end of file diff --git a/src/base/models/QvSettingsObject.hpp b/src/base/models/QvSettingsObject.hpp index 103fb3be..e0a4f138 100644 --- a/src/base/models/QvSettingsObject.hpp +++ b/src/base/models/QvSettingsObject.hpp @@ -251,13 +251,24 @@ namespace Qv2ray::base::config struct Qv2rayNetworkConfig { - bool useCustomProxy; + enum Qv2rayProxyType + { + QVPROXY_NONE, + QVPROXY_SYSTEM, + QVPROXY_CUSTOM + } proxyType; + QString address; QString type; int port; QString userAgent; - Qv2rayNetworkConfig() : address(""), type("http"), port(8000), userAgent("Qv2ray/$VERSION WebRequestHelper"){}; - XTOSTRUCT(O(useCustomProxy, type, address, port, userAgent)) + Qv2rayNetworkConfig() + : proxyType(QVPROXY_NONE), // + address("127.0.0.1"), // + type("http"), // + port(8000), // + userAgent("Qv2ray/$VERSION WebRequestHelper"){}; + XTOSTRUCT(O(proxyType, type, address, port, userAgent)) }; struct Qv2rayConfig diff --git a/src/common/HTTPRequestHelper.cpp b/src/common/HTTPRequestHelper.cpp index 0e8a504d..bb37f48a 100644 --- a/src/common/HTTPRequestHelper.cpp +++ b/src/common/HTTPRequestHelper.cpp @@ -22,68 +22,65 @@ namespace Qv2ray::common request.setRawHeader(key, value); } - QByteArray QvHttpRequestHelper::Get(const QString &url) + void QvHttpRequestHelper::setAccessManagerAttributes(QNetworkAccessManager &accessManager) { - request.setUrl({ url }); + switch (GlobalConfig.networkConfig.proxyType) + { + case Qv2rayNetworkConfig::QVPROXY_NONE: + { + DEBUG(MODULE_NETWORK, "Get without proxy.") + accessManager.setProxy(QNetworkProxy(QNetworkProxy::ProxyType::NoProxy)); + break; + } + case Qv2rayNetworkConfig::QVPROXY_SYSTEM: + { + accessManager.setProxy(QNetworkProxyFactory::systemProxyForQuery().first()); + break; + } + case Qv2rayNetworkConfig::QVPROXY_CUSTOM: + { + QNetworkProxy p{ + GlobalConfig.networkConfig.type == "http" ? QNetworkProxy::HttpProxy : QNetworkProxy::Socks5Proxy, // + GlobalConfig.networkConfig.address, // + quint16(GlobalConfig.networkConfig.port) // + }; + accessManager.setProxy(p); + break; + } + } - QNetworkProxy p; - if (GlobalConfig.networkConfig.useCustomProxy) - { - auto type = GlobalConfig.networkConfig.type == "http" ? QNetworkProxy::HttpProxy : QNetworkProxy::Socks5Proxy; - p = QNetworkProxy{ type, GlobalConfig.networkConfig.address, quint16(GlobalConfig.networkConfig.port) }; - } - else - { - p = QNetworkProxyFactory::systemProxyForQuery().first(); - } - if (p.type() == QNetworkProxy::Socks5Proxy) + if (accessManager.proxy().type() == QNetworkProxy::Socks5Proxy) { DEBUG(MODULE_NETWORK, "Adding HostNameLookupCapability to proxy.") - p.setCapabilities(accessManager.proxy().capabilities() | QNetworkProxy::HostNameLookupCapability); + accessManager.proxy().setCapabilities(accessManager.proxy().capabilities() | QNetworkProxy::HostNameLookupCapability); } - accessManager.setProxy(p); request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); request.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, true); auto ua = GlobalConfig.networkConfig.userAgent; ua.replace("$VERSION", QV2RAY_VERSION_STRING); request.setHeader(QNetworkRequest::KnownHeaders::UserAgentHeader, ua); - reply = accessManager.get(request); + } + + QByteArray QvHttpRequestHelper::Get(const QString &url) + { + request.setUrl({ url }); + setAccessManagerAttributes(accessManager); + auto _reply = accessManager.get(request); // QEventLoop loop; - connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); + connect(_reply, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); // // Data or timeout? - auto data = reply->readAll(); + auto data = _reply->readAll(); return data; } void QvHttpRequestHelper::AsyncGet(const QString &url) { request.setUrl({ url }); - if (GlobalConfig.networkConfig.useCustomProxy) - { - QNetworkProxy p{ - GlobalConfig.networkConfig.type == "http" ? QNetworkProxy::HttpProxy : QNetworkProxy::Socks5Proxy, // - GlobalConfig.networkConfig.address, // - quint16(GlobalConfig.networkConfig.port) // - }; - accessManager.setProxy(p); - } - else - { - DEBUG(MODULE_NETWORK, "Get without proxy.") - accessManager.setProxy(QNetworkProxy(QNetworkProxy::ProxyType::NoProxy)); - } - if (accessManager.proxy().type() == QNetworkProxy::Socks5Proxy) - { - DEBUG(MODULE_NETWORK, "Adding HostNameLookupCapability to proxy.") - accessManager.proxy().setCapabilities(accessManager.proxy().capabilities() | QNetworkProxy::HostNameLookupCapability); - } - request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); - request.setAttribute(QNetworkRequest::HTTP2AllowedAttribute, true); - request.setHeader(QNetworkRequest::KnownHeaders::UserAgentHeader, GlobalConfig.networkConfig.userAgent); + setAccessManagerAttributes(accessManager); reply = accessManager.get(request); connect(reply, &QNetworkReply::finished, this, &QvHttpRequestHelper::onRequestFinished_p); connect(reply, &QNetworkReply::readyRead, this, &QvHttpRequestHelper::onReadyRead_p); diff --git a/src/common/HTTPRequestHelper.hpp b/src/common/HTTPRequestHelper.hpp index d856f40b..ff2d675f 100644 --- a/src/common/HTTPRequestHelper.hpp +++ b/src/common/HTTPRequestHelper.hpp @@ -42,6 +42,7 @@ namespace Qv2ray::common void onReadyRead_p(); private: + void setAccessManagerAttributes(QNetworkAccessManager &accessManager); void setHeader(const QByteArray &key, const QByteArray &value); QByteArray data; QUrl url; diff --git a/src/ui/w_PreferencesWindow.cpp b/src/ui/w_PreferencesWindow.cpp index aba8d6c0..5b178e87 100644 --- a/src/ui/w_PreferencesWindow.cpp +++ b/src/ui/w_PreferencesWindow.cpp @@ -149,7 +149,24 @@ PreferencesWindow::PreferencesWindow(QWidget *parent) : QDialog(parent), Current qvProxyAddressTxt->setText(CurrentConfig.networkConfig.address); qvProxyTypeCombo->setCurrentText(CurrentConfig.networkConfig.type); qvNetworkUATxt->setText(CurrentConfig.networkConfig.userAgent); - customProxySettingsGroupBox->setChecked(CurrentConfig.networkConfig.useCustomProxy); + switch (CurrentConfig.networkConfig.proxyType) + { + case Qv2rayNetworkConfig::QVPROXY_NONE: + { + qvProxyNoProxy->setChecked(true); + break; + } + case Qv2rayNetworkConfig::QVPROXY_SYSTEM: + { + qvProxySystemProxy->setChecked(true); + break; + } + case Qv2rayNetworkConfig::QVPROXY_CUSTOM: + { + qvProxyCustomProxy->setChecked(true); + break; + } + } // quietModeCB->setChecked(CurrentConfig.uiConfig.quietMode); // @@ -1248,11 +1265,6 @@ void PreferencesWindow::on_tproxyListenAddr_textEdited(const QString &arg1) CurrentConfig.inboundConfig.tproxy_ip = arg1; } -void PreferencesWindow::on_customProxySettingsGroupBox_clicked(bool checked) -{ - CurrentConfig.networkConfig.useCustomProxy = checked; -} - void PreferencesWindow::on_jumpListCountSB_valueChanged(int arg1) { CurrentConfig.uiConfig.maxJumpListCount = arg1; @@ -1269,3 +1281,18 @@ void PreferencesWindow::on_dnsIntercept_toggled(bool checked) NEEDRESTART CurrentConfig.inboundConfig.dnsIntercept = checked; } + +void PreferencesWindow::on_qvProxyCustomProxy_clicked() +{ + CurrentConfig.networkConfig.proxyType = Qv2rayNetworkConfig::QVPROXY_CUSTOM; +} + +void PreferencesWindow::on_qvProxySystemProxy_clicked() +{ + CurrentConfig.networkConfig.proxyType = Qv2rayNetworkConfig::QVPROXY_SYSTEM; +} + +void PreferencesWindow::on_qvProxyNoProxy_clicked() +{ + CurrentConfig.networkConfig.proxyType = Qv2rayNetworkConfig::QVPROXY_NONE; +} diff --git a/src/ui/w_PreferencesWindow.hpp b/src/ui/w_PreferencesWindow.hpp index 5598d57d..40f6ed6b 100644 --- a/src/ui/w_PreferencesWindow.hpp +++ b/src/ui/w_PreferencesWindow.hpp @@ -190,14 +190,18 @@ class PreferencesWindow void on_tproxyListenAddr_textEdited(const QString &arg1); - void on_customProxySettingsGroupBox_clicked(bool checked); - void on_jumpListCountSB_valueChanged(int arg1); void on_outboundMark_valueChanged(int arg1); void on_dnsIntercept_toggled(bool checked); + void on_qvProxyCustomProxy_clicked(); + + void on_qvProxySystemProxy_clicked(); + + void on_qvProxyNoProxy_clicked(); + private: // RouteSettingsMatrixWidget *routeSettingsWidget; diff --git a/src/ui/w_PreferencesWindow.ui b/src/ui/w_PreferencesWindow.ui index 3a831893..805fd130 100644 --- a/src/ui/w_PreferencesWindow.ui +++ b/src/ui/w_PreferencesWindow.ui @@ -9,8 +9,8 @@ 0 0 - 756 - 572 + 864 + 614 @@ -273,7 +273,7 @@ Network Settings - + @@ -288,73 +288,93 @@ - - - - Use Custom Proxy Settings + + + + Qv2ray Proxy - - true - - - - - - Proxy Type - - - - - - - - http - - - - - socks - - - - - - - - Server - - - - - - - - - - - - : - - - Qt::AlignCenter - - - - - - - 0 - - - 65535 - - - - - - + + + + + + No Proxy + + + + + + + System Proxy + + + + + + + Custom Proxy + + + + + + + + + Curtom Proxy Type + + + + + + + + http + + + + + socks + + + + + + + + Curtom Proxy Server + + + + + + + + + + + + : + + + Qt::AlignCenter + + + + + + + 0 + + + 65535 + + + + + @@ -705,8 +725,8 @@ Custom DNS Settings 0 0 - 703 - 524 + 818 + 520