51#define NO_SHLWAPI_STREAM
80 0, 0, { (
DWORD_PTR)(__FILE__
": WININET_cs") }
101 L"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
142 ERR(
"handle isn't free but should be\n");
162 ret->lpfnStatusCB =
parent->lpfnStatusCB;
172 TRACE(
"%p -> refcount = %d\n",
info, refs );
197 if(!
info->valid_handle)
204 TRACE(
"invalidating child handle %p for parent %p\n",
child->hInternet,
info);
214 TRACE(
"object %p refcount = %d\n",
info, refs );
218 if (
info->vtbl->CloseConnection )
221 info->vtbl->CloseConnection(
info );
236 if(
info->hInternet) {
463 DWORD dwAutoProxyUrlLength,
DWORD dwDetectFlags)
542 const WCHAR *envproxy;
545 memset( lpwpi, 0,
sizeof(*lpwpi) );
600 lpwpi->
proxy = szProxy;
607 TRACE(
"No proxy server settings in registry.\n");
624 WARN(
"failed to parse http_proxy value %s\n",
debugstr_w(envproxy));
633 TRACE(
"Proxy is enabled.\n");
635 if (!(envproxy =
_wgetenv(
L"no_proxy" )))
659 TRACE(
"No proxy bypass server settings in registry.\n");
679 else TRACE(
"Proxy is disabled.\n");
723#define FE(x) { x, #x }
794 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
806 TRACE(
"INTERNET_OPTION_USER_AGENT\n");
850 DWORD proxyBytesRequired = 0, proxyBypassBytesRequired = 0;
867 pi->lpszProxyBypass =
NULL;
875 pi->lpszProxyBypass = proxy_bypass;
882 DWORD proxyBytesRequired = 0, proxyBypassBytesRequired = 0;
900 pi->lpszProxyBypass =
NULL;
908 proxyBypassBytesRequired,
NULL,
NULL);
909 pi->lpszProxyBypass = proxy_bypass;
917 TRACE(
"INTERNET_OPTION_CONNECT_TIMEOUT\n");
937 TRACE(
"INTERNET_OPTION_CONNECT_TIMEOUT\n");
951 FIXME(
"INTERNET_OPTION_REFRESH\n");
988#define FE(x) { x, #x }
997 const char *access_type_str =
"Unknown";
1002 if (access_type[
i].
val == dwAccessType) {
1003 access_type_str = access_type[
i].
name;
1007 TRACE(
" access type : %s\n", access_type_str);
1041 TRACE(
"returning %p\n", lpwai);
1060 WCHAR *szAgent, *szProxy, *szBypass;
1201 TRACE(
"(%p, %p, %d, 0x%08x)\n", lpdwStatus, lpszConnectionName, dwNameLen,
dwReserved);
1208 WARN(
"always returning LAN connection.\n");
1214 if(lpszConnectionName && dwNameLen) {
1215 *lpszConnectionName =
'\0';
1232 TRACE(
"(%p, %p, %d, 0x%08x)\n", lpdwStatus, lpszConnectionName, dwNameLen,
dwReserved);
1234 if (lpszConnectionName && dwNameLen > 0)
1239 if (rc && lpwszConnectionName)
1267 TRACE(
"(%p, %s, %u, %s, %p, %u, %x, %lx)\n", hInternet,
debugstr_w(lpszServerName),
1270 if (!lpszServerName)
1286 rc =
FTP_Connect(hIC, lpszServerName, nServerPort,
1305 TRACE(
"returning %p\n", rc);
1336 szUserName, szPassword, dwService,
dwFlags, dwContext);
1385 WARN(
"Invalid handle\n");
1390 if(
hdr->vtbl->FindNextFileW) {
1391 res =
hdr->vtbl->FindNextFileW(
hdr, lpvFindData);
1393 WARN(
"Handle doesn't support NextFile\n");
1418 TRACE(
"%p\n", hInternet);
1436 if (!*component_length)
1441 *component_length =
len;
1445 if (*component_length <
len+1) {
1450 *component_length =
len;
1453 (*component)[
len] = 0;
1460 size_t size, ret_size = *ret_length;
1472 if (
size+1 > ret_size) {
1474 *ret_length =
size+1;
1606 if(lpszScheme==
NULL)
1637 TRACE(
"(%s %u %x %p)\n",
1641 if (!lpszUrl || !*lpszUrl || !lpUC)
1646 if (!dwUrlLength) dwUrlLength =
lstrlenW(lpszUrl);
1683 while (lpszap - lpszUrl < dwUrlLength)
1685 if (
iswalnum(*lpszap) || *lpszap ==
'+' || *lpszap ==
'.' || *lpszap ==
'-')
1712 lpszParam =
wmemchr(lpszap,
'?', dwUrlLength - (lpszap - lpszUrl));
1714 lpszParam =
wmemchr(lpszap,
'#', dwUrlLength - (lpszap - lpszUrl));
1717 lpszParam, lpszParam ? dwUrlLength-(lpszParam-lpszUrl) : 0))
1730 if ((lpszcp[0] ==
'/') && (lpszcp[1] ==
'/'))
1734 lpszNetLoc =
wmemchr(lpszcp,
'/', dwUrlLength - (lpszcp - lpszUrl));
1738 lpszNetLoc =
min(lpszNetLoc, lpszParam);
1740 lpszNetLoc = lpszParam;
1742 else if (!lpszNetLoc)
1743 lpszNetLoc = lpszcp + dwUrlLength-(lpszcp-lpszUrl);
1754 lpszHost =
wmemchr(lpszcp,
'@', dwUrlLength - (lpszcp - lpszUrl));
1755 if (lpszHost ==
NULL || lpszHost > lpszNetLoc)
1764 LPCWSTR lpszPasswd = lpszHost;
1766 while (lpszcp < lpszHost)
1769 lpszPasswd = lpszcp;
1777 if (lpszPasswd != lpszHost)
1780 lpszPasswd == lpszHost ?
NULL : lpszPasswd, lpszHost - lpszPasswd))
1789 lpszPort = lpszNetLoc;
1801 while (lpszcp < lpszNetLoc)
1819 if (lpszPort != lpszNetLoc)
1851 if (lpszcp != 0 && lpszcp - lpszUrl < dwUrlLength && (!lpszParam || lpszcp <= lpszParam))
1859 len = lpszParam - lpszcp;
1865 LPWSTR lpsznewline =
wmemchr(lpszcp,
'\n', dwUrlLength - (lpszcp - lpszUrl));
1866 if (lpsznewline !=
NULL)
1867 len = lpsznewline - lpszcp;
1869 len = dwUrlLength-(lpszcp-lpszUrl);
1884 tmppath[
len] =
'\0';
1894 if (tmppath[
len - 1] ==
'.' &&
1895 (tmppath[
len - 2] ==
'\\' ||
1896 (tmppath[
len - 2] ==
'.' && tmppath[
len - 3] ==
'\\')))
1900 tmppath[
len] =
'\\';
1901 tmppath[
len+1] =
'\0';
1916 TRACE(
"%s: scheme(%s) host(%s) path(%s) extra(%s)\n",
debugstr_wn(lpszUrl,dwUrlLength),
1983 TRACE(
"(%s, %p, %p, 0x%08x) buffer length: %d\n",
debugstr_a(lpszUrl), lpszBuffer,
2009 TRACE(
"(%s, %p, %p, 0x%08x) buffer length: %d\n",
debugstr_w(lpszUrl), lpszBuffer,
2053 TRACE(
"%p\n", hInternet);
2081 TRACE(
"%p\n", hInternet);
2098 FIXME(
"(%p %d %p %d %lx): stub\n",
hFile, lDistanceToMove, pReserved, dwMoveContext, dwContext);
2115 DWORD dwNumOfBytesToWrite,
LPDWORD lpdwNumOfBytesWritten)
2120 TRACE(
"(%p %p %d %p)\n",
hFile,
lpBuffer, dwNumOfBytesToWrite, lpdwNumOfBytesWritten);
2124 WARN(
"Invalid handle\n");
2132 WARN(
"No Writefile method.\n");
2168 if(
hdr->vtbl->ReadFile) {
2169 res =
hdr->vtbl->ReadFile(
hdr,
lpBuffer, dwNumOfBytesToRead, pdwNumOfBytesRead, 0, 0);
2171 *pdwNumOfBytesRead = 0;
2177 pdwNumOfBytesRead ? *pdwNumOfBytesRead : -1);
2218 if (lpBuffersOut->
dwStructSize !=
sizeof(*lpBuffersOut)) {
2229 if(
hdr->vtbl->ReadFile)
2267 if(
hdr->vtbl->ReadFile)
2283 ULONG err,
size = 1024,
flags = GAA_FLAG_SKIP_ANYCAST | GAA_FLAG_SKIP_MULTICAST |
2285 IP_ADAPTER_ADDRESSES *tmp, *
ret;
2302 IP_ADAPTER_ADDRESSES *adapters, *
ptr;
2311 memset( &send_params, 0,
sizeof(send_params) );
2375 if (len_suffix > len_domain)
return FALSE;
2392 if (!ai)
return NULL;
2477 FIXME(
"INTERNET_OPTION_CONNECTED_STATE: semi-stub\n");
2491 TRACE(
"Getting global proxy info\n");
2501 TRACE(
"INTERNET_OPTION_MAX_CONNS_PER_SERVER\n");
2512 TRACE(
"INTERNET_OPTION_MAX_CONNS_1_0_SERVER\n");
2523 FIXME(
"INTERNET_OPTION_SECURITY_FLAGS: Stub\n");
2529 TRACE(
"INTERNET_OPTION_VERSION\n");
2548 TRACE(
"Getting global proxy info\n");
2553 WARN(
"INTERNET_OPTION_PER_CONNECTION_OPTION stub\n");
2555 FIXME(
"INTERNET_OPTION_PER_CONNECTION_OPTION stub\n");
2617 WARN(
"Unhandled dwOption %d\n",
optionW->dwOption);
2639 TRACE(
"INTERNET_OPTION_CONNECT_TIMEOUT\n");
2673 WARN(
"INTERNET_OPTION_REQUEST_FLAGS\n");
2679 WARN(
"Called on global option %u\n",
option);
2757 FIXME(
"INTERNETOPTION_SETTINGS_CHANGED semi-stub\n");
2765 WARN(
"Called on global option %u\n",
option);
2782 TRACE(
"INTERNET_OPTION_MAX_CONNS_PER_SERVER\n");
2793 TRACE(
"INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER\n");
2804 TRACE(
"INTERNET_OPTION_CONNECT_TIMEOUT\n");
2815 FIXME(
"INTERNET_OPTION_SUPPRESS_BEHAVIOR stub\n");
2844 TRACE(
"(%p %d %p %d)\n", hInternet, dwOption,
lpBuffer, dwBufferLength);
2880 }
else if(dwBufferLength !=
sizeof(
ULONG)) {
2924 FIXME(
"INTERNET_OPTION_PROXY unimplemented\n");
2933 FIXME(
"Option INTERNET_OPTION_CODEPAGE (%d): STUB\n",
codepage);
2939 FIXME(
"Option INTERNET_OPTION_REQUEST_PRIORITY (%d): STUB\n",
priority);
2945 FIXME(
"Option INTERNET_OPTION_CONNECT_TIMEOUT (%d): STUB\n", connecttimeout);
2951 FIXME(
"Option INTERNET_OPTION_DATA_RECEIVE_TIMEOUT (%d): STUB\n", receivetimeout);
2955 FIXME(
"Option INTERNET_OPTION_RESET_URLCACHE_SESSION: STUB\n");
2958 FIXME(
"Option INTERNET_OPTION_END_BROWSER_SESSION: semi-stub\n");
2963 FIXME(
"Option INTERNET_OPTION_CONNECTED_STATE: STUB\n");
2966 TRACE(
"Option INTERNET_OPTION_DISABLE_PASSPORT_AUTH: harmless stub, since not enabled\n");
2969 FIXME(
"Option INTERNET_OPTION_IGNORE_OFFLINE: STUB\n");
2976 FIXME(
"INTERNET_OPTION_SEND/RECEIVE_TIMEOUT/DATA_SEND_TIMEOUT %d\n",
timeout);
2982 FIXME(
"INTERNET_OPTION_CONNECT_RETRIES %d\n", retries);
3002 FIXME(
"Option INTERNET_OPTION_SECURITY_FLAGS; STUB\n");
3005 FIXME(
"Option INTERNET_OPTION_DISABLE_AUTODIAL; STUB\n");
3022 FIXME(
"INTERNET_OPTION_COOKIES_3RD_PARTY; STUB\n");
3027 FIXME(
"INTERNET_OPTION_SEND_UTF8_SERVERNAME_TO_PROXY; STUB\n");
3032 FIXME(
"INTERNET_OPTION_CODEPAGE_PATH; STUB\n");
3037 FIXME(
"INTERNET_OPTION_CODEPAGE_EXTRA; STUB\n");
3042 FIXME(
"INTERNET_OPTION_IDN; STUB\n");
3061 switch (
option->dwOption) {
3069 pi.proxyEnabled = 1;
3073 FIXME(
"Unhandled flags: 0x%x\n",
option->Value.dwValue);
3074 pi.proxyEnabled = 0;
3089 FIXME(
"Unhandled dwOption %d\n",
option->dwOption);
3108 FIXME(
"Option %d STUB\n",dwOption);
3144 DWORD proxlen, prbylen;
3149 wlen =
sizeof(*piw) + proxlen + prbylen;
3154 prby = &prox[proxlen+1];
3221 WARN(
"Unknown PER_CONN dwOption: %d, guessing at conversion to Wide\n", optA->
dwOption);
3230 wlen = dwBufferLength;
3241 for (
i = 0;
i <
list->dwOptionCount; ++
i) {
3290 {
L"Sun",
L"Mon",
L"Tue",
L"Wed",
3291 L"Thu",
L"Fri",
L"Sat"};
3293 {
L"Jan",
L"Feb",
L"Mar",
L"Apr",
3294 L"May",
L"Jun",
L"Jul",
L"Aug",
3295 L"Sep",
L"Oct",
L"Nov",
L"Dec"};
3344 swprintf(
string,
size,
L"%s, %02d %s %4d %02d:%02d:%02d GMT",
3396 if (
s[0] ==
'\0' ||
s[1] ==
'\0' ||
s[2] ==
'\0')
return TRUE;
3397 time->wDayOfWeek = 7;
3399 for (
i = 0;
i < 7;
i++)
3403 time->wDayOfWeek =
i;
3408 if (
time->wDayOfWeek > 6)
return TRUE;
3414 if (
s[0] ==
'\0' ||
s[1] ==
'\0' ||
s[2] ==
'\0')
return TRUE;
3417 for (
i = 0;
i < 12;
i++)
3421 time->wMonth =
i + 1;
3425 if (
time->wMonth == 0)
return TRUE;
3428 if (*
s ==
'\0')
return TRUE;
3433 if (*
s ==
'\0')
return TRUE;
3438 if (*
s ==
'\0')
return TRUE;
3443 if (*
s ==
'\0')
return TRUE;
3447 time->wMilliseconds = 0;
3470 static const CHAR ping[] =
"ping -c 1 ";
3471 static const CHAR redirect[] =
" >/dev/null 2>/dev/null";
3482 if (lpszUrl ==
NULL)
3491 FIXME(
"Unimplemented with URL of NULL\n");
3512 int sa_len =
sizeof(saddr);
3612 dwHeadersLength,
dwFlags, dwContext);
3636 switch(urlComponents.
nScheme) {
3643 if(client1 ==
NULL) {
3664 if(client1 ==
NULL) {
3684 TRACE(
" %p <--\n", client1);
3730 dwHeadersLength,
dwFlags, dwContext);
3861 if (!lpwite)
return 0;
3960 LPDWORD lpdwNumberOfBytesAvailable,
3966 TRACE(
"(%p %p %x %lx)\n",
hFile, lpdwNumberOfBytesAvailable,
dwFlags, dwContext);
3974 if(
hdr->vtbl->QueryDataAvailable) {
3975 res =
hdr->vtbl->QueryDataAvailable(
hdr, lpdwNumberOfBytesAvailable,
dwFlags, dwContext);
3977 WARN(
"wrong handle\n");
3992 req_file = heap_alloc_zero(
sizeof(*req_file));
4038 TRACE(
"(%p %p)\n", hInternet, lphLockReqHandle);
4046 if(
hdr->vtbl->LockRequestFile) {
4047 res =
hdr->vtbl->LockRequestFile(
hdr, &req_file);
4049 WARN(
"wrong handle\n");