Windows - fall back on static proxy config if autoproxy fails
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>
This commit is contained in:
parent
25c05ce3bb
commit
276f64d21d
@ -313,14 +313,27 @@ void QWindowsSystemProxy::init()
|
|||||||
proxyBypass = splitSpaceSemicolon(QString::fromWCharArray(ieProxyConfig.lpszProxyBypass));
|
proxyBypass = splitSpaceSemicolon(QString::fromWCharArray(ieProxyConfig.lpszProxyBypass));
|
||||||
GlobalFree(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;
|
hHttpSession = NULL;
|
||||||
if (ieProxyConfig.fAutoDetect || !autoConfigUrl.isEmpty()) {
|
if (ieProxyConfig.fAutoDetect || !autoConfigUrl.isEmpty()) {
|
||||||
// using proxy autoconfiguration
|
|
||||||
proxyServerList.clear();
|
|
||||||
proxyBypass.clear();
|
|
||||||
|
|
||||||
// open the handle and obtain the options
|
// open the handle and obtain the options
|
||||||
hHttpSession = ptrWinHttpOpen(L"Qt System Proxy access/1.0",
|
hHttpSession = ptrWinHttpOpen(L"Qt System Proxy access/1.0",
|
||||||
WINHTTP_ACCESS_TYPE_NO_PROXY,
|
WINHTTP_ACCESS_TYPE_NO_PROXY,
|
||||||
@ -341,23 +354,6 @@ void QWindowsSystemProxy::init()
|
|||||||
autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
|
autoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_CONFIG_URL;
|
||||||
autoProxyOptions.lpszAutoConfigUrl = (LPCWSTR)autoConfigUrl.utf16();
|
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();
|
functional = isAutoConfig || !proxyServerList.isEmpty();
|
||||||
@ -431,8 +427,6 @@ QList<QNetworkProxy> QNetworkProxyFactory::systemProxyForQuery(const QNetworkPro
|
|||||||
//Don't search for it next time again.
|
//Don't search for it next time again.
|
||||||
sp->isAutoConfig = false;
|
sp->isAutoConfig = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return sp->defaultResult;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// static configuration
|
// static configuration
|
||||||
|
Loading…
Reference in New Issue
Block a user