| /* | |
| * Copyright 2016 Hans Leidekker for CodeWeavers | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA | |
| */ | |
| #include <stdarg.h> | |
| #include <stdlib.h> | |
| #include <windef.h> | |
| #include <winbase.h> | |
| #include <wininet.h> | |
| #include "wine/test.h" | |
| static BOOL (WINAPI *pInternetInitializeAutoProxyDll) | |
| (DWORD, LPSTR, LPSTR, AutoProxyHelperFunctions *, AUTO_PROXY_SCRIPT_BUFFER *); | |
| static BOOL (WINAPI *pInternetDeInitializeAutoProxyDll)(LPSTR, DWORD); | |
| static BOOL (WINAPI *pInternetGetProxyInfo)(LPCSTR, DWORD, LPSTR, DWORD, LPSTR *, LPDWORD); | |
| static void test_InternetInitializeAutoProxyDll(void) | |
| { | |
| const char url[] = "http://localhost"; | |
| char script[] = "function FindProxyForURL(url, host) {return \"DIRECT\";}\0test"; | |
| char script2[] = "function FindProxyForURL(url, host) {return \"PROXY 10.0.0.1:8080\";}\0test"; | |
| char *proxy, host[] = "localhost"; | |
| AUTO_PROXY_SCRIPT_BUFFER buf; | |
| DWORD err, len; | |
| BOOL ret; | |
| buf.dwStructSize = sizeof(buf); | |
| buf.lpszScriptBuffer = script; | |
| buf.dwScriptBufferSize = 0; | |
| SetLastError( 0xdeadbeef ); | |
| ret = pInternetInitializeAutoProxyDll( 0, NULL, NULL, NULL, &buf ); | |
| err = GetLastError(); | |
| ok( !ret, "unexpected success\n" ); | |
| ok( err == ERROR_INVALID_PARAMETER, "got %u\n", err ); | |
| buf.dwScriptBufferSize = strlen(script) + 1; | |
| ret = pInternetInitializeAutoProxyDll( 0, NULL, NULL, NULL, &buf ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ret = pInternetGetProxyInfo( url, strlen(url), host, strlen(host), &proxy, &len ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ok( !strcmp( proxy, "DIRECT" ), "got \"%s\"\n", proxy ); | |
| GlobalFree( proxy ); | |
| buf.dwScriptBufferSize = strlen(script2) + 1; | |
| buf.lpszScriptBuffer = script2; | |
| ret = pInternetInitializeAutoProxyDll( 0, NULL, NULL, NULL, &buf ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ret = pInternetGetProxyInfo( url, strlen(url), host, strlen(host), &proxy, &len ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ok( !strcmp( proxy, "PROXY 10.0.0.1:8080" ), "got \"%s\"\n", proxy ); | |
| GlobalFree( proxy ); | |
| buf.dwScriptBufferSize = strlen(script2) + 2; | |
| ret = pInternetInitializeAutoProxyDll( 0, NULL, NULL, NULL, &buf ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ret = pInternetGetProxyInfo( url, strlen(url), host, strlen(host), &proxy, &len ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ok( !strcmp( proxy, "PROXY 10.0.0.1:8080" ), "got \"%s\"\n", proxy ); | |
| GlobalFree( proxy ); | |
| ret = pInternetDeInitializeAutoProxyDll( NULL, 0 ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| } | |
| static void test_InternetGetProxyInfo(void) | |
| { | |
| const char url[] = "http://localhost"; | |
| char script[] = "function FindProxyForURL(url, host) { return \"DIRECT\"; }"; | |
| char *proxy, host[] = "localhost"; | |
| AUTO_PROXY_SCRIPT_BUFFER buf; | |
| DWORD len, err; | |
| BOOL ret; | |
| SetLastError( 0xdeadbeef ); | |
| ret = pInternetGetProxyInfo( url, strlen(url), host, strlen(host), &proxy, &len ); | |
| err = GetLastError(); | |
| ok( !ret, "unexpected success\n" ); | |
| ok( err == ERROR_CAN_NOT_COMPLETE, "got %u\n", err ); | |
| buf.dwStructSize = sizeof(buf); | |
| buf.lpszScriptBuffer = script; | |
| buf.dwScriptBufferSize = strlen(script) + 1; | |
| ret = pInternetInitializeAutoProxyDll( 0, NULL, NULL, NULL, &buf ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| len = 0; | |
| proxy = NULL; | |
| ret = pInternetGetProxyInfo( url, strlen(url), host, strlen(host), &proxy, &len ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ok( !strcmp( proxy, "DIRECT" ), "got \"%s\"\n", proxy ); | |
| ok( len == strlen("DIRECT") + 1, "got %u\n", len ); | |
| GlobalFree( proxy ); | |
| len = 0; | |
| proxy = NULL; | |
| ret = pInternetGetProxyInfo( url, strlen(url) + 1, host, strlen(host), &proxy, &len ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ok( !strcmp( proxy, "DIRECT" ), "got \"%s\"\n", proxy ); | |
| ok( len == strlen("DIRECT") + 1, "got %u\n", len ); | |
| GlobalFree( proxy ); | |
| len = 0; | |
| proxy = NULL; | |
| ret = pInternetGetProxyInfo( url, strlen(url) - 1, host, strlen(host), &proxy, &len ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ok( !strcmp( proxy, "DIRECT" ), "got \"%s\"\n", proxy ); | |
| ok( len == strlen("DIRECT") + 1, "got %u\n", len ); | |
| GlobalFree( proxy ); | |
| len = 0; | |
| proxy = NULL; | |
| ret = pInternetGetProxyInfo( url, strlen(url), host, strlen(host) + 1, &proxy, &len ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| ok( !strcmp( proxy, "DIRECT" ), "got \"%s\"\n", proxy ); | |
| ok( len == strlen("DIRECT") + 1, "got %u\n", len ); | |
| GlobalFree( proxy ); | |
| ret = pInternetDeInitializeAutoProxyDll( NULL, 0 ); | |
| ok( ret, "got %u\n", GetLastError() ); | |
| } | |
| START_TEST(jsproxy) | |
| { | |
| HMODULE module = LoadLibraryA( "jsproxy.dll" ); | |
| pInternetInitializeAutoProxyDll = (void *)GetProcAddress( module, "InternetInitializeAutoProxyDll" ); | |
| pInternetDeInitializeAutoProxyDll = (void *)GetProcAddress( module, "InternetDeInitializeAutoProxyDll" ); | |
| pInternetGetProxyInfo = (void *)GetProcAddress( module, "InternetGetProxyInfo" ); | |
| if (!pInternetInitializeAutoProxyDll) | |
| { | |
| win_skip( "InternetInitializeAutoProxyDll not available\n" ); | |
| return; | |
| } | |
| test_InternetInitializeAutoProxyDll(); | |
| test_InternetGetProxyInfo(); | |
| } |