50#define NO_SHLWAPI_STREAM
66#define HTTP_ADDHDR_FLAG_REQ 0x02000000
68#define COLLECT_TIME 60000
116 0, 0, { (
DWORD_PTR)(__FILE__
": authcache_cs") }
136 0, 0, { (
DWORD_PTR)(__FILE__
": connection_pool_cs") }
171 size_t name_len,
len;
207 if(!
server && do_create) {
212 server->is_https = is_https;
261 BOOL remaining_conns;
275 }
while(remaining_conns);
289 if (HeaderIndex == -1)
329 CHUNKED_STREAM_STATE_ERROR
378 DWORD current_read, ret_read = 0;
382 TRACE(
"(%ld %x)\n",
size, allow_blocking);
392 sizeof(gzip_stream->
buf)-gzip_stream->
buf_size, ¤t_read, allow_blocking);
396 gzip_stream->
buf_size += current_read;
398 WARN(
"unexpected end of data\n");
410 size -= current_read;
411 ret_read += current_read;
415 TRACE(
"end of data\n");
418 }
else if(zres !=
Z_OK) {
426 allow_blocking =
FALSE;
429 TRACE(
"read %lu bytes\n", ret_read);
485 ERR(
"inflateInit failed: %d\n", zres);
512 for (
i = 0; token_array[
i];
i++)
free(token_array[
i]);
582 req[
n++] =
request->custHeaders[
i].lpszField;
584 req[
n++] =
request->custHeaders[
i].lpszValue;
589 TRACE(
"Adding custom header %s (%s)\n",
602 return requestString;
635 req[
n++] =
request->custHeaders[
i].lpszField;
637 req[
n++] =
request->custHeaders[
i].lpszValue;
642 TRACE(
"Adding custom header %s (%s)\n",
674 setCookieHeader = &
request->custHeaders[HeaderIndex];
712 static const WCHAR szBasic[] = {
'B',
'a',
's',
'i',
'c'};
713 static const WCHAR szRealm[] = {
'r',
'e',
'a',
'l',
'm'};
717 if (is_basic && pszRealm)
728 while (*realm ==
' ')
734 while (*
token ==
' ')
775 TRACE(
"Authorization found in cache\n");
817 TRACE(
"Found match in cache, replacing\n");
832 TRACE(
"authorization cached\n");
847 TRACE(
"Authorization found in cache\n");
852 if(!nt_auth_identity->
User || !nt_auth_identity->
Password ||
974 pAuthInfo =
malloc(
sizeof(*pAuthInfo));
1007 if (domain_and_username)
1014 pAuthData = &nt_auth_identity;
1019 user = domain_and_username;
1034 pAuthData = &nt_auth_identity;
1045 if(pAuthData && !domain_and_username) {
1063 WARN(
"AcquireCredentialsHandleW for scheme %s failed with error 0x%08lx\n",
1070 *ppAuthInfo = pAuthInfo;
1078 ERR(
"authentication scheme changed from %s to %s\n",
1092 if (!domain_and_username)
1094 if (
host && szRealm)
1119 if (
host && szRealm)
1144 in_desc.pBuffers = &
in;
1147 if (*pszAuthData ==
' ')
1163 out_desc.pBuffers = &
out;
1169 in.pvBuffer ? &in_desc :
NULL,
1170 0, &pAuthInfo->
ctx, &out_desc,
1171 &pAuthInfo->
attr, &pAuthInfo->
exp);
1177 TRACE(
"sending last auth packet\n");
1183 TRACE(
"sending next auth packet\n");
1187 ERR(
"InitializeSecurityContextW returned error 0x%08lx\n", sec_status);
1211 if( dwHeaderLength == ~0
U )
1214 len = dwHeaderLength;
1224 lpszEnd = lpszStart;
1226 while (*lpszEnd !=
'\0')
1228 if (*lpszEnd ==
'\r' || *lpszEnd ==
'\n')
1233 if (*lpszStart ==
'\0')
1236 if (*lpszEnd ==
'\r' || *lpszEnd ==
'\n')
1242 if (*lpszStart ==
'\0')
1245 lpszStart = lpszEnd;
1257 lpszStart = lpszEnd;
1286 TRACE(
"%p, %s, %lu, %08lx\n", hHttpRequest,
debugstr_wn(lpszHeader, dwHeaderLength), dwHeaderLength, dwModifier);
1318 TRACE(
"%p, %s, %lu, %08lx\n", hHttpRequest,
debugstr_an(lpszHeader, dwHeaderLength), dwHeaderLength, dwModifier);
1345 const char **
types = accept_types;
1364 WARN(
"invalid accept type pointer\n");
1365 invalid_pointer =
TRUE;
1370 if (invalid_pointer)
return NULL;
1373 types = accept_types;
1402 TRACE(
"(%p, %s, %s, %s, %s, %p, %08lx, %08Ix)\n", hHttpSession,
1417 if ( !szObjectName )
1454 static const CHAR HTTP_Base64Enc[] =
1455 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1460 base64[
n++] = HTTP_Base64Enc[(
bin[0] & 0xfc) >> 2];
1461 x = (
bin[0] & 3) << 4;
1466 base64[
n++] = HTTP_Base64Enc[
x];
1471 base64[
n++] = HTTP_Base64Enc[
x | ( (
bin[1]&0xf0) >> 4 ) ];
1472 x = (
bin[1] & 0x0f ) << 2;
1477 base64[
n++] = HTTP_Base64Enc[
x];
1481 base64[
n++] = HTTP_Base64Enc[
x | ( (
bin[2]&0xc0 ) >> 6 ) ];
1484 base64[
n++] = HTTP_Base64Enc[
bin[2] & 0x3f ];
1494 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1495 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1496 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
1497 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
1498 -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1499 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
1500 -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
1501 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1
1527 if ((base64[2] ==
'=') && (base64[3] ==
'='))
1539 if (base64[3] ==
'=')
1548 bin[
n] = (
unsigned char) (((
in[2] << 6) & 0xc0) |
in[3]);
1563 len = scheme_len + 1 + ((data_len + 2) * 4) / 3;
1566 ret[scheme_len] =
' ';
1603 free(authorization);
1633 free(authorization);
1647 if(*req->
path !=
'/')
1654 if(*req->
path !=
'/')
1700 return *(
ptr - 1) ==
'.';
1733 static WCHAR szNul[] =
L"";
1785 addr_len =
sizeof(
server->addr);
1789 server->addr_len = addr_len;
1820 if(req->
path[0] !=
'/')
1850 request->headers_section.DebugInfo->Spare[0] = 0;
1852 request->read_section.DebugInfo->Spare[0] = 0;
1954 WCHAR szConnectionResponse[20];
1962 dwBufferSize =
sizeof(szConnectionResponse);
1965 *szConnectionResponse = 0;
2031 if(
info->lpszSubjectInfo)
2038 if(
info->lpszIssuerInfo)
2057 FIXME(
"INTERNET_DIAGNOSTIC_SOCKET_INFO stub\n");
2067 info->SourcePort = 0;
2081 TRACE(
"Queried undocumented option 98, forwarding to INTERNET_OPTION_SECURITY_FLAGS\n");
2094 TRACE(
"INTERNET_OPTION_SECURITY_FLAGS %lx\n",
flags);
2099 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
2112 TRACE(
"INTERNET_OPTION_URL\n");
2139 TRACE(
"INTERNET_OPTION_CACHE_TIMESTAMPS\n");
2144 if (*
size <
sizeof(*ts))
2146 *
size =
sizeof(*ts);
2164 *
size =
sizeof(*ts);
2173 TRACE(
"INTERNET_OPTION_DATAFILE_NAME\n");
2182 if(*
size < req_size)
2190 if (req_size > *
size)
2216 char expiration[64];
2219 char encryption[64];
2223 char start_date[32];
2224 char start_time[32];
2225 char expiry_date[32];
2226 char expiry_time[32];
2255 strength,
sizeof(strength));
2273 subject,
info.lpszSubjectInfo,
2275 effective, start_date, start_time,
2276 expiration, expiry_date, expiry_time,
2278 privacy, strength,
info.dwKeySize,
bits);
2280 if(needed < *
size) {
2291 subject,
info.lpszSubjectInfo,
2293 effective, start_date, start_time,
2294 expiration, expiry_date, expiry_time,
2296 privacy, strength,
info.dwKeySize,
bits);
2332 TRACE(
"INTERNET_OPTION_REQUEST_FLAGS returning %lx\n",
flags);
2339 TRACE(
"INTERNET_OPTION_ERROR_MASK\n");
2348 TRACE(
"INTERNET_OPTION_SERVER_CERT_CHAIN_CONTEXT\n");
2371 TRACE(
"Undocumented option 99\n");
2386 TRACE(
"INTERNET_OPTION_SECURITY_FLAGS %08lx\n",
flags);
2467 if(header_idx != -1) {
2473 while(*
ptr==
' ' || *
ptr==
'\t')
2499 FIXME(
"INTERNET_FLAG_NEED_FILE is not supported correctly\n");
2504 WARN(
"Could not get URL\n");
2555 if (maxlen == -1) maxlen =
sizeof(req->
read_buf);
2585 bytes_read =
count + 1;
2597 WARN(
"read failed %lu\n",
res );
2604 TRACE(
"returning empty string\n" );
2670 &
read, allow_blocking);
2757 switch(chunked_stream->
state) {
2758 case CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END:
2759 case CHUNKED_STREAM_STATE_END_OF_STREAM:
2760 case CHUNKED_STREAM_STATE_ERROR:
2781 BOOL blocking_read = allow_blocking;
2783 switch(chunked_stream->
state) {
2784 case CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END:
2785 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_SIZE:
2788 blocking_read =
FALSE;
2790 case CHUNKED_STREAM_STATE_READING_CHUNK_SIZE:
2791 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_DATA:
2797 if(ret_read || allow_blocking)
2799 continue_read =
FALSE;
2802 chunked_stream->
state = CHUNKED_STREAM_STATE_ERROR;
2810 switch(chunked_stream->
state) {
2811 case CHUNKED_STREAM_STATE_READING_CHUNK_SIZE:
2814 if(
ch >=
'0' &&
ch <=
'9') {
2816 }
else if(
ch >=
'a' &&
ch <=
'f') {
2818 }
else if (
ch >=
'A' &&
ch <=
'F') {
2820 }
else if (
ch ==
';' ||
ch ==
'\r' ||
ch ==
'\n') {
2826 chunked_stream->
state = CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_SIZE;
2830 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_SIZE:
2834 ? CHUNKED_STREAM_STATE_READING_CHUNK
2835 : CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END;
2837 WARN(
"unexpected char '%c'\n",
ch);
2840 case CHUNKED_STREAM_STATE_READING_CHUNK:
2843 continue_read =
FALSE;
2859 continue_read =
FALSE;
2864 chunked_stream->
state = CHUNKED_STREAM_STATE_ERROR;
2873 chunked_stream->
state = CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_DATA;
2874 allow_blocking =
FALSE;
2877 case CHUNKED_STREAM_STATE_DISCARD_EOL_AFTER_DATA:
2880 chunked_stream->
state = CHUNKED_STREAM_STATE_READING_CHUNK_SIZE;
2882 WARN(
"unexpected char '%c'\n",
ch);
2885 case CHUNKED_STREAM_STATE_DISCARD_EOL_AT_END:
2888 chunked_stream->
state = CHUNKED_STREAM_STATE_END_OF_STREAM;
2890 WARN(
"unexpected char '%c'\n",
ch);
2893 case CHUNKED_STREAM_STATE_END_OF_STREAM:
2894 case CHUNKED_STREAM_STATE_ERROR:
2895 continue_read =
FALSE;
2898 }
while(continue_read);
2905 TRACE(
"read %ld bytes\n", ret_read);
2916 while(chunked_stream->
state != CHUNKED_STREAM_STATE_END_OF_STREAM
2917 && chunked_stream->
state != CHUNKED_STREAM_STATE_ERROR) {
2923 if(chunked_stream->
state != CHUNKED_STREAM_STATE_END_OF_STREAM)
2931 free(chunked_stream);
2944 WCHAR contentLength[32];
2958 size =
sizeof(contentLength);
2968 size =
sizeof(encoding);
2974 chunked_stream =
malloc(
sizeof(*chunked_stream));
2981 chunked_stream->
state = CHUNKED_STREAM_STATE_READING_CHUNK_SIZE;
2999 if(encoding_idx != -1) {
3005 if(!
wcsicmp(
request->custHeaders[encoding_idx].lpszValue,
L"deflate")) {
3044 WARN(
"res %lu read %lu, closing connection\n",
res,
read);
3064 &ret_read, allow_blocking);
3088 DWORD current_read = 0, ret_read = 0;
3099 allow_blocking =
FALSE;
3102 if(ret_read <
size) {
3105 ret_read += current_read;
3115 TRACE(
"retrieved %lu bytes (res %lu)\n", ret_read,
res );
3159 TRACE(
"req %p buf %p size %lu read_pos %lu ret_read %p\n", req,
task->buf,
task->size,
task->read_pos,
task->ret_read);
3174 while (read < task->
size) {
3186 complete_arg =
read;
3214 task->read_pos = read_pos;
3215 task->ret_read = ret_read;
3233 switch (dwMoveContext) {
3235 res = lDistanceToMove;
3245 FIXME(
"dwMoveContext FILE_END not implemented\n");
3267 BOOL allow_blocking, notify_received =
FALSE;
3304 notify_received =
TRUE;
3352 request->bytesWritten += *written;
3362 BOOL allow_blocking, notify_received =
FALSE;
3388 notify_received =
TRUE;
3420 TRACE(
"(%p)\n", req);
3423 WARN(
"No cache file name available\n");
3482 request->headers_section.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": http_request_t.headers_section");
3485 request->read_section.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": http_request_t.read_section");
3507 if (lpszObjectName && *lpszObjectName) {
3520 ERR(
"Unable to escape string!(%s) (%ld)\n",
debugstr_w(lpszObjectName),rc);
3527 if (lpszReferrer && *lpszReferrer)
3530 if (lpszAcceptTypes)
3533 for (
i = 0; lpszAcceptTypes[
i];
i++)
3535 if (!*lpszAcceptTypes[
i])
continue;
3578 TRACE(
"(%p, %s, %s, %s, %s, %p, %08lx, %08Ix)\n", hHttpSession,
3582 if(lpszAcceptTypes!=
NULL)
3585 for(
i=0;lpszAcceptTypes[
i]!=
NULL;
i++)
3604 lpszVersion, lpszReferrer, lpszAcceptTypes,
3618 L"Content-Transfer-Encoding",
3622 L"Content-Language",
3645 L"Content-Encoding",
3648 L"If-Modified-Since",
3656 L"WWW-Authenticate",
3657 L"Proxy-Authenticate",
3663 L"Content-Disposition",
3667 L"Content-Location",
3675 L"If-Unmodified-Since",
3677 L"Proxy-Authorization",
3679 L"Transfer-Encoding",
3685 L"Proxy-Connection",
3686 L"Unless-Modified-Since",
3697 INT requested_index = lpdwIndex ? *lpdwIndex : 0;
3834 requested_index,request_only);
3877 requested_index,request_only);
3895 unsigned long value;
3929 TRACE(
" returning time: %04u/%02u/%02u - %u - %02u:%02u:%02u.%02u\n",
3951 if (lpdwIndex) (*lpdwIndex)++;
3974#define FE(x) { x, #x }
4058 TRACE(
" Attribute:");
4069 TRACE(
" Modifier:");
4071 if (modifier_flags[
i].
val & info_mod) {
4073 info_mod &= ~ modifier_flags[
i].val;
4078 TRACE(
" Unknown (%08lx)", info_mod);
4134 len = (*lpdwBufferLength)*
sizeof(
WCHAR);
4143 bufferW =
malloc( alloclen );
4175 static WCHAR szHttp[] =
L"http";
4176 static WCHAR szHttps[] =
L"https";
4186 redirect_url =
malloc(url_length);
4198 TRACE(
"redirect to non-http URL\n");
4211 orig_url =
malloc(url_length);
4214 url_length = url_length /
sizeof(
WCHAR) - 1;
4265 url, (url_len + 1) *
sizeof(
WCHAR));
4273 TRACE(
"redirect from secure page to non-secure page\n");
4275 request->
hdr.dwFlags &= ~INTERNET_FLAG_SECURE;
4281 TRACE(
"redirect from non-secure page to secure page\n");
4390 static const WCHAR days[7][4] = {
L"sun",
4439 if (!nextPtr || nextPtr <=
ptr || *nextPtr !=
':')
4452 if (!nextPtr || nextPtr <=
ptr || *nextPtr !=
':')
4465 if (!nextPtr || nextPtr <=
ptr)
4516 if (!nextPtr || nextPtr <= ptr || !num || num > 31)
4534 if (!nextPtr || nextPtr <=
ptr || num < 1601 || num > 30827)
4585 if (!nextPtr || nextPtr <= ptr || !num || num > 31)
4611 if (!nextPtr || nextPtr <=
ptr || num < 1601 || num > 30827)
4635 static const WCHAR days[7][10] = {
L"sunday",
4694 if (!nextPtr || nextPtr <= ptr || !num || num > 31)
4728 if (!nextPtr || nextPtr <=
ptr || num < 1601 || num > 30827)
4789 if (headerIndex != -1)
4812 if (nextPtr >
equal + 1)
4821 request->expires.dwLowDateTime = ft.
u.LowPart;
4822 request->expires.dwHighDateTime = ft.
u.HighPart;
4823 expirationFound =
TRUE;
4837 if (!expirationFound)
4840 if (headerIndex != -1)
4847 expirationFound =
TRUE;
4852 if (!expirationFound)
4859 request->expires.dwLowDateTime =
t.u.LowPart;
4860 request->expires.dwHighDateTime =
t.u.HighPart;
4873 if (headerIndex != -1)
4914 TRACE(
"freeing netconn\n");
4960 ERR(
"create_netconn failed: %lu\n",
res);
4983 *out_len =
len + data_len - 1;
5008 DWORD dwContentLength,
BOOL bEndRequest)
5014 const WCHAR *appinfo_agent;
5030 request->bytesToWrite = dwContentLength;
5033 appinfo_agent =
request->session->appInfo->agent;
5035 if (appinfo_agent && *appinfo_agent)
5037 WCHAR *agent_header;
5042 swprintf(agent_header,
len,
L"User-Agent: %s\r\n", appinfo_agent);
5061 if (dwHeaderLength == 0)
5062 dwHeaderLength =
lstrlenW(lpszHeaders);
5069 DWORD len, data_len = dwOptionalLength;
5070 BOOL reusing_connection;
5114 WARN(
"failed to upgrade to secure connection\n");
5150 free(request_header);
5161 if(!reusing_connection)
5168 request->bytesWritten = data_len;
5189 if(!responseLen && reusing_connection) {
5190 TRACE(
"Connection closed by server, reconnecting\n");
5215 switch(
request->status_code) {
5240 WCHAR szAuthValue[2048];
5255 FIXME(
"Could not drain content\n");
5262 dwBufferSize = 2048;
5267 TRACE(
"Cleaning wrong authorization data\n");
5279 request->session->appInfo->proxyUsername,
5280 request->session->appInfo->proxyPassword,
5285 FIXME(
"Could not drain content\n");
5292 dwBufferSize = 2048;
5296 TRACE(
"Cleaning wrong proxy authorization data\n");
5307 WARN(
"failed to upgrade to secure proxy connection\n");
5372 task->optional_len,
task->content_len,
task->end_request);
5384 WARN(
"Not connected\n");
5411 switch(
request->status_code) {
5461 TRACE(
"(%p, %p, %08lx, %08Ix)\n", hRequest, lpBuffersOut,
dwFlags, dwContext);
5504 TRACE(
"%p %p %lx %Ix -->\n", hRequest, lpBuffersOut,
dwFlags, dwContext);
5529 task->context = dwContext;
5564 TRACE(
"(%p, %p, %p, %08lx, %08Ix)\n", hRequest, lpBuffersIn,
5565 lpBuffersOut,
dwFlags, dwContext);
5625 TRACE(
"(%p, %p, %p, %08lx, %08Ix)\n", hRequest, lpBuffersIn,
5626 lpBuffersOut,
dwFlags, dwContext);
5670 task->headers_len = 0;
5672 task->optional_len = 0;
5673 task->content_len = 0;
5718 TRACE(
"%p, %s, %li, %p, %li)\n", hHttpRequest,
5719 debugstr_wn(lpszHeaders, dwHeaderLength), dwHeaderLength, lpOptional, dwOptionalLength);
5752 else size = dwHeaderLength *
sizeof(
WCHAR);
5759 task->headers_len = dwHeaderLength;
5760 task->optional = lpOptional;
5761 task->optional_len = dwOptionalLength;
5762 task->content_len = dwOptionalLength;
5771 dwHeaderLength, lpOptional, dwOptionalLength,
5772 dwOptionalLength,
TRUE);
5797 DWORD nLen=dwHeaderLength;
5798 if(lpszHeaders!=
NULL)
5800 if (dwHeaderLength == 0 && *lpszHeaders !=
'\0')
5839 TRACE(
"INTERNET_OPTION_HANDLE_TYPE\n");
5919 if (!lpszServerName || !lpszServerName[0])
5935 session->
hdr.dwInternalFlags |= dwInternalFlags;
5943 if (lpszUserName && lpszUserName[0])
5946 session->hostPort = serverPort;
5983 if( !
request->custHeaders[
i].lpszField )
5985 if( !
request->custHeaders[
i].lpszValue )
6034 if (!buflen)
goto lend;
6054 TRACE(
"version [%s] status code [%s] status text [%s]\n",
6059 else if (!codeHundred)
6072 }
while (codeHundred);
6087 *(status_text-1) =
' ';
6099 if (!bufferA[0])
break;
6143 pTokenPair =
calloc(3,
sizeof(*pTokenPair));
6162 pTokenPair[0][pszColon -
buffer] =
'\0';
6189#define COALESCEFLAGS (HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA|HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON)
6204 dwModifier &= ~HTTP_ADDREQ_FLAG_ADD;
6226 hdr.wFlags =
hdr.wCount = 0;
6245 lphttpHdr->
wFlags &= ~HDR_ISREQUEST;
6257 hdr.wFlags =
hdr.wCount = 0;
6289 len = origlen + valuelen + ((
ch > 0) ? 2 : 0);
6310 WARN(
"realloc (%d bytes) failed\n",
len+1);
6326 int requested_index,
BOOL request_only)
6330 TRACE(
"%s, %d, %d\n",
debugstr_w(lpszField), requested_index, request_only);
6343 if (requested_index == 0)
6394 if(
request->nCustHeaders <= 0 )
HRESULT WINAPI DECLSPEC_HOTPATCH SetThreadDescription(_In_ HANDLE hThread, _In_ PCWSTR lpThreadDescription)
struct outqueuenode * head
#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)
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
VOID WINAPI CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext)
PCCERT_CHAIN_CONTEXT WINAPI CertDuplicateCertificateChain(PCCERT_CHAIN_CONTEXT pChainContext)
static WCHAR available[MAX_STRING_RESOURCE_LEN]
static WCHAR issuer[MAX_STRING_RESOURCE_LEN]
DWORD WINAPI CertNameToStrA(DWORD encoding_type, PCERT_NAME_BLOB name_blob, DWORD str_type, LPSTR str, DWORD str_len)
static WCHAR * strdupAtoW(const char *str)
#define ERROR_INVALID_PARAMETER
#define INVALID_SET_FILE_POINTER
#define ReadFile(a, b, c, d, e)
#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 SetFilePointerEx(HANDLE hFile, LARGE_INTEGER liDistanceToMove, PLARGE_INTEGER lpNewFilePointer, DWORD dwMoveMethod)
BOOL WINAPI WriteFile(_In_ HANDLE hFile, _In_reads_bytes_opt_(nNumberOfBytesToWrite) LPCVOID lpBuffer, _In_ DWORD nNumberOfBytesToWrite, _Out_opt_ LPDWORD lpNumberOfBytesWritten, _Inout_opt_ LPOVERLAPPED lpOverlapped)
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)
BOOL WINAPI InitializeCriticalSectionEx(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount, IN DWORD flags)
INT WINAPI CompareStringW(LCID lcid, DWORD flags, LPCWSTR str1, INT len1, LPCWSTR str2, INT len2)
HRESULT WINAPI UrlEscapeW(const WCHAR *url, WCHAR *escaped, DWORD *escaped_len, DWORD flags)
HRESULT WINAPI UrlCanonicalizeW(const WCHAR *src_url, WCHAR *canonicalized, DWORD *canonicalized_len, DWORD flags)
BOOL WINAPI StrToInt64ExW(const WCHAR *str, DWORD flags, LONGLONG *ret)
INT WINAPI DECLSPEC_HOTPATCH LoadStringA(HINSTANCE instance, UINT resource_id, LPSTR buffer, INT buflen)
ULONGLONG WINAPI DECLSPEC_HOTPATCH GetTickCount64(void)
_ACRTIMP __msvcrt_ulong __cdecl wcstoul(const wchar_t *, wchar_t **, int)
_ACRTIMP __msvcrt_long __cdecl wcstol(const wchar_t *, wchar_t **, int)
_ACRTIMP size_t __cdecl wcsspn(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcscspn(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl wcsncmp(const wchar_t *, const wchar_t *, size_t)
_ACRTIMP int __cdecl _scprintf(const char *,...) __WINE_CRT_PRINTF_ATTR(1
_ACRTIMP char *__cdecl strchr(const char *, int)
_ACRTIMP size_t __cdecl strlen(const char *)
static wchar_t * wcsdup(const wchar_t *str)
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)
BOOL WINAPI IsHostInProxyBypassList(INTERNET_SCHEME scheme, LPCSTR szHost, DWORD length)
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)
static DWORD read_req_file(http_request_t *req, BYTE *buffer, DWORD size, DWORD *read, BOOL allow_blocking)
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 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
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)
static BOOL has_keep_alive(const WCHAR *version, const WCHAR *connection)
static DWORD HTTPREQ_SetFilePointer(object_header_t *hdr, LONG lDistanceToMove, DWORD dwMoveContext)
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)
BOOL WINAPI HttpSendRequestExA(HINTERNET hRequest, LPINTERNET_BUFFERSA lpBuffersIn, LPINTERNET_BUFFERSA lpBuffersOut, DWORD dwFlags, DWORD_PTR dwContext)
static BOOL collector_running
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 BOOL has_token(const WCHAR *str, const WCHAR *token)
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 InternetTimeToSystemTimeW(LPCWSTR string, SYSTEMTIME *time, DWORD reserved)
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)
VOID INTERNET_SendCallback(object_header_t *hdr, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInfo, DWORD dwStatusInfoLength)
DWORD create_netconn(server_t *, DWORD, BOOL, DWORD, netconn_t **)
static req_file_t * req_file_addref(req_file_t *req_file)
static substr_t substr(const WCHAR *str, size_t len)
static WCHAR * strndupAtoW(const char *str, int len_a, DWORD *len_w)
BOOL is_valid_netconn(netconn_t *)
#define INTERNET_HANDLE_IN_USE
void free_netconn(netconn_t *)
DWORD NETCON_send(netconn_t *connection, const void *msg, size_t len, int flags, int *sent)
DWORD NETCON_secure_connect(netconn_t *, server_t *)
int NETCON_GetCipherStrength(netconn_t *)
DWORD NETCON_recv(netconn_t *, void *, size_t, BOOL, int *)
static substr_t substrz(const WCHAR *str)
LPCVOID NETCON_GetCert(netconn_t *connection)
void close_netconn(netconn_t *)
#define HDR_COMMADELIMITED
BOOL NETCON_is_alive(netconn_t *)
DWORD NETCON_set_timeout(netconn_t *connection, BOOL send, DWORD value)
BOOL GetAddress(const WCHAR *, INTERNET_PORT, SOCKADDR *, int *, char *)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
const WCHAR * combined_url
static CookieInternal * cookies
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
#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 URL_ESCAPE_SPACES_ONLY
#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 DWORD secure_proxy_connect(struct request *request)
#define SEC_WINNT_AUTH_IDENTITY_UNICODE
#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
SECURITY_STATUS WINAPI FreeContextBuffer(PVOID pv)
unsigned int auth_data_len
struct _INTERNET_BUFFERSW * Next
LIST_ENTRY ProcessLocksList
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::@748 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
const CERT_CHAIN_CONTEXT * cert_chain
PSYMCRYPT_PARALLEL_HASH_OPERATION next
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFREQUEST Request
struct _LARGE_INTEGER::@2753 u
static WCHAR * strndupW(LPCWSTR str, int len)
static rfbScreenInfoPtr server
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
HANDLE WINAPI GetCurrentThread(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
const CERT_CHAIN_CONTEXT * PCCERT_CHAIN_CONTEXT
#define CERT_SIMPLE_NAME_STR
#define CERT_NAME_STR_CRLF_FLAG
const CERT_CONTEXT * PCCERT_CONTEXT
#define ERROR_NEGATIVE_SEEK
#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 HTTP_STATUS_NOT_MODIFIED
#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_FLAG_DONT_CACHE
#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_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON
#define HTTP_QUERY_CONTENT_MD5
#define HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
#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_OPTION_SERVER_CERT_CHAIN_CONTEXT
#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 ERROR_INTERNET_INCORRECT_HANDLE_STATE
#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 HTTP_QUERY_STATUS_CODE
#define HTTP_QUERY_IF_MATCH
#define HTTP_QUERY_CACHE_CONTROL
#define HTTP_QUERY_RAW_HEADERS
#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
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO
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)