50#define NO_SHLWAPI_STREAM
67#define HTTP_ADDHDR_FLAG_ADD 0x20000000
68#define HTTP_ADDHDR_FLAG_ADD_IF_NEW 0x10000000
69#define HTTP_ADDHDR_FLAG_COALESCE_WITH_COMMA 0x40000000
70#define HTTP_ADDHDR_FLAG_COALESCE_WITH_SEMICOLON 0x01000000
71#define HTTP_ADDHDR_FLAG_REPLACE 0x80000000
72#define HTTP_ADDHDR_FLAG_REQ 0x02000000
74#define COLLECT_TIME 60000
122 0, 0, { (
DWORD_PTR)(__FILE__
": authcache_cs") }
142 0, 0, { (
DWORD_PTR)(__FILE__
": connection_pool_cs") }
177 size_t name_len,
len;
213 if(!
server && do_create) {
218 server->is_https = is_https;
271 BOOL remaining_conns;
284 }
while(remaining_conns);
298 if (HeaderIndex == -1)
338 CHUNKED_STREAM_STATE_ERROR
386 DWORD current_read, ret_read = 0;
390 TRACE(
"(%d %x)\n",
size, allow_blocking);
400 sizeof(gzip_stream->
buf)-gzip_stream->
buf_size, ¤t_read, allow_blocking);
404 gzip_stream->
buf_size += current_read;
406 WARN(
"unexpected end of data\n");
418 size -= current_read;
419 ret_read += current_read;
423 TRACE(
"end of data\n");
426 }
else if(zres !=
Z_OK) {
434 allow_blocking =
FALSE;
437 TRACE(
"read %u bytes\n", ret_read);
493 ERR(
"inflateInit failed: %d\n", zres);
590 req[
n++] =
request->custHeaders[
i].lpszField;
592 req[
n++] =
request->custHeaders[
i].lpszValue;
597 TRACE(
"Adding custom header %s (%s)\n",
610 return requestString;
643 req[
n++] =
request->custHeaders[
i].lpszField;
645 req[
n++] =
request->custHeaders[
i].lpszValue;
650 TRACE(
"Adding custom header %s (%s)\n",
681 if (tmp && tmp[1]) tmp[1] = 0;
690 setCookieHeader = &
request->custHeaders[HeaderIndex];
729 static const WCHAR szBasic[] = {
'B',
'a',
's',
'i',
'c'};
730 static const WCHAR szRealm[] = {
'r',
'e',
'a',
'l',
'm'};
734 if (is_basic && pszRealm)
745 while (*realm ==
' ')
751 while (*
token ==
' ')
792 TRACE(
"Authorization found in cache\n");
834 TRACE(
"Found match in cache, replacing\n");
849 TRACE(
"authorization cached\n");
864 TRACE(
"Authorization found in cache\n");
869 if(!nt_auth_identity->
User || !nt_auth_identity->
Password ||
1024 if (domain_and_username)
1031 pAuthData = &nt_auth_identity;
1036 user = domain_and_username;
1051 pAuthData = &nt_auth_identity;
1062 if(pAuthData && !domain_and_username) {
1080 WARN(
"AcquireCredentialsHandleW for scheme %s failed with error 0x%08x\n",
1087 *ppAuthInfo = pAuthInfo;
1095 ERR(
"authentication scheme changed from %s to %s\n",
1109 if (!domain_and_username)
1111 if (
host && szRealm)
1136 if (
host && szRealm)
1161 in_desc.pBuffers = &
in;
1164 if (*pszAuthData ==
' ')
1180 out_desc.pBuffers = &
out;
1186 in.pvBuffer ? &in_desc :
NULL,
1187 0, &pAuthInfo->
ctx, &out_desc,
1188 &pAuthInfo->
attr, &pAuthInfo->
exp);
1194 TRACE(
"sending last auth packet\n");
1200 TRACE(
"sending next auth packet\n");
1204 ERR(
"InitializeSecurityContextW returned error 0x%08x\n", sec_status);
1228 if( dwHeaderLength == ~0
U )
1231 len = dwHeaderLength;
1241 lpszEnd = lpszStart;
1243 while (*lpszEnd !=
'\0')
1245 if (*lpszEnd ==
'\r' || *lpszEnd ==
'\n')
1250 if (*lpszStart ==
'\0')
1253 if (*lpszEnd ==
'\r' || *lpszEnd ==
'\n')
1259 if (*lpszStart ==
'\0')
1262 lpszStart = lpszEnd;
1274 lpszStart = lpszEnd;
1303 TRACE(
"%p, %s, %u, %08x\n", hHttpRequest,
debugstr_wn(lpszHeader, dwHeaderLength), dwHeaderLength, dwModifier);
1335 TRACE(
"%p, %s, %u, %08x\n", hHttpRequest,
debugstr_an(lpszHeader, dwHeaderLength), dwHeaderLength, dwModifier);
1362 const char **
types = accept_types;
1381 WARN(
"invalid accept type pointer\n");
1382 invalid_pointer =
TRUE;
1387 if (invalid_pointer)
return NULL;
1390 types = accept_types;
1419 TRACE(
"(%p, %s, %s, %s, %s, %p, %08x, %08lx)\n", hHttpSession,
1434 if ( !szObjectName )
1471 static const CHAR HTTP_Base64Enc[] =
1472 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1477 base64[
n++] = HTTP_Base64Enc[(
bin[0] & 0xfc) >> 2];
1478 x = (
bin[0] & 3) << 4;
1483 base64[
n++] = HTTP_Base64Enc[
x];
1488 base64[
n++] = HTTP_Base64Enc[
x | ( (
bin[1]&0xf0) >> 4 ) ];
1489 x = (
bin[1] & 0x0f ) << 2;
1494 base64[
n++] = HTTP_Base64Enc[
x];
1498 base64[
n++] = HTTP_Base64Enc[
x | ( (
bin[2]&0xc0 ) >> 6 ) ];
1501 base64[
n++] = HTTP_Base64Enc[
bin[2] & 0x3f ];
1511 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1512 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1513 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
1514 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
1515 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1516 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
1517 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1518 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
1544 if ((base64[2] ==
'=') && (base64[3] ==
'='))
1556 if (base64[3] ==
'=')
1565 bin[
n] = (
unsigned char) (((
in[2] << 6) & 0xc0) |
in[3]);
1580 len = scheme_len + 1 + ((data_len + 2) * 4) / 3;
1583 ret[scheme_len] =
' ';
1664 if(*req->
path !=
'/')
1671 if(*req->
path !=
'/')
1717 return *(
ptr - 1) ==
'.';
1750 static WCHAR szNul[] =
L"";
1802 addr_len =
sizeof(
server->addr);
1806 server->addr_len = addr_len;
1837 if(req->
path[0] !=
'/')
1867 request->headers_section.DebugInfo->Spare[0] = 0;
1869 request->read_section.DebugInfo->Spare[0] = 0;
1954 WCHAR szConnectionResponse[20];
1966 dwBufferSize =
sizeof(szConnectionResponse);
1970 keepalive = !
wcsicmp(szConnectionResponse,
L"Keep-Alive");
2037 if(
info->lpszSubjectInfo)
2044 if(
info->lpszIssuerInfo)
2063 FIXME(
"INTERNET_DIAGNOSTIC_SOCKET_INFO stub\n");
2073 info->SourcePort = 0;
2087 TRACE(
"Queried undocumented option 98, forwarding to INTERNET_OPTION_SECURITY_FLAGS\n");
2100 TRACE(
"INTERNET_OPTION_SECURITY_FLAGS %x\n",
flags);
2105 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
2118 TRACE(
"INTERNET_OPTION_URL\n");
2145 TRACE(
"INTERNET_OPTION_CACHE_TIMESTAMPS\n");
2150 if (*
size <
sizeof(*ts))
2152 *
size =
sizeof(*ts);
2170 *
size =
sizeof(*ts);
2179 TRACE(
"INTERNET_OPTION_DATAFILE_NAME\n");
2188 if(*
size < req_size)
2196 if (req_size > *
size)
2222 char expiration[64];
2225 char encryption[64];
2229 char start_date[32];
2230 char start_time[32];
2231 char expiry_date[32];
2232 char expiry_time[32];
2261 strength,
sizeof(strength));
2279 subject,
info.lpszSubjectInfo,
2281 effective, start_date, start_time,
2282 expiration, expiry_date, expiry_time,
2284 privacy, strength,
info.dwKeySize,
bits);
2286 if(needed < *
size) {
2297 subject,
info.lpszSubjectInfo,
2299 effective, start_date, start_time,
2300 expiration, expiry_date, expiry_time,
2302 privacy, strength,
info.dwKeySize,
bits);
2338 TRACE(
"INTERNET_OPTION_REQUEST_FLAGS returning %x\n",
flags);
2345 TRACE(
"INTERNET_OPTION_ERROR_MASK\n");
2364 TRACE(
"Undocumented option 99\n");
2379 TRACE(
"INTERNET_OPTION_SECURITY_FLAGS %08x\n",
flags);
2474 if(header_idx != -1) {
2480 while(*
ptr==
' ' || *
ptr==
'\t')
2506 FIXME(
"INTERNET_FLAG_NEED_FILE is not supported correctly\n");
2511 WARN(
"Could not get URL\n");
2558 if (maxlen == -1) maxlen =
sizeof(req->
read_buf);
2588 bytes_read =
count + 1;
2600 WARN(
"read failed %u\n",
res );
2607 TRACE(
"returning empty string\n" );
2671 &
read, allow_blocking);
2758 switch(chunked_stream->
state) {
2759 case CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END:
2760 case CHUNKED_STREAM_STATE_END_OF_STREAM:
2761 case CHUNKED_STREAM_STATE_ERROR:
2782 BOOL blocking_read = allow_blocking;
2784 switch(chunked_stream->
state) {
2785 case CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END:
2786 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_SIZE:
2789 blocking_read =
FALSE;
2791 case CHUNKED_STREAM_STATE_READING_CHUNK_SIZE:
2792 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_DATA:
2798 if(ret_read || allow_blocking)
2800 continue_read =
FALSE;
2803 chunked_stream->
state = CHUNKED_STREAM_STATE_ERROR;
2811 switch(chunked_stream->
state) {
2812 case CHUNKED_STREAM_STATE_READING_CHUNK_SIZE:
2815 if(ch >=
'0' && ch <=
'9') {
2817 }
else if(ch >=
'a' && ch <=
'f') {
2819 }
else if (ch >=
'A' && ch <=
'F') {
2821 }
else if (ch ==
';' || ch ==
'\r' || ch ==
'\n') {
2827 chunked_stream->
state = CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_SIZE;
2831 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_SIZE:
2835 ? CHUNKED_STREAM_STATE_READING_CHUNK
2836 : CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END;
2838 WARN(
"unexpected char '%c'\n", ch);
2841 case CHUNKED_STREAM_STATE_READING_CHUNK:
2844 continue_read =
FALSE;
2860 continue_read =
FALSE;
2865 chunked_stream->
state = CHUNKED_STREAM_STATE_ERROR;
2874 chunked_stream->
state = CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_DATA;
2875 allow_blocking =
FALSE;
2878 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_DATA:
2881 chunked_stream->
state = CHUNKED_STREAM_STATE_READING_CHUNK_SIZE;
2883 WARN(
"unexpected char '%c'\n", ch);
2886 case CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END:
2889 chunked_stream->
state = CHUNKED_STREAM_STATE_END_OF_STREAM;
2891 WARN(
"unexpected char '%c'\n", ch);
2894 case CHUNKED_STREAM_STATE_END_OF_STREAM:
2895 case CHUNKED_STREAM_STATE_ERROR:
2896 continue_read =
FALSE;
2899 }
while(continue_read);
2906 TRACE(
"read %d bytes\n", ret_read);
2917 while(chunked_stream->
state != CHUNKED_STREAM_STATE_END_OF_STREAM
2918 && chunked_stream->
state != CHUNKED_STREAM_STATE_ERROR) {
2924 if(chunked_stream->
state != CHUNKED_STREAM_STATE_END_OF_STREAM)
2945 WCHAR contentLength[32];
2954 size =
sizeof(contentLength);
2970 chunked_stream =
heap_alloc(
sizeof(*chunked_stream));
2977 chunked_stream->
state = CHUNKED_STREAM_STATE_READING_CHUNK_SIZE;
2995 if(encoding_idx != -1) {
3001 if(!
wcsicmp(
request->custHeaders[encoding_idx].lpszValue,
L"deflate")) {
3040 WARN(
"res %u read %u, closing connection\n",
res,
read);
3055 DWORD current_read = 0, ret_read = 0;
3065 allow_blocking =
FALSE;
3068 if(ret_read <
size) {
3071 ret_read += current_read;
3079 TRACE(
"retrieved %u bytes (res %u)\n", ret_read,
res );
3127 while (read < task->
size) {
3139 complete_arg =
read;
3179 BOOL allow_blocking, notify_received =
FALSE;
3207 notify_received =
TRUE;
3255 request->bytesWritten += *written;
3265 BOOL allow_blocking, notify_received =
FALSE;
3289 notify_received =
TRUE;
3321 TRACE(
"(%p)\n", req);
3324 WARN(
"No cache file name available\n");
3382 request->headers_section.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": http_request_t.headers_section");
3385 request->read_section.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": http_request_t.read_section");
3407 if (lpszObjectName && *lpszObjectName) {
3420 ERR(
"Unable to escape string!(%s) (%d)\n",
debugstr_w(lpszObjectName),rc);
3427 if (lpszReferrer && *lpszReferrer)
3430 if (lpszAcceptTypes)
3433 for (
i = 0; lpszAcceptTypes[
i];
i++)
3435 if (!*lpszAcceptTypes[
i])
continue;
3478 TRACE(
"(%p, %s, %s, %s, %s, %p, %08x, %08lx)\n", hHttpSession,
3482 if(lpszAcceptTypes!=
NULL)
3485 for(
i=0;lpszAcceptTypes[
i]!=
NULL;
i++)
3504 lpszVersion, lpszReferrer, lpszAcceptTypes,
3518 L"Content-Transfer-Encoding",
3522 L"Content-Language",
3545 L"Content-Encoding",
3548 L"If-Modified-Since",
3556 L"WWW-Authenticate",
3557 L"Proxy-Authenticate",
3563 L"Content-Disposition",
3567 L"Content-Location",
3575 L"If-Unmodified-Since",
3577 L"Proxy-Authorization",
3579 L"Transfer-Encoding",
3585 L"Proxy-Connection",
3586 L"Unless-Modified-Since",
3597 INT requested_index = lpdwIndex ? *lpdwIndex : 0;
3734 requested_index,request_only);
3777 requested_index,request_only);
3795 unsigned long value;
3822 tmpTM = *
gmtime(&tmpTime);
3825 STHook->wHour = tmpTM.
tm_hour;
3826 STHook->wMilliseconds = 0;
3827 STHook->wMinute = tmpTM.
tm_min;
3828 STHook->wDayOfWeek = tmpTM.
tm_wday;
3829 STHook->wMonth = tmpTM.
tm_mon + 1;
3830 STHook->wSecond = tmpTM.
tm_sec;
3831 STHook->wYear = 1900+tmpTM.
tm_year;
3833 TRACE(
" returning time: %04d/%02d/%02d - %d - %02d:%02d:%02d.%02d\n",
3834 STHook->wYear, STHook->wMonth, STHook->wDay, STHook->wDayOfWeek,
3835 STHook->wHour, STHook->wMinute, STHook->wSecond, STHook->wMilliseconds);
3854 if (lpdwIndex) (*lpdwIndex)++;
3877#define FE(x) { x, #x }
3961 TRACE(
" Attribute:");
3972 TRACE(
" Modifier:");
3974 if (modifier_flags[
i].
val & info_mod) {
3976 info_mod &= ~ modifier_flags[
i].val;
3981 TRACE(
" Unknown (%08x)", info_mod);
4037 len = (*lpdwBufferLength)*
sizeof(
WCHAR);
4078 static WCHAR szHttp[] =
L"http";
4079 static WCHAR szHttps[] =
L"https";
4101 TRACE(
"redirect to non-http URL\n");
4117 url_length = url_length /
sizeof(
WCHAR) - 1;
4168 url, (url_len + 1) *
sizeof(
WCHAR));
4176 TRACE(
"redirect from secure page to non-secure page\n");
4178 request->
hdr.dwFlags &= ~INTERNET_FLAG_SECURE;
4184 TRACE(
"redirect from non-secure page to secure page\n");
4293 static const WCHAR days[7][4] = {
L"sun",
4342 if (!nextPtr || nextPtr <=
ptr || *nextPtr !=
':')
4355 if (!nextPtr || nextPtr <=
ptr || *nextPtr !=
':')
4368 if (!nextPtr || nextPtr <=
ptr)
4419 if (!nextPtr || nextPtr <= ptr || !num || num > 31)
4437 if (!nextPtr || nextPtr <=
ptr || num < 1601 || num > 30827)
4488 if (!nextPtr || nextPtr <= ptr || !num || num > 31)
4514 if (!nextPtr || nextPtr <=
ptr || num < 1601 || num > 30827)
4538 static const WCHAR days[7][10] = {
L"sunday",
4597 if (!nextPtr || nextPtr <= ptr || !num || num > 31)
4631 if (!nextPtr || nextPtr <=
ptr || num < 1601 || num > 30827)
4692 if (headerIndex != -1)
4715 if (nextPtr >
equal + 1)
4724 request->expires.dwLowDateTime = ft.
u.LowPart;
4725 request->expires.dwHighDateTime = ft.
u.HighPart;
4726 expirationFound =
TRUE;
4740 if (!expirationFound)
4743 if (headerIndex != -1)
4750 expirationFound =
TRUE;
4755 if (!expirationFound)
4762 request->expires.dwLowDateTime =
t.u.LowPart;
4763 request->expires.dwHighDateTime =
t.u.HighPart;
4776 if (headerIndex != -1)
4818 TRACE(
"freeing netconn\n");
4864 ERR(
"create_netconn failed: %u\n",
res);
4887 *out_len =
len + data_len - 1;
4912 DWORD dwContentLength,
BOOL bEndRequest)
4933 request->bytesToWrite = dwContentLength;
4935 if (
request->session->appInfo->agent)
4937 WCHAR *agent_header;
4959 if( lpszHeaders && dwHeaderLength )
4964 DWORD len, data_len = dwOptionalLength;
4965 BOOL reusing_connection;
5009 WARN(
"failed to upgrade to secure connection\n");
5056 if(!reusing_connection)
5063 request->bytesWritten = data_len;
5084 if(!responseLen && reusing_connection) {
5085 TRACE(
"Connection closed by server, reconnecting\n");
5110 switch(
request->status_code) {
5135 WCHAR szAuthValue[2048];
5150 FIXME(
"Could not drain content\n");
5160 TRACE(
"Cleaning wrong authorization data\n");
5172 request->session->appInfo->proxyUsername,
5173 request->session->appInfo->proxyPassword,
5178 FIXME(
"Could not drain content\n");
5187 TRACE(
"Cleaning wrong proxy authorization data\n");
5198 WARN(
"failed to upgrade to secure proxy connection\n");
5275 WARN(
"Not connected\n");
5302 switch(
request->status_code) {
5352 TRACE(
"(%p, %p, %08x, %08lx)\n", hRequest, lpBuffersOut,
dwFlags, dwContext);
5395 TRACE(
"%p %p %x %lx -->\n", hRequest, lpBuffersOut,
dwFlags, dwContext);
5455 TRACE(
"(%p, %p, %p, %08x, %08lx)\n", hRequest, lpBuffersIn,
5456 lpBuffersOut,
dwFlags, dwContext);
5510 TRACE(
"(%p, %p, %p, %08x, %08lx)\n", hRequest, lpBuffersIn,
5511 lpBuffersOut,
dwFlags, dwContext);
5603 TRACE(
"%p, %s, %i, %p, %i)\n", hHttpRequest,
5604 debugstr_wn(lpszHeaders, dwHeaderLength), dwHeaderLength, lpOptional, dwOptionalLength);
5637 else size = dwHeaderLength *
sizeof(
WCHAR);
5656 dwHeaderLength, lpOptional, dwOptionalLength,
5657 dwOptionalLength,
TRUE);
5682 DWORD nLen=dwHeaderLength;
5683 if(lpszHeaders!=
NULL)
5719 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
5728 TRACE(
"INTERNET_OPTION_CONNECT_TIMEOUT\n");
5738 TRACE(
"INTERNET_OPTION_SEND_TIMEOUT\n");
5748 TRACE(
"INTERNET_OPTION_RECEIVE_TIMEOUT\n");
5845 if (!lpszServerName || !lpszServerName[0])
5861 session->
hdr.dwInternalFlags |= dwInternalFlags;
5869 if (lpszUserName && lpszUserName[0])
5872 session->hostPort = serverPort;
5909 if( !
request->custHeaders[
i].lpszField )
5911 if( !
request->custHeaders[
i].lpszValue )
5960 if (!buflen)
goto lend;
5980 TRACE(
"version [%s] status code [%s] status text [%s]\n",
5985 else if (!codeHundred)
5998 }
while (codeHundred);
6013 *(status_text-1) =
' ';
6025 if (!bufferA[0])
break;
6069 pTokenPair = heap_alloc_zero(
sizeof(*pTokenPair)*3);
6088 pTokenPair[0][pszColon -
buffer] =
'\0';
6115#define COALESCEFLAGS (HTTP_ADDHDR_FLAG_COALESCE_WITH_COMMA|HTTP_ADDHDR_FLAG_COALESCE_WITH_SEMICOLON)
6144 hdr.wFlags =
hdr.wCount = 0;
6175 lphttpHdr->
wFlags &= ~HDR_ISREQUEST;
6188 len = origlen + valuelen + ((ch > 0) ? 2 : 0);
6208 WARN(
"heap_realloc (%d bytes) failed\n",
len+1);
6230 hdr.wFlags =
hdr.wCount = 0;
6253 int requested_index,
BOOL request_only)
6257 TRACE(
"%s, %d, %d\n",
debugstr_w(lpszField), requested_index, request_only);
6270 if (requested_index == 0)
6324 if(
request->nCustHeaders <= 0 )
ULONGLONG WINAPI GetTickCount64(VOID)
ACPI_SIZE strlen(const char *String)
char * strchr(const char *String, int ch)
struct outqueuenode * head
static WCHAR * heap_strdupAtoW(const char *str)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static void * heap_realloc(void *mem, size_t len)
#define InterlockedIncrement
#define InterlockedDecrement
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
void user(int argc, const char *argv[])
static void list_remove(struct list_entry *entry)
static int list_empty(struct list_entry *head)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
#define ERROR_INSUFFICIENT_BUFFER
static WCHAR * heap_strdupW(const WCHAR *str)
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext)
static WCHAR available[MAX_STRING_RESOURCE_LEN]
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
DWORD WINAPI CertNameToStrA(DWORD dwCertEncodingType, PCERT_NAME_BLOB pName, DWORD dwStrType, LPSTR psz, DWORD csz)
#define ERROR_INVALID_PARAMETER
#define INVALID_HANDLE_VALUE
static __inline const char * debugstr_an(const char *s, int n)
#define ERROR_NOT_SUPPORTED
#define FILE_ATTRIBUTE_NORMAL
#define WideCharToMultiByte
#define MultiByteToWideChar
#define __EXCEPT_PAGE_FAULT
int inflate(z_streamp strm, int flush)
int inflateEnd(z_streamp strm)
static const WCHAR version[]
static DOUBLE day(DOUBLE time)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
BOOL WINAPI GetModuleHandleExW(IN DWORD dwFlags, IN LPCWSTR lpwModuleName OPTIONAL, OUT HMODULE *phModule)
VOID WINAPI FreeLibraryAndExitThread(HMODULE hLibModule, DWORD dwExitCode)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
DWORD WINAPI GetTickCount(VOID)
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
BOOL WINAPI StrToInt64ExW(LPCWSTR lpszStr, DWORD dwFlags, LONGLONG *lpiRet)
HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, LPDWORD pcchCanonicalized, DWORD dwFlags)
HRESULT WINAPI UrlEscapeW(LPCWSTR pszUrl, LPWSTR pszEscaped, LPDWORD pcchEscaped, DWORD dwFlags)
static const WCHAR month[12][4]
static WCHAR * build_response_header(http_request_t *request, BOOL use_cr)
static void async_read_file_proc(task_header_t *hdr)
static WCHAR * get_redirect_url(http_request_t *request)
static void HTTP_ProcessExpires(http_request_t *request)
static BOOL netconn_end_of_data(data_stream_t *stream, http_request_t *req)
BOOL WINAPI HttpAddRequestHeadersW(HINTERNET hHttpRequest, LPCWSTR lpszHeader, DWORD dwHeaderLength, DWORD dwModifier)
static void destroy_data_stream(data_stream_t *stream)
static BOOL process_host_port(server_t *server)
static BOOL HTTP_ParseDate(LPCWSTR value, FILETIME *ft)
static LPWSTR * HTTP_InterpretHttpHeader(LPCWSTR buffer)
static WCHAR ** convert_accept_types(const char **accept_types)
static const data_stream_vtbl_t chunked_stream_vtbl
static BOOL retrieve_cached_authorization(LPWSTR host, LPWSTR scheme, SEC_WINNT_AUTH_IDENTITY_W *nt_auth_identity)
static DWORD str_to_buffer(const WCHAR *str, void *buffer, DWORD *size, BOOL unicode)
static void wininet_zfree(voidpf opaque, voidpf address)
static DWORD HTTP_HttpSendRequestW(http_request_t *request, LPCWSTR lpszHeaders, DWORD dwHeaderLength, LPVOID lpOptional, DWORD dwOptionalLength, DWORD dwContentLength, BOOL bEndRequest)
static BOOL is_basic_auth_value(LPCWSTR pszAuthValue, LPWSTR *pszRealm)
BOOL WINAPI HttpEndRequestW(HINTERNET hRequest, LPINTERNET_BUFFERSW lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
static const signed char HTTP_Base64Dec[]
static const object_vtbl_t HTTPREQVtbl
static void HTTP_FixURL(http_request_t *request)
static DWORD drain_content(http_request_t *, BOOL)
static struct list authorizationCache
static void AsyncHttpSendRequestProc(task_header_t *hdr)
static void AsyncHttpEndRequestProc(task_header_t *hdr)
static DWORD netconn_read(data_stream_t *stream, http_request_t *req, BYTE *buf, DWORD size, DWORD *read, BOOL allow_blocking)
static void HTTPREQ_Destroy(object_header_t *hdr)
BOOL WINAPI HttpEndRequestA(HINTERNET hRequest, LPINTERNET_BUFFERSA lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
static DWORD HTTPREQ_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode)
static void http_process_keep_alive(http_request_t *req)
static void destroy_authinfo(struct HttpAuthInfo *authinfo)
static DWORD HTTP_HttpEndRequestW(http_request_t *request, DWORD dwFlags, DWORD_PTR dwContext)
#define HTTP_ADDHDR_FLAG_REQ
static DWORD HTTP_HttpAddRequestHeadersW(http_request_t *request, LPCWSTR lpszHeader, DWORD dwHeaderLength, DWORD dwModifier)
static WCHAR * encode_auth_data(const WCHAR *scheme, const char *data, UINT data_len)
static struct list connection_pool
struct _authorizationData authorizationData
static WCHAR * get_host_header(http_request_t *req)
static DWORD HTTPREQ_ReadFile(object_header_t *hdr, void *buf, DWORD size, DWORD *ret_read, DWORD flags, DWORD_PTR context)
static void remove_header(http_request_t *request, const WCHAR *str, BOOL from_request)
static void HTTP_ProcessLastModified(http_request_t *request)
static void reset_data_stream(http_request_t *req)
static BOOL HTTP_ShouldBypassProxy(appinfo_t *lpwai, LPCWSTR server)
static DWORD init_gzip_stream(http_request_t *req, BOOL is_gzip)
static DWORD read_more_data(http_request_t *req, int maxlen)
static DWORD WINAPI collect_connections_proc(void *arg)
BOOL WINAPI HttpAddRequestHeadersA(HINTERNET hHttpRequest, LPCSTR lpszHeader, DWORD dwHeaderLength, DWORD dwModifier)
static DWORD HTTP_HandleRedirect(http_request_t *request, WCHAR *url)
static const LPCWSTR header_lookup[]
static void commit_cache_entry(http_request_t *req)
static CRITICAL_SECTION_DEBUG critsect_debug
static WORD HTTP_ParseMonth(LPCWSTR month)
static char * build_ascii_request(const WCHAR *str, void *data, DWORD data_len, DWORD *out_len)
static BOOL gzip_end_of_data(data_stream_t *stream, http_request_t *req)
static DWORD HTTP_ProcessHeader(http_request_t *req, LPCWSTR field, LPCWSTR value, DWORD dwModifier)
static const data_stream_vtbl_t gzip_stream_vtbl
static void HTTPSESSION_Destroy(object_header_t *hdr)
static DWORD HTTP_ResolveName(http_request_t *request)
static DWORD open_http_connection(http_request_t *request, BOOL *reusing)
static DWORD HTTP_InsertCustomHeader(http_request_t *req, LPHTTPHEADERW lpHdr)
static INT HTTP_GetCustomHeaderIndex(http_request_t *req, LPCWSTR lpszField, INT index, BOOL Request)
static void HTTP_FreeTokens(LPWSTR *token_array)
static void strip_spaces(LPWSTR start)
static void HTTP_ProcessCookies(http_request_t *request)
static BOOL HTTP_DomainMatches(LPCWSTR server, substr_t domain)
static void chunked_destroy(data_stream_t *stream)
static BOOL HTTP_DealWithProxy(appinfo_t *hIC, http_session_t *session, http_request_t *request)
HINTERNET WINAPI HttpOpenRequestA(HINTERNET hHttpSession, LPCSTR lpszVerb, LPCSTR lpszObjectName, LPCSTR lpszVersion, LPCSTR lpszReferrer, LPCSTR *lpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext)
static voidpf wininet_zalloc(voidpf opaque, uInt items, uInt size)
static void cache_authorization(LPWSTR host, LPWSTR scheme, SEC_WINNT_AUTH_IDENTITY_W *nt_auth_identity)
BOOL WINAPI HttpSendRequestW(HINTERNET hHttpRequest, LPCWSTR lpszHeaders, DWORD dwHeaderLength, LPVOID lpOptional, DWORD dwOptionalLength)
static DWORD HTTP_GetResponseHeaders(http_request_t *req, INT *len)
static WCHAR * build_request_header(http_request_t *request, const WCHAR *verb, const WCHAR *path, const WCHAR *version, BOOL use_cr)
static DWORD HTTP_HttpOpenRequestW(http_session_t *session, LPCWSTR lpszVerb, LPCWSTR lpszObjectName, LPCWSTR lpszVersion, LPCWSTR lpszReferrer, LPCWSTR *lpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext, HINTERNET *ret)
static LPHTTPHEADERW HTTP_GetHeader(http_request_t *req, LPCWSTR head)
static DWORD HTTP_HttpQueryInfoW(http_request_t *, DWORD, LPVOID, LPDWORD, LPDWORD)
BOOL WINAPI HttpQueryInfoA(HINTERNET hHttpRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex)
static void free_accept_types(WCHAR **accept_types)
static BOOL HTTP_ParseRfc850Date(LPCWSTR value, FILETIME *ft)
static void http_release_netconn(http_request_t *req, BOOL reuse)
static void HTTP_InsertCookies(http_request_t *request)
struct _basicAuthorizationData basicAuthorizationData
static WCHAR * build_proxy_path_url(http_request_t *req)
static DWORD async_read(http_request_t *req, void *buf, DWORD size, DWORD read_pos, DWORD *ret_read)
static DWORD chunked_read(data_stream_t *stream, http_request_t *req, BYTE *buf, DWORD size, DWORD *read, BOOL allow_blocking)
void server_release(server_t *server)
static DWORD gzip_read(data_stream_t *stream, http_request_t *req, BYTE *buf, DWORD size, DWORD *read, BOOL allow_blocking)
static BOOL chunked_end_of_data(data_stream_t *stream, http_request_t *req)
static BOOL HTTP_ParseRfc1123Date(LPCWSTR value, FILETIME *ft)
static BOOL HTTP_DoAuthorization(http_request_t *request, LPCWSTR pszAuthValue, struct HttpAuthInfo **ppAuthInfo, LPWSTR domain_and_username, LPWSTR password, LPWSTR host)
static BOOL HTTP_DeleteCustomHeader(http_request_t *req, DWORD index)
DWORD HTTP_Connect(appinfo_t *hIC, LPCWSTR lpszServerName, INTERNET_PORT serverPort, LPCWSTR lpszUserName, LPCWSTR lpszPassword, DWORD dwFlags, DWORD_PTR dwContext, DWORD dwInternalFlags, HINTERNET *ret)
BOOL WINAPI IsHostInProxyBypassList(DWORD flags, LPCSTR szHost, DWORD length)
BOOL WINAPI HttpQueryInfoW(HINTERNET hHttpRequest, DWORD dwInfoLevel, LPVOID lpBuffer, LPDWORD lpdwBufferLength, LPDWORD lpdwIndex)
static DWORD HTTPREQ_WriteFile(object_header_t *hdr, const void *buffer, DWORD size, DWORD *written)
static void HTTP_ReceiveRequestData(http_request_t *req)
BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest, LPINTERNET_BUFFERSW lpBuffersIn, LPINTERNET_BUFFERSW lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
BOOL collect_connections(collect_type_t collect_type)
static char next_chunked_data_char(chunked_stream_t *stream)
static void HTTP_clear_response_headers(http_request_t *request)
static BOOL HTTP_KeepAlive(http_request_t *request)
static DWORD HTTPSESSION_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode)
static void set_content_length_header(http_request_t *request, DWORD len, DWORD flags)
static const object_vtbl_t HTTPSESSIONVtbl
#define HTTP_ADDHDR_FLAG_REPLACE
static DWORD HTTPREQ_Read(http_request_t *req, void *buffer, DWORD size, DWORD *read, BOOL allow_blocking)
BOOL WINAPI HttpSendRequestA(HINTERNET hHttpRequest, LPCSTR lpszHeaders, DWORD dwHeaderLength, LPVOID lpOptional, DWORD dwOptionalLength)
static void HTTPREQ_CloseConnection(object_header_t *hdr)
static WORD HTTP_ParseWkday(LPCWSTR day)
static void create_cache_entry(http_request_t *req)
static BOOL HTTP_ParseTime(SYSTEMTIME *st, LPCWSTR *str)
#define HTTP_ADDHDR_FLAG_COALESCE_WITH_COMMA
static DWORD refill_read_buffer(http_request_t *req, BOOL allow_blocking, DWORD *read_bytes)
static DWORD HTTPSESSION_SetOption(object_header_t *hdr, DWORD option, void *buffer, DWORD size)
static UINT HTTP_EncodeBase64(LPCSTR bin, unsigned int len, LPWSTR base64)
static const data_stream_vtbl_t netconn_stream_vtbl
static BOOL HTTP_InsertAuthorization(http_request_t *request, struct HttpAuthInfo *pAuthInfo, LPCWSTR header)
static void netconn_destroy(data_stream_t *stream)
server_t * get_server(substr_t name, INTERNET_PORT port, BOOL is_https, BOOL do_create)
static BOOL HTTP_ParseDateAsAsctime(LPCWSTR value, FILETIME *ft)
static DWORD HTTPREQ_QueryDataAvailable(object_header_t *hdr, DWORD *available, DWORD flags, DWORD_PTR ctx)
static DWORD HTTPREQ_SetOption(object_header_t *hdr, DWORD option, void *buffer, DWORD size)
void free_authorization_cache(void)
static CRITICAL_SECTION connection_pool_cs
static DWORD gzip_drain_content(data_stream_t *stream, http_request_t *req, BOOL allow_blocking)
static DWORD get_security_cert_struct(http_request_t *req, INTERNET_CERTIFICATE_INFOA *info)
static void cache_basic_authorization(LPWSTR host, LPWSTR realm, LPSTR auth_data, UINT auth_data_len)
static LPWSTR HTTP_build_req(LPCWSTR *list, int len)
static DWORD chunked_drain_content(data_stream_t *stream, http_request_t *req, BOOL allow_blocking)
static struct list basicAuthorizationCache
static DWORD HTTPREQ_LockRequestFile(object_header_t *hdr, req_file_t **ret)
static WORD HTTP_ParseWeekday(LPCWSTR day)
static void send_request_complete(http_request_t *req, DWORD_PTR result, DWORD error)
static DWORD set_content_length(http_request_t *request)
static CRITICAL_SECTION_DEBUG connection_pool_debug
static BOOL end_of_read_data(http_request_t *req)
static DWORD read_http_stream(http_request_t *req, BYTE *buf, DWORD size, DWORD *read, BOOL allow_blocking)
#define HTTP_ADDHDR_FLAG_ADD_IF_NEW
BOOL WINAPI HttpSendRequestExA(HINTERNET hRequest, LPINTERNET_BUFFERSA lpBuffersIn, LPINTERNET_BUFFERSA lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
#define HTTP_ADDHDR_FLAG_COALESCE_WITH_SEMICOLON
static BOOL collector_running
#define HTTP_ADDHDR_FLAG_ADD
static UINT retrieve_cached_basic_authorization(http_request_t *req, const WCHAR *host, const WCHAR *realm, char **auth_data)
HINTERNET WINAPI HttpOpenRequestW(HINTERNET hHttpSession, LPCWSTR lpszVerb, LPCWSTR lpszObjectName, LPCWSTR lpszVersion, LPCWSTR lpszReferrer, LPCWSTR *lpszAcceptTypes, DWORD dwFlags, DWORD_PTR dwContext)
static void remove_data(http_request_t *req, int count)
static WCHAR * compose_request_url(http_request_t *req)
static UINT HTTP_DecodeBase64(LPCWSTR base64, LPSTR bin)
static void gzip_destroy(data_stream_t *stream)
void server_addref(server_t *server)
static DWORD netconn_drain_content(data_stream_t *stream, http_request_t *req, BOOL allow_blocking)
static CRITICAL_SECTION authcache_cs
BOOL WININET_Release(object_header_t *info)
DWORD INTERNET_AsyncCall(task_header_t *task)
object_header_t * WININET_AddRef(object_header_t *info)
BOOL WINAPI InternetCrackUrlW(const WCHAR *lpszUrl, DWORD dwUrlLength, DWORD dwFlags, URL_COMPONENTSW *lpUC)
DWORD create_req_file(const WCHAR *file_name, req_file_t **ret)
DWORD INTERNET_GetLastError(void)
BOOL WINAPI InternetCreateUrlW(LPURL_COMPONENTSW lpUrlComponents, DWORD dwFlags, LPWSTR lpszUrl, LPDWORD lpdwUrlLength)
DWORD INET_SetOption(object_header_t *hdr, DWORD option, void *buf, DWORD size)
void req_file_release(req_file_t *req_file)
WCHAR * INTERNET_FindProxyForProtocol(LPCWSTR szProxy, LPCWSTR proto)
void * alloc_async_task(object_header_t *hdr, async_task_proc_t proc, size_t size)
object_header_t * get_handle_object(HINTERNET hinternet)
DWORD INET_QueryOption(object_header_t *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode)
BOOL WINAPI InternetCombineUrlW(LPCWSTR lpszBaseUrl, LPCWSTR lpszRelativeUrl, LPWSTR lpszBuffer, LPDWORD lpdwBufferLength, DWORD dwFlags)
void * alloc_object(object_header_t *parent, const object_vtbl_t *vtbl, size_t size)
#define IDS_CERT_SIGNATURE
#define IDS_CERT_ENCRYPTION
#define IDS_CERT_EXPIRATION
#define IDS_CERT_PROTOCOL
#define IDS_CERT_EFFECTIVE
BOOL WINAPI GetUrlCacheEntryInfoW(LPCWSTR lpszUrl, LPINTERNET_CACHE_ENTRY_INFOW lpCacheEntryInfo, LPDWORD lpdwCacheEntryInfoBufferSize)
BOOL WINAPI CreateUrlCacheEntryW(LPCWSTR lpszUrlName, DWORD dwExpectedFileSize, LPCWSTR lpszFileExtension, LPWSTR lpszFileName, DWORD dwReserved)
BOOL WINAPI CommitUrlCacheEntryW(LPCWSTR lpszUrlName, LPCWSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime, DWORD CacheEntryType, LPWSTR lpHeaderInfo, DWORD dwHeaderSize, LPCWSTR lpszFileExtension, LPCWSTR lpszOriginalUrl)
#define check(expected, result)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble * u
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
_Check_return_ _CRTIMP int __cdecl _scprintf(_In_z_ _Printf_format_string_ const char *_Format,...)
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
_Check_return_ unsigned long __cdecl wcstoul(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
LPCVOID NETCON_GetCert(netconn_t *connection) DECLSPEC_HIDDEN
time_t ConvertTimeString(LPCWSTR asctime) DECLSPEC_HIDDEN
static req_file_t * req_file_addref(req_file_t *req_file)
void close_netconn(netconn_t *) DECLSPEC_HIDDEN
static substr_t substr(const WCHAR *str, size_t len)
#define INTERNET_HANDLE_IN_USE
BOOL NETCON_is_alive(netconn_t *) DECLSPEC_HIDDEN
static substr_t substrz(const WCHAR *str)
#define HDR_COMMADELIMITED
BOOL GetAddress(const WCHAR *, INTERNET_PORT, SOCKADDR *, int *, char *) DECLSPEC_HIDDEN
static WCHAR * heap_strndupAtoW(const char *str, int len_a, DWORD *len_w)
DWORD NETCON_secure_connect(netconn_t *, server_t *) DECLSPEC_HIDDEN
DWORD NETCON_send(netconn_t *connection, const void *msg, size_t len, int flags, int *sent) DECLSPEC_HIDDEN
int NETCON_GetCipherStrength(netconn_t *) DECLSPEC_HIDDEN
DWORD NETCON_recv(netconn_t *, void *, size_t, BOOL, int *) DECLSPEC_HIDDEN
VOID INTERNET_SendCallback(object_header_t *hdr, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInfo, DWORD dwStatusInfoLength) DECLSPEC_HIDDEN
BOOL is_valid_netconn(netconn_t *) DECLSPEC_HIDDEN
void free_netconn(netconn_t *) DECLSPEC_HIDDEN
DWORD NETCON_set_timeout(netconn_t *connection, BOOL send, DWORD value) DECLSPEC_HIDDEN
DWORD create_netconn(server_t *, DWORD, BOOL, DWORD, netconn_t **) DECLSPEC_HIDDEN
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static struct _PeImage bin
const char * combined_url
static CookieInternal * cookies
#define LOCALE_USER_DEFAULT
#define LOCALE_SYSTEM_DEFAULT
NTSTATUS NTAPI NtQuerySystemTime(OUT PLARGE_INTEGER SystemTime)
static BOOL read_bytes(parse_buffer *buf, LPVOID data, DWORD size)
#define SecIsValidHandle(x)
#define SECPKG_CRED_OUTBOUND
#define SECURITY_NETWORK_DREP
#define ISC_REQ_MUTUAL_AUTH
#define SecInvalidateHandle(x)
#define ISC_REQ_CONNECTION
#define ISC_REQ_USE_DCE_STYLE
static BOOL secure_proxy_connect(struct request *request)
#define SEC_WINNT_AUTH_IDENTITY_UNICODE
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
_Check_return_ _CRTIMP int __cdecl wcsncmp(_In_reads_or_z_(_MaxCount) const wchar_t *_Str1, _In_reads_or_z_(_MaxCount) const wchar_t *_Str2, _In_ size_t _MaxCount)
_CRTIMP struct tm *__cdecl gmtime(const time_t *_Time)
#define inflateInit2(strm, windowBits)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
#define LIST_FOR_EACH(cursor, list)
vector< Header * > headers
#define URL_ESCAPE_SPACES_ONLY
SECURITY_STATUS WINAPI FreeContextBuffer(PVOID pv)
unsigned int auth_data_len
LIST_ENTRY ProcessLocksList
struct _INTERNET_BUFFERSW * Next
unsigned short * Password
data_stream_t data_stream
BYTE buf[READ_BUFFER_SIZE]
@ CHUNKED_STREAM_STATE_END_OF_STREAM
@ CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_DATA
@ CHUNKED_STREAM_STATE_READING_CHUNK
@ CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END
@ CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_SIZE
@ CHUNKED_STREAM_STATE_READING_CHUNK_SIZE
enum chunked_stream_t::@630 state
const data_stream_vtbl_t * vtbl
DWORD(* drain_content)(data_stream_t *, http_request_t *, BOOL)
BOOL(* end_of_data)(data_stream_t *, http_request_t *)
void(* destroy)(data_stream_t *)
DWORD(* read)(data_stream_t *, http_request_t *, BYTE *, DWORD, DWORD *, BOOL)
BYTE buf[READ_BUFFER_SIZE]
data_stream_t * parent_stream
CRITICAL_SECTION read_section
data_stream_t * data_stream
netconn_stream_t netconn_stream
BYTE read_buf[READ_BUFFER_SIZE]
CRITICAL_SECTION headers_section
HTTPHEADERW * custHeaders
data_stream_t data_stream
const WCHAR * canon_host_port
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
struct _LARGE_INTEGER::@2379 u
static rfbScreenInfoPtr server
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
BOOL WINAPI TryEnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
_In_opt_ LPSTR _In_opt_ LPSTR lpszPassword
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
#define CERT_SIMPLE_NAME_STR
#define CERT_NAME_STR_CRLF_FLAG
const CERT_CONTEXT * PCCERT_CONTEXT
#define SEC_I_CONTINUE_NEEDED
#define HTTP_STATUS_NO_CONTENT
#define HTTP_STATUS_PROXY_AUTH_REQ
_In_ _In_opt_ _Out_writes_bytes_to_opt_ lpdwBufferLength _Inout_ LPDWORD lpdwBufferLength
#define ICU_ENCODE_SPACES_ONLY
#define SECURITY_FLAG_IGNORE_CERT_DATE_INVALID
#define HTTP_STATUS_REDIRECT_KEEP_VERB
#define INTERNET_SCHEME_HTTP
#define HTTP_STATUS_DENIED
#define HTTP_STATUS_CONTINUE
#define INTERNET_DEFAULT_HTTP_PORT
#define INTERNET_SCHEME_HTTPS
#define HTTP_STATUS_REDIRECT
#define HTTP_STATUS_MOVED
#define HTTP_STATUS_REDIRECT_METHOD
#define SECURITY_FLAG_IGNORE_CERT_CN_INVALID
#define INTERNET_DEFAULT_HTTPS_PORT
DWORD set_cookie(substr_t domain, substr_t path, substr_t name, substr_t data, DWORD flags)
DWORD get_cookie_header(const WCHAR *host, const WCHAR *path, WCHAR **ret)
#define HTTP_ADDREQ_FLAG_REPLACE
#define INTERNET_STATUS_RECEIVING_RESPONSE
#define INTERNET_FLAG_PRAGMA_NOCACHE
#define INTERNET_ERROR_MASK_COMBINED_SEC_CERT
#define INTERNET_FLAG_NO_AUTO_REDIRECT
#define INTERNET_OPTION_SECURITY_FLAGS
#define INTERNET_OPTION_PROXY_PASSWORD
#define HTTP_QUERY_SET_COOKIE
#define INTERNET_OPTION_CACHE_TIMESTAMPS
#define HTTP_QUERY_PROXY_CONNECTION
#define HTTP_QUERY_LAST_MODIFIED
#define INTERNET_HANDLE_TYPE_HTTP_REQUEST
#define INTERNET_STATUS_CONNECTION_CLOSED
#define HTTP_QUERY_UNLESS_MODIFIED_SINCE
#define HTTP_QUERY_PROXY_AUTHENTICATE
#define ERROR_INTERNET_INVALID_URL
#define INTERNET_OPTION_PROXY_USERNAME
#define ERROR_INTERNET_OPERATION_CANCELLED
#define HTTP_QUERY_FLAG_SYSTEMTIME
#define HTTP_QUERY_ACCEPT
#define INTERNET_FLAG_ASYNC
#define HTTP_QUERY_RAW_HEADERS_CRLF
#define INTERNET_FLAG_NO_COOKIES
#define INTERNET_STATUS_REQUEST_SENT
#define INTERNET_FLAG_KEEP_CONNECTION
#define HTTP_QUERY_STATUS_TEXT
#define INTERNET_OPTION_USER_AGENT
#define HTTP_QUERY_FLAG_COALESCE
#define HTTP_QUERY_DERIVED_FROM
#define HTTP_QUERY_CONTENT_MD5
#define ERROR_INTERNET_ITEM_NOT_FOUND
#define HTTP_QUERY_PUBLIC
#define IDSI_FLAG_KEEP_ALIVE
#define INTERNET_OPTION_PASSWORD
#define HTTP_QUERY_IF_MODIFIED_SINCE
#define HTTP_QUERY_MODIFIER_FLAGS_MASK
#define HTTP_QUERY_CONTENT_BASE
#define HTTP_QUERY_CONTENT_ID
#define HTTP_QUERY_USER_AGENT
#define INTERNET_STATUS_SENDING_REQUEST
#define HTTP_QUERY_IF_RANGE
#define INTERNET_OPTION_DATAFILE_NAME
#define HTTP_QUERY_ACCEPT_ENCODING
#define HTTP_QUERY_CONNECTION
#define HTTP_QUERY_VERSION
#define HTTP_QUERY_HEADER_MASK
#define INTERNET_OPTION_CONNECT_TIMEOUT
#define HTTP_QUERY_IF_NONE_MATCH
#define ERROR_INTERNET_CONNECTION_ABORTED
#define HTTP_QUERY_FLAG_NUMBER
#define ERROR_INTERNET_OPTION_NOT_SETTABLE
#define HTTP_QUERY_FORWARDED
#define INTERNET_FLAG_NEED_FILE
#define INTERNET_STATUS_RESOLVING_NAME
#define INTERNET_FLAG_NO_CACHE_WRITE
#define HTTP_QUERY_ORIG_URI
#define NORMAL_CACHE_ENTRY
#define INTERNET_FLAG_SECURE
#define HTTP_ADDREQ_FLAG_ADD
#define HTTP_QUERY_UPGRADE
#define HTTP_QUERY_ACCEPT_CHARSET
#define HTTP_QUERY_CONTENT_LOCATION
#define INTERNET_OPTION_URL
#define HTTP_QUERY_ACCEPT_RANGES
#define HTTP_QUERY_CONTENT_TYPE
#define HTTP_QUERY_CONTENT_DESCRIPTION
#define INTERNET_REQFLAG_NO_HEADERS
#define INTERNET_STATUS_RESPONSE_RECEIVED
#define ERROR_INTERNET_DECODING_FAILED
#define INTERNET_STATUS_REDIRECT
#define HTTP_QUERY_COOKIE
#define INTERNET_STATUS_REQUEST_COMPLETE
#define INTERNET_STATUS_CONNECTING_TO_SERVER
#define HTTP_QUERY_AUTHORIZATION
#define HTTP_QUERY_IF_UNMODIFIED_SINCE
#define ERROR_INTERNET_INVALID_OPERATION
#define HTTP_QUERY_REFERER
#define HTTP_QUERY_TRANSFER_ENCODING
#define INTERNET_INVALID_PORT_NUMBER
#define HTTP_QUERY_LOCATION
#define INTERNET_STATUS_HANDLE_CREATED
#define HTTP_QUERY_PRAGMA
#define INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
#define INTERNET_OPTION_SEND_TIMEOUT
#define HTTP_QUERY_STATUS_CODE
#define HTTP_QUERY_IF_MATCH
#define HTTP_QUERY_CACHE_CONTROL
#define HTTP_QUERY_RAW_HEADERS
#define INTERNET_OPTION_RECEIVE_TIMEOUT
#define HTTP_QUERY_CONTENT_ENCODING
#define INTERNET_OPTION_ERROR_MASK
#define INTERNET_FLAG_IGNORE_CERT_CN_INVALID
#define HTTP_QUERY_CONTENT_TRANSFER_ENCODING
#define HTTP_QUERY_REQUEST_METHOD
#define HTTP_QUERY_CUSTOM
#define ERROR_HTTP_INVALID_SERVER_RESPONSE
#define INTERNET_HANDLE_TYPE_CONNECT_HTTP
#define HTTP_QUERY_RETRY_AFTER
#define HTTP_QUERY_SERVER
#define INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT
#define INTERNET_COOKIE_HTTPONLY
#define ERROR_HTTP_INVALID_QUERY_REQUEST
#define HTTP_QUERY_CONTENT_DISPOSITION
#define HTTP_ADDREQ_FLAG_ADD_IF_NEW
#define ERROR_INTERNET_NAME_NOT_RESOLVED
#define ERROR_HTTP_INVALID_HEADER
#define SECURITY_SET_MASK
#define INTERNET_STATUS_CONNECTED_TO_SERVER
#define INTERNET_STATUS_NAME_RESOLVED
#define INTERNET_OPTION_HANDLE_TYPE
#define HTTP_QUERY_CONTENT_LANGUAGE
#define HTTP_QUERY_PROXY_AUTHORIZATION
#define HTTP_QUERY_REFRESH
#define INTERNET_OPTION_SECURITY_CERTIFICATE
#define HTTP_QUERY_WWW_AUTHENTICATE
#define HTTP_QUERY_MESSAGE_ID
#define ERROR_INTERNET_INCORRECT_HANDLE_TYPE
#define HTTP_QUERY_ACCEPT_LANGUAGE
#define HTTP_QUERY_FLAG_REQUEST_HEADERS
#define HTTP_QUERY_EXPIRES
#define INTERNET_STATUS_CLOSING_CONNECTION
#define HTTP_QUERY_CONTENT_RANGE
#define INTERNET_OPTION_USERNAME
#define INTERNET_OPTION_DIAGNOSTIC_SOCKET_INFO
struct _INTERNET_DIAGNOSTIC_SOCKET_INFO INTERNET_DIAGNOSTIC_SOCKET_INFO
struct _INTERNET_BUFFERSW * LPINTERNET_BUFFERSW
#define HTTP_QUERY_WARNING
#define INTERNET_REQFLAG_VIA_PROXY
#define ERROR_HTTP_HEADER_NOT_FOUND
#define HTTP_QUERY_MAX_FORWARDS
#define HTTP_QUERY_CONTENT_LENGTH
#define ERROR_INTERNET_INTERNAL_ERROR
#define INTERNET_FLAG_NO_AUTH
#define INTERNET_OPTION_REQUEST_FLAGS
#define HTTP_QUERY_MIME_VERSION
#define INTERNET_CERTIFICATE_INFOA
int WINAPI LoadStringA(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPSTR lpBuffer, _In_ int cchBufferMax)
SECURITY_STATUS WINAPI AcquireCredentialsHandleW(SEC_WCHAR *pszPrincipal, SEC_WCHAR *pszPackage, ULONG fCredentialsUse, PLUID pvLogonID, PVOID pAuthData, SEC_GET_KEY_FN pGetKeyFn, PVOID pvGetKeyArgument, PCredHandle phCredential, PTimeStamp ptsExpiry)
SECURITY_STATUS WINAPI InitializeSecurityContextW(PCredHandle phCredential, PCtxtHandle phContext, SEC_WCHAR *pszTargetName, ULONG fContextReq, ULONG Reserved1, ULONG TargetDataRep, PSecBufferDesc pInput, ULONG Reserved2, PCtxtHandle phNewContext, PSecBufferDesc pOutput, ULONG *pfContextAttr, PTimeStamp ptsExpiry)
SECURITY_STATUS WINAPI DeleteSecurityContext(PCtxtHandle phContext)
SECURITY_STATUS WINAPI QuerySecurityPackageInfoW(SEC_WCHAR *pszPackageName, PSecPkgInfoW *ppPackageInfo)
SECURITY_STATUS WINAPI FreeCredentialsHandle(PCredHandle phCredential)