From b22d290a37903f2c5ecfe58e8183cd293ead99dc Mon Sep 17 00:00:00 2001 From: Arvid Ephraim Picciani Date: Mon, 24 Oct 2011 16:41:44 +0200 Subject: QNAM: make systemProxyForQuery respect http_proxy the generic systemProxyForQuery will use http_proxy from the environment, if it is set. Change-Id: Ie685c47eb6df1fdd2ab223defc7172bb25e6fe30 Reviewed-by: Thiago Macieira (Intel) --- src/network/kernel/qnetworkproxy_generic.cpp | 31 ++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'src/network/kernel') diff --git a/src/network/kernel/qnetworkproxy_generic.cpp b/src/network/kernel/qnetworkproxy_generic.cpp index e9eaee9292..f78f63d561 100644 --- a/src/network/kernel/qnetworkproxy_generic.cpp +++ b/src/network/kernel/qnetworkproxy_generic.cpp @@ -41,17 +41,44 @@ #include "qnetworkproxy.h" +#include +#include + #ifndef QT_NO_NETWORKPROXY /* - * No system proxy. Just return a list with NoProxy. + * Construct a proxy from the environment variable http_proxy. + * Or no system proxy. Just return a list with NoProxy. */ QT_BEGIN_NAMESPACE QList QNetworkProxyFactory::systemProxyForQuery(const QNetworkProxyQuery &) { - return QList() << QNetworkProxy::NoProxy; + QList proxyList; + + QByteArray proxy_env = qgetenv("http_proxy"); + if (!proxy_env.isEmpty()) { + QUrl url = QUrl(QString::fromLocal8Bit(proxy_env)); + if (url.scheme() == QLatin1String("socks5")) { + QNetworkProxy proxy(QNetworkProxy::Socks5Proxy, url.host(), + url.port() ? url.port() : 1080, url.userName(), url.password()); + proxyList << proxy; + } else if (url.scheme() == QLatin1String("socks5h")) { + QNetworkProxy proxy(QNetworkProxy::Socks5Proxy, url.host(), + url.port() ? url.port() : 1080, url.userName(), url.password()); + proxy.setCapabilities(QNetworkProxy::HostNameLookupCapability); + proxyList << proxy; + } else if (url.scheme() == QLatin1String("http") || url.scheme().isEmpty()) { + QNetworkProxy proxy(QNetworkProxy::HttpProxy, url.host(), + url.port() ? url.port() : 8080, url.userName(), url.password()); + proxyList << proxy; + } + } + if (proxyList.isEmpty()) + proxyList << QNetworkProxy::NoProxy; + + return proxyList; } QT_END_NAMESPACE -- cgit v1.2.3