diff options
author | Shane Kearns <ext-shane.2.kearns@nokia.com> | 2012-02-22 20:11:28 (GMT) |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-03-09 16:15:35 (GMT) |
commit | 43d0891343e6d6ad9cf137dca7dba0e63d2e1851 (patch) | |
tree | b595b72d292e076619a6385087e24fa865a6ce73 /src/network | |
parent | 70545d13e2f97b84e84cab17610209cfc45fc410 (diff) | |
download | Qt-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.cpp | 23 |
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); |