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