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