From a7489b2ba3f2f3ea28d6fff0c835c12b0666af45 Mon Sep 17 00:00:00 2001 From: Shane Kearns Date: Wed, 22 Feb 2012 20:11:28 +0000 Subject: 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 --- src/network/kernel/qnetworkproxy_win.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src/network/kernel/qnetworkproxy_win.cpp') diff --git a/src/network/kernel/qnetworkproxy_win.cpp b/src/network/kernel/qnetworkproxy_win.cpp index 33ae4a6a14..37c0cc4838 100644 --- a/src/network/kernel/qnetworkproxy_win.cpp +++ b/src/network/kernel/qnetworkproxy_win.cpp @@ -179,38 +179,45 @@ static QList 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: // ([=]["://"][":"]) + // The first scheme relates to the protocol tag + // The second scheme, if present, overrides the proxy type QList 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); -- cgit v1.2.3