Andrew Eikum : wininet: Handle PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT per-connection flags.
Alexandre Julliard
julliard at winehq.org
Mon Jan 25 11:21:15 CST 2010
Module: wine
Branch: master
Commit: 0a84bd728a3d29097b6b101770de8a7ab92bb188
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0a84bd728a3d29097b6b101770de8a7ab92bb188
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Mon Jan 25 10:17:31 2010 -0600
wininet: Handle PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT per-connection flags.
---
dlls/wininet/internet.c | 13 ++----
dlls/wininet/tests/Makefile.in | 2 +-
dlls/wininet/tests/internet.c | 86 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 92 insertions(+), 9 deletions(-)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 78a0c4f..d03d1b3 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -2518,16 +2518,13 @@ BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption,
break;
case INTERNET_PER_CONN_FLAGS:
- switch(option->Value.dwValue) {
- case PROXY_TYPE_PROXY:
+ if(option->Value.dwValue & PROXY_TYPE_PROXY)
pi.dwProxyEnabled = 1;
- break;
- case PROXY_TYPE_DIRECT:
+ else
+ {
+ if(option->Value.dwValue != PROXY_TYPE_DIRECT)
+ FIXME("Unhandled flags: 0x%x\n", option->Value.dwValue);
pi.dwProxyEnabled = 0;
- break;
- default:
- FIXME("Unhandled flag: %d\n", option->Value.dwValue);
- break;
}
break;
diff --git a/dlls/wininet/tests/Makefile.in b/dlls/wininet/tests/Makefile.in
index ba8f662..6b313fd 100644
--- a/dlls/wininet/tests/Makefile.in
+++ b/dlls/wininet/tests/Makefile.in
@@ -3,7 +3,7 @@ TOPOBJDIR = ../../..
SRCDIR = @srcdir@
VPATH = @srcdir@
TESTDLL = wininet.dll
-IMPORTS = wininet ws2_32 kernel32
+IMPORTS = wininet ws2_32 advapi32 kernel32
CTESTS = \
ftp.c \
diff --git a/dlls/wininet/tests/internet.c b/dlls/wininet/tests/internet.c
index 8fd251a..9e010da 100644
--- a/dlls/wininet/tests/internet.c
+++ b/dlls/wininet/tests/internet.c
@@ -24,6 +24,7 @@
#include "winbase.h"
#include "wininet.h"
#include "winerror.h"
+#include "winreg.h"
#include "wine/test.h"
@@ -848,6 +849,30 @@ static void test_Option_Policy(void)
ok(ret == TRUE, "InternetCloseHandle failed: 0x%08x\n", GetLastError());
}
+#define verifyProxyEnable(e) r_verifyProxyEnable(__LINE__, e)
+static void r_verifyProxyEnable(LONG l, DWORD exp)
+{
+ HKEY hkey;
+ DWORD type, val, size = sizeof(DWORD);
+ LONG ret;
+ static const WCHAR szInternetSettings[] =
+ { 'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\',
+ 'W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
+ 'I','n','t','e','r','n','e','t',' ','S','e','t','t','i','n','g','s',0 };
+ static const WCHAR szProxyEnable[] = { 'P','r','o','x','y','E','n','a','b','l','e', 0 };
+
+ ret = RegOpenKeyW(HKEY_CURRENT_USER, szInternetSettings, &hkey);
+ ok_(__FILE__,l) (!ret, "RegOpenKeyW failed: 0x%08x\n", ret);
+
+ ret = RegQueryValueExW(hkey, szProxyEnable, 0, &type, (BYTE*)&val, &size);
+ ok_(__FILE__,l) (!ret, "RegQueryValueExW failed: 0x%08x\n", ret);
+ ok_(__FILE__,l) (type == REG_DWORD, "Expected regtype to be REG_DWORD, was: %d\n", type);
+ ok_(__FILE__,l) (val == exp, "Expected ProxyEnabled to be %d, got: %d\n", exp, val);
+
+ ret = RegCloseKey(hkey);
+ ok_(__FILE__,l) (!ret, "RegCloseKey failed: 0x%08x\n", ret);
+}
+
static void test_Option_PerConnectionOption(void)
{
BOOL ret;
@@ -900,6 +925,67 @@ static void test_Option_PerConnectionOption(void)
ok(list.pOptions[1].Value.dwValue == PROXY_TYPE_PROXY,
"Retrieved flags should've been PROXY_TYPE_PROXY, was: %d\n",
list.pOptions[1].Value.dwValue);
+ verifyProxyEnable(1);
+
+ HeapFree(GetProcessHeap(), 0, list.pOptions);
+
+ /* disable the proxy server */
+ list.dwOptionCount = 1;
+ list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
+
+ list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
+ list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT;
+
+ ret = InternetSetOptionW(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION,
+ &list, size);
+ ok(ret == TRUE, "InternetSetOption should've succeeded\n");
+
+ HeapFree(GetProcessHeap(), 0, list.pOptions);
+
+ /* verify that the proxy is disabled */
+ list.dwOptionCount = 1;
+ list.dwOptionError = 0;
+ list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
+
+ list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
+
+ ret = InternetQueryOptionW(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION,
+ &list, &size);
+ ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
+ ok(list.pOptions[0].Value.dwValue == PROXY_TYPE_DIRECT,
+ "Retrieved flags should've been PROXY_TYPE_DIRECT, was: %d\n",
+ list.pOptions[0].Value.dwValue);
+ verifyProxyEnable(0);
+
+ HeapFree(GetProcessHeap(), 0, list.pOptions);
+
+ /* set the proxy flags to 'invalid' value */
+ list.dwOptionCount = 1;
+ list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
+
+ list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
+ list.pOptions[0].Value.dwValue = PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT;
+
+ ret = InternetSetOptionW(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION,
+ &list, size);
+ ok(ret == TRUE, "InternetSetOption should've succeeded\n");
+
+ HeapFree(GetProcessHeap(), 0, list.pOptions);
+
+ /* verify that the proxy is enabled */
+ list.dwOptionCount = 1;
+ list.dwOptionError = 0;
+ list.pOptions = HeapAlloc(GetProcessHeap(), 0, sizeof(INTERNET_PER_CONN_OPTIONW));
+
+ list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
+
+ ret = InternetQueryOptionW(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION,
+ &list, &size);
+ ok(ret == TRUE, "InternetQueryOption should've succeeded\n");
+ todo_wine ok(list.pOptions[0].Value.dwValue == (PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT),
+ "Retrieved flags should've been PROXY_TYPE_PROXY | PROXY_TYPE_DIRECT, was: %d\n",
+ list.pOptions[0].Value.dwValue);
+ verifyProxyEnable(1);
HeapFree(GetProcessHeap(), 0, list.pOptions);
More information about the wine-cvs
mailing list