Windows - fall back on static proxy config if autoproxy fails
authorShane Kearns <ext-shane.2.kearns@nokia.com>
Wed, 22 Feb 2012 21:20:46 +0000 (21:20 +0000)
committerQt by Nokia <qt-info@nokia.com>
Thu, 8 Mar 2012 04:31:40 +0000 (05:31 +0100)
If both manual proxy settings are configured and the autodetect
setting is enabled, fall back on the manual configuration when
auto detection fails.

Task-number: QTBUG-10428
Change-Id: If008c7c967eec6256ce3c614fff0ec258190d451
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Reviewed-by: Shane Kearns <shane.kearns@accenture.com>
src/network/kernel/qnetworkproxy_win.cpp

index 324f3cc..81d37ca 100644 (file)
@@ -313,14 +313,27 @@ void QWindowsSystemProxy::init()
             proxyBypass = splitSpaceSemicolon(QString::fromWCharArray(ieProxyConfig.lpszProxyBypass));
             GlobalFree(ieProxyConfig.lpszProxyBypass);
         }
+    } else {
+        // no user configuration
+        // attempt to get the default configuration instead
+        WINHTTP_PROXY_INFO proxyInfo;
+        if (ptrWinHttpGetDefaultProxyConfiguration(&proxyInfo) &&
+            proxyInfo.dwAccessType == WINHTTP_ACCESS_TYPE_NAMED_PROXY) {
+            // we got information from the registry
+            // overwrite the IE configuration, if any
+
+            proxyBypass = splitSpaceSemicolon(QString::fromWCharArray(proxyInfo.lpszProxyBypass));
+            proxyServerList = splitSpaceSemicolon(QString::fromWCharArray(proxyInfo.lpszProxy));
+        }
+
+        if (proxyInfo.lpszProxy)
+            GlobalFree(proxyInfo.lpszProxy);
+        if (proxyInfo.lpszProxyBypass)
+            GlobalFree(proxyInfo.lpszProxyBypass);
     }
 
     hHttpSession = NULL;
     if (ieProxyConfig.fAutoDetect || !autoConfigUrl.isEmpty()) {
-        // using proxy autoconfiguration
-        proxyServerList.clear();
-        proxyBypass.clear();
-
         // open the handle and obtain the options
         hHttpSession = ptrWinHttpOpen(L"Qt System Proxy access/1.0",
                                       WINHTTP_ACCESS_TYPE_NO_PROXY,
@@ -341,23 +354,6 @@ void QWindowsSystemProxy::init()
             autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
             autoProxyOptions.lpszAutoConfigUrl = (LPCWSTR)autoConfigUrl.utf16();
         }
-    } else {
-        // not auto-detected
-        // attempt to get the static configuration instead
-        WINHTTP_PROXY_INFO proxyInfo;
-        if (ptrWinHttpGetDefaultProxyConfiguration(&proxyInfo) &&
-            proxyInfo.dwAccessType == WINHTTP_ACCESS_TYPE_NAMED_PROXY) {
-            // we got information from the registry
-            // overwrite the IE configuration, if any
-
-            proxyBypass = splitSpaceSemicolon(QString::fromWCharArray(proxyInfo.lpszProxyBypass));
-            proxyServerList = splitSpaceSemicolon(QString::fromWCharArray(proxyInfo.lpszProxy));
-        }
-
-        if (proxyInfo.lpszProxy)
-            GlobalFree(proxyInfo.lpszProxy);
-        if (proxyInfo.lpszProxyBypass)
-            GlobalFree(proxyInfo.lpszProxyBypass);
     }
 
     functional = isAutoConfig || !proxyServerList.isEmpty();
@@ -431,8 +427,6 @@ QList<QNetworkProxy> QNetworkProxyFactory::systemProxyForQuery(const QNetworkPro
             //Don't search for it next time again.
             sp->isAutoConfig = false;
         }
-
-        return sp->defaultResult;
     }
 
     // static configuration