Hans Leidekker : wininet: Add support for retrieving the proxy automatic configuration URL on Mac OS X.
Alexandre Julliard
julliard at winehq.org
Tue May 6 13:37:12 CDT 2014
Module: wine
Branch: master
Commit: 89d40b3de103e1cf785e4606f000f8f85957073e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=89d40b3de103e1cf785e4606f000f8f85957073e
Author: Hans Leidekker <hans at codeweavers.com>
Date: Tue May 6 11:33:18 2014 +0200
wininet: Add support for retrieving the proxy automatic configuration URL on Mac OS X.
---
dlls/wininet/Makefile.in | 2 +-
dlls/wininet/internet.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 1 deletion(-)
diff --git a/dlls/wininet/Makefile.in b/dlls/wininet/Makefile.in
index f7b8e89..357b924 100644
--- a/dlls/wininet/Makefile.in
+++ b/dlls/wininet/Makefile.in
@@ -3,7 +3,7 @@ MODULE = wininet.dll
IMPORTLIB = wininet
IMPORTS = mpr shlwapi shell32 user32 advapi32
DELAYIMPORTS = secur32 crypt32 cryptui
-EXTRALIBS = $(SOCKET_LIBS) $(Z_LIBS)
+EXTRALIBS = $(CORESERVICES_LIBS) $(SOCKET_LIBS) $(Z_LIBS)
C_SRCS = \
cookie.c \
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 30e8f60..8ea2803 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -56,6 +56,15 @@
#endif
#include <assert.h>
+#ifdef HAVE_CORESERVICES_CORESERVICES_H
+#define GetCurrentThread MacGetCurrentThread
+#define LoadResource MacLoadResource
+#include <CoreServices/CoreServices.h>
+#undef GetCurrentThread
+#undef LoadResource
+#undef DPRINTF
+#endif
+
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
@@ -2389,6 +2398,33 @@ BOOL WINAPI InternetReadFileExW(HINTERNET hFile, LPINTERNET_BUFFERSW lpBuffer,
return res == ERROR_SUCCESS;
}
+static BOOL get_proxy_autoconfig_url( char *buf, DWORD buflen )
+{
+#ifdef HAVE_CORESERVICES_CORESERVICES_H
+ CFDictionaryRef settings = CFNetworkCopySystemProxySettings();
+ const void *ref;
+ BOOL ret = FALSE;
+
+ if (!settings) return FALSE;
+
+ if (!(ref = CFDictionaryGetValue( settings, kCFNetworkProxiesProxyAutoConfigURLString )))
+ {
+ CFRelease( settings );
+ return FALSE;
+ }
+ if (CFStringGetCString( ref, buf, buflen, kCFStringEncodingASCII ))
+ {
+ TRACE( "returning %s\n", debugstr_a(buf) );
+ ret = TRUE;
+ }
+ CFRelease( settings );
+ return ret;
+#else
+ FIXME( "no support on this platform\n" );
+ return FALSE;
+#endif
+}
+
static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL unicode)
{
/* FIXME: This function currently handles more options than it should. Options requiring
@@ -2472,16 +2508,20 @@ static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL u
}
case INTERNET_OPTION_PER_CONNECTION_OPTION: {
+ char url[INTERNET_MAX_URL_LENGTH + 1];
INTERNET_PER_CONN_OPTION_LISTW *con = buffer;
INTERNET_PER_CONN_OPTION_LISTA *conA = buffer;
DWORD res = ERROR_SUCCESS, i;
proxyinfo_t pi;
+ BOOL have_url;
LONG ret;
TRACE("Getting global proxy info\n");
if((ret = INTERNET_LoadProxySettings(&pi)))
return ret;
+ have_url = get_proxy_autoconfig_url(url, sizeof(url));
+
FIXME("INTERNET_OPTION_PER_CONNECTION_OPTION stub\n");
if (*size < sizeof(INTERNET_PER_CONN_OPTION_LISTW)) {
@@ -2499,6 +2539,9 @@ static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL u
optionW->Value.dwValue = PROXY_TYPE_PROXY;
else
optionW->Value.dwValue = PROXY_TYPE_DIRECT;
+ if (have_url)
+ /* native includes PROXY_TYPE_DIRECT even if PROXY_TYPE_PROXY is set */
+ optionW->Value.dwValue |= PROXY_TYPE_DIRECT|PROXY_TYPE_AUTO_PROXY_URL;
break;
case INTERNET_PER_CONN_PROXY_SERVER:
@@ -2516,7 +2559,18 @@ static DWORD query_global_option(DWORD option, void *buffer, DWORD *size, BOOL u
break;
case INTERNET_PER_CONN_AUTOCONFIG_URL:
+ if (!have_url)
+ optionW->Value.pszValue = NULL;
+ else if (unicode)
+ optionW->Value.pszValue = heap_strdupAtoW(url);
+ else
+ optionA->Value.pszValue = heap_strdupA(url);
+ break;
+
case INTERNET_PER_CONN_AUTODISCOVERY_FLAGS:
+ optionW->Value.dwValue = AUTO_PROXY_FLAG_ALWAYS_DETECT;
+ break;
+
case INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL:
case INTERNET_PER_CONN_AUTOCONFIG_RELOAD_DELAY_MINS:
case INTERNET_PER_CONN_AUTOCONFIG_LAST_DETECT_TIME:
More information about the wine-cvs
mailing list