summaryrefslogtreecommitdiffstats
path: root/src/network
diff options
context:
space:
mode:
authorShane Kearns <ext-shane.2.kearns@nokia.com>2012-02-22 20:11:28 (GMT)
committerQt by Nokia <qt-info@nokia.com>2012-03-09 16:15:35 (GMT)
commit43d0891343e6d6ad9cf137dca7dba0e63d2e1851 (patch)
treeb595b72d292e076619a6385087e24fa865a6ce73 /src/network
parent70545d13e2f97b84e84cab17610209cfc45fc410 (diff)
downloadQt-43d0891343e6d6ad9cf137dca7dba0e63d2e1851.zip
Qt-43d0891343e6d6ad9cf137dca7dba0e63d2e1851.tar.gz
Qt-43d0891343e6d6ad9cf137dca7dba0e63d2e1851.tar.bz2
Windows - fix proxy types for manually specified proxies
When the windows internet options are used to specify a different proxy for each protocol, assume the proxy server type matches that protocol too. e.g. "socks=qt-test-server:1080" is both tagged for socks, and assumed to be a socks server. "ftp=qt-test-server:2121" is assumed to be an ftp proxy "ftp=http://qt-test-server:3128" is overridden to be a http proxy used for ftp. Task-number: QTBUG-10502 Change-Id: I70615c89d6ede53f0e7d62e6d0754b90d042aa2e Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit a7489b2ba3f2f3ea28d6fff0c835c12b0666af45) Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
Diffstat (limited to 'src/network')
-rw-r--r--src/network/kernel/qnetworkproxy_win.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/network/kernel/qnetworkproxy_win.cpp b/src/network/kernel/qnetworkproxy_win.cpp
index 886a61c..43b9636 100644
--- a/src/network/kernel/qnetworkproxy_win.cpp
+++ b/src/network/kernel/qnetworkproxy_win.cpp
@@ -179,38 +179,45 @@ static QList<QNetworkProxy> parseServerList(const QNetworkProxyQuery &query, con
// According to the website, the proxy server list is
// one or more of the space- or semicolon-separated strings in the format:
// ([<scheme>=][<scheme>"://"]<server>[":"<port>])
+ // The first scheme relates to the protocol tag
+ // The second scheme, if present, overrides the proxy type
QList<QNetworkProxy> result;
foreach (const QString &entry, proxyList) {
int server = 0;
+ QNetworkProxy::ProxyType proxyType = QNetworkProxy::HttpProxy;
+ quint16 port = 8080;
+
int pos = entry.indexOf(QLatin1Char('='));
+ QStringRef scheme;
if (pos != -1) {
- QStringRef scheme = entry.leftRef(pos);
+ scheme = entry.leftRef(pos);
if (scheme != query.protocolTag())
continue;
server = pos + 1;
}
-
- QNetworkProxy::ProxyType proxyType = QNetworkProxy::HttpProxy;
- quint16 port = 8080;
-
pos = entry.indexOf(QLatin1String("://"), server);
if (pos != -1) {
- QStringRef scheme = entry.midRef(server, pos - server);
+ scheme = entry.midRef(server, pos - server);
+ server = pos + 3;
+ }
+
+ if (!scheme.isEmpty()) {
if (scheme == QLatin1String("http") || scheme == QLatin1String("https")) {
// no-op
// defaults are above
} else if (scheme == QLatin1String("socks") || scheme == QLatin1String("socks5")) {
proxyType = QNetworkProxy::Socks5Proxy;
port = 1080;
+ } else if (scheme == QLatin1String("ftp")) {
+ proxyType = QNetworkProxy::FtpCachingProxy;
+ port = 2121;
} else {
// unknown proxy type
continue;
}
-
- server = pos + 3;
}
pos = entry.indexOf(QLatin1Char(':'), server);