32#include "httprequest.h"
46#define DEFAULT_KEEP_ALIVE_TIMEOUT 30000
49static const WCHAR attr_accept_charset[] = {
'A',
'c',
'c',
'e',
'p',
't',
'-',
'C',
'h',
'a',
'r',
's',
'e',
't', 0};
50static const WCHAR attr_accept_encoding[] = {
'A',
'c',
'c',
'e',
'p',
't',
'-',
'E',
'n',
'c',
'o',
'd',
'i',
'n',
'g',0};
51static const WCHAR attr_accept_language[] = {
'A',
'c',
'c',
'e',
'p',
't',
'-',
'L',
'a',
'n',
'g',
'u',
'a',
'g',
'e',0};
52static const WCHAR attr_accept_ranges[] = {
'A',
'c',
'c',
'e',
'p',
't',
'-',
'R',
'a',
'n',
'g',
'e',
's',0};
55static const WCHAR attr_authorization[] = {
'A',
'u',
't',
'h',
'o',
'r',
'i',
'z',
'a',
't',
'i',
'o',
'n',0};
56static const WCHAR attr_cache_control[] = {
'C',
'a',
'c',
'h',
'e',
'-',
'C',
'o',
'n',
't',
'r',
'o',
'l',0};
57static const WCHAR attr_connection[] = {
'C',
'o',
'n',
'n',
'e',
'c',
't',
'i',
'o',
'n',0};
58static const WCHAR attr_content_base[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'B',
'a',
's',
'e',0};
59static const WCHAR attr_content_encoding[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'E',
'n',
'c',
'o',
'd',
'i',
'n',
'g',0};
60static const WCHAR attr_content_id[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'I',
'D',0};
61static const WCHAR attr_content_language[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'L',
'a',
'n',
'g',
'u',
'a',
'g',
'e',0};
62static const WCHAR attr_content_length[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'L',
'e',
'n',
'g',
't',
'h',0};
63static const WCHAR attr_content_location[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'L',
'o',
'c',
'a',
't',
'i',
'o',
'n',0};
64static const WCHAR attr_content_md5[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'M',
'D',
'5',0};
65static const WCHAR attr_content_range[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'R',
'a',
'n',
'g',
'e',0};
66static const WCHAR attr_content_transfer_encoding[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'T',
'r',
'a',
'n',
's',
'f',
'e',
'r',
'-',
'E',
'n',
'c',
'o',
'd',
'i',
'n',
'g',0};
67static const WCHAR attr_content_type[] = {
'C',
'o',
'n',
't',
'e',
'n',
't',
'-',
'T',
'y',
'p',
'e',0};
76static const WCHAR attr_if_modified_since[] = {
'I',
'f',
'-',
'M',
'o',
'd',
'i',
'f',
'i',
'e',
'd',
'-',
'S',
'i',
'n',
'c',
'e',0};
77static const WCHAR attr_if_none_match[] = {
'I',
'f',
'-',
'N',
'o',
'n',
'e',
'-',
'M',
'a',
't',
'c',
'h',0};
79static const WCHAR attr_if_unmodified_since[] = {
'I',
'f',
'-',
'U',
'n',
'm',
'o',
'd',
'i',
'f',
'i',
'e',
'd',
'-',
'S',
'i',
'n',
'c',
'e',0};
80static const WCHAR attr_last_modified[] = {
'L',
'a',
's',
't',
'-',
'M',
'o',
'd',
'i',
'f',
'i',
'e',
'd',0};
82static const WCHAR attr_max_forwards[] = {
'M',
'a',
'x',
'-',
'F',
'o',
'r',
'w',
'a',
'r',
'd',
's',0};
83static const WCHAR attr_mime_version[] = {
'M',
'i',
'm',
'e',
'-',
'V',
'e',
'r',
's',
'i',
'o',
'n',0};
85static const WCHAR attr_proxy_authenticate[] = {
'P',
'r',
'o',
'x',
'y',
'-',
'A',
'u',
't',
'h',
'e',
'n',
't',
'i',
'c',
'a',
't',
'e',0};
86static const WCHAR attr_proxy_authorization[] = {
'P',
'r',
'o',
'x',
'y',
'-',
'A',
'u',
't',
'h',
'o',
'r',
'i',
'z',
'a',
't',
'i',
'o',
'n',0};
87static const WCHAR attr_proxy_connection[] = {
'P',
'r',
'o',
'x',
'y',
'-',
'C',
'o',
'n',
'n',
'e',
'c',
't',
'i',
'o',
'n',0};
91static const WCHAR attr_retry_after[] = {
'R',
'e',
't',
'r',
'y',
'-',
'A',
'f',
't',
'e',
'r',0};
93static const WCHAR attr_set_cookie[] = {
'S',
'e',
't',
'-',
'C',
'o',
'o',
'k',
'i',
'e',0};
95static const WCHAR attr_transfer_encoding[] = {
'T',
'r',
'a',
'n',
's',
'f',
'e',
'r',
'-',
'E',
'n',
'c',
'o',
'd',
'i',
'n',
'g',0};
96static const WCHAR attr_unless_modified_since[] = {
'U',
'n',
'l',
'e',
's',
's',
'-',
'M',
'o',
'd',
'i',
'f',
'i',
'e',
'd',
'-',
'S',
'i',
'n',
'c',
'e',0};
99static const WCHAR attr_user_agent[] = {
'U',
's',
'e',
'r',
'-',
'A',
'g',
'e',
'n',
't',0};
103static const WCHAR attr_www_authenticate[] = {
'W',
'W',
'W',
'-',
'A',
'u',
't',
'h',
'e',
'n',
't',
'i',
'c',
'a',
't',
'e',0};
194 TRACE(
"returning task %p\n", task);
289 TRACE(
"queueing task %p\n", task );
306 if (
c < 32 ||
c == 127)
return FALSE;
313 case '\\':
case '\"':
362 while (*
q ==
' ')
q++;
388 if (!requested_index)
break;
404 hdrs = heap_alloc_zero(
sizeof(
struct header) );
405 if (!hdrs)
return FALSE;
457 hdr.is_request = request_only;
467 int len, len_orig, len_value;
473 len = len_orig + len_value + 2;
487 hdr.is_request = request_only;
513 if (
q[0] ==
'\n' &&
q[1] ==
'\r')
518 if (
q[0] ==
'\r' &&
q[1] ==
'\n')
break;
575 static const WCHAR http[] = {
'h',
't',
't',
'p',0};
576 static const WCHAR https[] = {
'h',
't',
't',
'p',
's',0};
577 static const WCHAR fmt[] = {
'%',
's',
':',
'/',
'/',
'%',
's',0};
593 static const WCHAR port_fmt[] = {
':',
'%',
'u',0};
605 static const WCHAR spaceW[] = {
' ',0},
crlfW[] = {
'\r',
'\n',0}, colonW[] = {
':',
' ',0};
606 static const WCHAR twocrlfW[] = {
'\r',
'\n',
'\r',
'\n',0};
649#define QUERY_MODIFIER_MASK (WINHTTP_QUERY_FLAG_REQUEST_HEADERS | WINHTTP_QUERY_FLAG_SYSTEMTIME | WINHTTP_QUERY_FLAG_NUMBER)
656 int requested_index, header_index = -1;
680 for (
len = 0; *
p;
p++)
if (*
p !=
'\r')
len++;
688 if (*
p !=
'\r') *
q = *
p;
785 FIXME(
"attribute %u not implemented\n",
attr);
794 if (header_index >= 0)
805 if (!
buffer ||
sizeof(
int) > *buflen)
816 *buflen =
sizeof(
int);
827 TRACE(
"returning time: %04d/%02d/%02d - %d - %02d:%02d:%02d.%02d\n",
861 TRACE(
"%p, 0x%08x, %s, %p, %p, %p\n", hrequest,
level,
debugstr_w(
name),
buffer, buflen,
index);
925 DWORD index = 0, supported_schemes = 0, first_scheme = 0;
947 if (!first_scheme) first_scheme =
scheme;
948 supported_schemes |=
scheme;
955 *supported = supported_schemes;
956 *
first = first_scheme;
1010 static const char base64enc[] =
1011 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
1016 base64[
n++] = base64enc[(
bin[0] & 0xfc) >> 2];
1017 x = (
bin[0] & 3) << 4;
1022 base64[
n++] = base64enc[
x];
1027 base64[
n++] = base64enc[
x | ((
bin[1] & 0xf0) >> 4)];
1028 x = (
bin[1] & 0x0f) << 2;
1033 base64[
n++] = base64enc[
x];
1037 base64[
n++] = base64enc[
x | ((
bin[2] & 0xc0) >> 6)];
1040 base64[
n++] = base64enc[
bin[2] & 0x3f];
1050 if (
c >=
'A' &&
c <=
'Z')
return c -
'A';
1051 if (
c >=
'a' &&
c <=
'z')
return c -
'a' + 26;
1052 if (
c >=
'0' &&
c <=
'9')
return c -
'0' + 52;
1053 if (
c ==
'+')
return 62;
1054 if (
c ==
'/')
return 63;
1061 char c0, c1, c2, c3;
1073 buf[
i + 0] = (c0 << 2) | (c1 >> 4);
1074 buf[
i + 1] = (c1 << 4) | (c2 >> 2);
1075 buf[
i + 2] = (c2 << 6) | c3;
1086 if (
buf)
buf[
i] = (c0 << 2) | (c1 >> 4);
1089 else if (
p[3] ==
'=')
1097 buf[
i + 0] = (c0 << 2) | (c1 >> 4);
1098 buf[
i + 1] = (c1 << 4) | (c2 >> 2);
1111 buf[
i + 0] = (c0 << 2) | (c1 >> 4);
1112 buf[
i + 1] = (c1 << 4) | (c2 >> 2);
1113 buf[
i + 2] = (c2 << 6) | c3;
1168 WCHAR auth_value[2048], *auth_reply;
1188 if (!has_auth_value)
return FALSE;
1221 int userlen, passlen;
1291 WARN(
"AcquireCredentialsHandleW for scheme %s failed with error 0x%08x\n",
1303 ERR(
"authentication scheme changed from %s to %s\n",
1315 in_desc.pBuffers = &
in;
1340 out_desc.pBuffers = &
out;
1353 TRACE(
"sending last auth packet\n");
1360 TRACE(
"sending next auth packet\n");
1364 ERR(
"InitializeSecurityContextW failed with error 0x%08x\n",
status);
1383 auth_reply[len_scheme] =
' ';
1394 static const WCHAR fmtW[] = {
'%',
's',
':',
'%',
'u',0};
1395 static const WCHAR connectW[] = {
'C',
'O',
'N',
'N',
'E',
'C',
'T', 0};
1396 static const WCHAR spaceW[] = {
' ',0},
crlfW[] = {
'\r',
'\n',0}, colonW[] = {
':',
' ',0};
1397 static const WCHAR twocrlfW[] = {
'\r',
'\n',
'\r',
'\n',0};
1446 int len, bytes_sent;
1467 switch (
addr->ss_family)
1476 WARN(
"unsupported address family %d\n",
addr->ss_family);
1488 0, 0, { (
DWORD_PTR)(__FILE__
": connection_pool_cs") }
1516 unsigned int remaining_connections;
1525 remaining_connections = 0;
1540 else remaining_connections++;
1547 }
while(remaining_connections);
1614 memset( &cred, 0,
sizeof(cred) );
1630 WARN(
"AcquireCredentialsHandleW failed: 0x%08x\n",
status );
1699 TRACE(
"connection %p no longer alive, closing\n",
netconn);
1824 static const WCHAR fmt[] = {
'%',
's',
':',
'%',
'u',0};
1910 DWORD chunk_size = 0;
1924 if (ch >=
'0' && ch <=
'9') chunk_size = chunk_size * 16 + ch -
'0';
1925 else if (ch >=
'a' && ch <=
'f') chunk_size = chunk_size * 16 + ch -
'a' + 10;
1926 else if (ch >=
'A' && ch <=
'F') chunk_size = chunk_size * 16 + ch -
'A' + 10;
1927 else if (ch ==
';' || ch ==
'\r' || ch ==
'\n')
1929 TRACE(
"reading %u byte chunk\n", chunk_size);
1969 if (len <= request->read_size)
return TRUE;
1977 static const WCHAR closeW[] = {
'c',
'l',
'o',
's',
'e',0};
1980 WCHAR connection[20];
2020 int count, bytes_read = 0;
2037 bytes_read +=
count;
2074 if (bytes_total >= bytes_left)
return;
2078 bytes_total += bytes_read;
2093#define ESCAPE_MASK_DEFAULT (ESCAPE_FLAG_NON_PRINTABLE | ESCAPE_FLAG_SPACE | ESCAPE_FLAG_UNSAFE |\
2094 ESCAPE_FLAG_DEL | ESCAPE_FLAG_8BIT)
2095#define ESCAPE_MASK_PERCENT (ESCAPE_FLAG_PERCENT | ESCAPE_MASK_DEFAULT)
2096#define ESCAPE_MASK_DISABLE (ESCAPE_FLAG_SPACE | ESCAPE_FLAG_8BIT | ESCAPE_FLAG_STRIP_CRLF)
2100 static const char unsafe[] =
"\"#<>[\\]^`{|}";
2101 const char *
ptr = unsafe;
2114 static const char hex[] =
"0123456789ABCDEF";
2118 for (
i = 0;
i <
len;
i++)
2163 DWORD len, len_path = 0, len_query = 0;
2177 len_path -= len_query;
2186 else query_flags = path_flags;
2211 *
len += len_path + 1;
2245 memcpy(
ptr,
"\r\n\r\n",
sizeof(
"\r\n\r\n") );
2255 static const WCHAR keep_alive[] = {
'K',
'e',
'e',
'p',
'-',
'A',
'l',
'i',
'v',
'e',0};
2256 static const WCHAR no_cache[] = {
'n',
'o',
'-',
'c',
'a',
'c',
'h',
'e',0};
2257 static const WCHAR length_fmt[] = {
'%',
'l',
'd',0};
2295 TRACE(
"failed to add request headers\n");
2300 WARN(
"failed to add cookie headers\n");
2321 len += optional_len;
2343 send_request(
s->hdr.request,
s->headers,
s->headers_len,
s->optional,
s->optional_len,
s->total_len,
s->context,
TRUE );
2356 TRACE(
"%p, %s, %u, %p, %u, %u, %lx\n", hrequest,
debugstr_wn(
headers, headers_len), headers_len,
optional,
2448 TRACE(
"%p, %x, 0x%08x, %s, %p, %p\n", hrequest,
target,
scheme,
debugstr_w(
username),
password,
params);
2540 bytes_read =
count + 1;
2554 TRACE(
"returning empty string\n");
2568#define MAX_REPLY_LEN 1460
2569#define INITIAL_HEADER_BUFFER_LEN 512
2573 static const WCHAR crlf[] = {
'\r',
'\n',0};
2579 WCHAR status_codeW[4];
2595 TRACE(
"version [%s] status code [%s] status text [%s]\n",
2604 status_codeW[
len] = 0;
2632 offset = buflen + crlf_len - 1;
2639 if (!*
buffer) buflen = 1;
2641 while (
len -
offset < buflen + crlf_len)
2663 offset += buflen + crlf_len - 1;
2710 memset( &uc, 0,
sizeof(uc) );
2744 TRACE(
"redirect from secure page to non-secure page\n");
2749 TRACE(
"redirect from non-secure page to secure page\n");
2811 static const WCHAR passportW[] = {
'P',
'a',
's',
's',
'p',
'o',
'r',
't',
'1',
'.',
'4'};
2826 static const WCHAR status401W[] = {
'4',
'0',
'1',0};
2833 for (
i = 0;
i <
len;
i++)
2835 if (
i <=
len - 3 &&
p[
i] ==
'3' &&
p[
i + 1] ==
'0' &&
p[
i + 2] ==
'2')
3112 if (
ret && written) *written = num_bytes;
3130 TRACE(
"%p, %p, %d, %p\n", hrequest,
buffer, to_write, written);
3218 IWinHttpRequest *iface )
3275 IWinHttpRequest *iface )
3287 request->cs.DebugInfo->Spare[0] = 0;
3295 IWinHttpRequest *iface,
3314 IWinHttpRequest_AddRef( iface );
3319 IWinHttpRequest *iface,
3340 &IID_IWinHttpRequest
3354 ERR(
"LoadRegTypeLib failed: %08x\n",
hr);
3391 IWinHttpRequest *iface,
3403 IWinHttpRequest *iface,
3414 TRACE(
"%p, %s, %p, %u, %u, %p\n",
request,
debugstr_guid(
riid),
names,
count, lcid, dispid);
3428 IWinHttpRequest *iface,
3435 EXCEPINFO *excep_info,
3442 TRACE(
"%p, %d, %s, %d, %d, %p, %p, %p, %p\n",
request,
member,
debugstr_guid(
riid),
3453 if (!arg_err) arg_err = &err_pos;
3498 IWinHttpRequest *iface,
3499 HTTPREQUEST_PROXY_SETTING proxy_setting,
3510 switch (proxy_setting)
3512 case HTTPREQUEST_PROXYSETTING_DEFAULT:
3520 case HTTPREQUEST_PROXYSETTING_DIRECT:
3528 case HTTPREQUEST_PROXYSETTING_PROXY:
3551 IWinHttpRequest *iface,
3554 HTTPREQUEST_SETCREDENTIALS_FLAGS
flags )
3570 case HTTPREQUEST_SETCREDENTIALS_FOR_SERVER:
3573 case HTTPREQUEST_SETCREDENTIALS_FOR_PROXY:
3635 IWinHttpRequest *iface,
3640 static const WCHAR typeW[] = {
'*',
'/',
'*',0};
3642 static const WCHAR httpsW[] = {
'h',
't',
't',
'p',
's'};
3644 'M',
'o',
'z',
'i',
'l',
'l',
'a',
'/',
'4',
'.',
'0',
' ',
'(',
'c',
'o',
'm',
'p',
'a',
't',
'i',
'b',
'l',
'e',
';',
' ',
3645 'W',
'i',
'n',
'3',
'2',
';',
' ',
'W',
'i',
'n',
'H',
't',
't',
'p',
'.',
'W',
'i',
'n',
'H',
't',
't',
'p',
3646 'R',
'e',
'q',
'u',
'e',
's',
't',
'.',
'5',
')',0};
3657 memset( &uc, 0,
sizeof(uc) );
3732 IWinHttpRequest *iface,
3736 static const WCHAR fmtW[] = {
'%',
's',
':',
' ',
'%',
's',
'\r',
'\n',0};
3778 IWinHttpRequest *iface,
3821 IWinHttpRequest *iface,
3956 if (!
request->bytes_available)
break;
3961 while (buflen <
size) buflen *= 2;
3978 }
while (
request->bytes_read);
4010 static const WCHAR fmtW[] = {
'%',
's',
':',
' ',
'%',
's',0};
4011 static const WCHAR text_plainW[] = {
't',
'e',
'x',
't',
'/',
'p',
'l',
'a',
'i',
'n',0};
4012 static const WCHAR charset_utf8W[] = {
'c',
'h',
'a',
'r',
's',
'e',
't',
'=',
'u',
't',
'f',
'-',
'8',0};
4041 for (
i = 0;
i <
len;
i++)
4095 return request_send_and_receive(
request );
4150 IWinHttpRequest *iface,
4196 IWinHttpRequest *iface,
4226 IWinHttpRequest *iface,
4266 static const WCHAR utf8W[] = {
'u',
't',
'f',
'-',
'8',0};
4267 static const WCHAR charsetW[] = {
'c',
'h',
'a',
'r',
's',
'e',
't',0};
4283 while (*
p ==
' ')
p++;
4286 while (*
p ==
' ')
p++;
4296 IWinHttpRequest *iface,
4330 IWinHttpRequest *iface,
4403 IStream_AddRef( iface );
4454 if (
origin == STREAM_SEEK_SET)
4456 else if (
origin == STREAM_SEEK_CUR)
4458 else if (
origin == STREAM_SEEK_END)
4533 IWinHttpRequest *iface,
4575 IWinHttpRequest *iface,
4576 WinHttpRequestOption
option,
4587 case WinHttpRequestOption_URLCodePage:
4601 IWinHttpRequest *iface,
4602 WinHttpRequestOption
option,
4613 case WinHttpRequestOption_EnableRedirects:
4616 request->disable_feature &= ~WINHTTP_DISABLE_REDIRECTS;
4621 case WinHttpRequestOption_URLCodePage:
4623 static const WCHAR utf8W[] = {
'u',
't',
'f',
'-',
'8',0};
4635 TRACE(
"URL codepage: UTF-8\n");
4653 IWinHttpRequest *iface,
4671 if (succeeded) *succeeded = VARIANT_FALSE;
4676 if (succeeded) *succeeded = VARIANT_TRUE;
4684 IWinHttpRequest *iface )
4697 IWinHttpRequest *iface,
4717 IWinHttpRequest *iface,
4725 IWinHttpRequest *iface,
4726 WinHttpRequestAutoLogonPolicy
policy )
4736 case AutoLogonPolicy_Always:
4739 case AutoLogonPolicy_OnlyIfBypassProxy:
4742 case AutoLogonPolicy_Never:
4792 request->cs.DebugInfo->Spare[0] = (
DWORD_PTR)(__FILE__
": winhttp_request.cs");
4796 TRACE(
"returning iface %p\n", *
obj);
ULONGLONG WINAPI GetTickCount64(VOID)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
ACPI_SIZE strlen(const char *String)
char * strchr(const char *String, int ch)
static struct sockaddr_in sa
WINBASEAPI _Check_return_ _Out_ AppPolicyProcessTerminationMethod * policy
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)
static WCHAR * strdupW(const WCHAR *src)
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_tail(struct list_entry *head, struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
static void list_init(struct list_entry *head)
static const WCHAR proxy_server[]
#define ERROR_INSUFFICIENT_BUFFER
static HINSTANCE instance
static WCHAR * strdupAW(const char *src)
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT pCertContext)
static WCHAR available[MAX_STRING_RESOURCE_LEN]
static const WCHAR crlf[]
#define ERROR_INVALID_PARAMETER
static __inline const char * debugstr_an(const char *s, int n)
#define ERROR_INVALID_HANDLE
#define WideCharToMultiByte
#define MultiByteToWideChar
static const WCHAR getW[]
static char * strdupWA(const WCHAR *src)
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)
static const WCHAR slashW[]
HRESULT WINAPI DispGetParam(DISPPARAMS *pdispparams, UINT position, VARTYPE vtTarg, VARIANT *pvarResult, UINT *puArgErr)
HRESULT WINAPI SafeArrayGetUBound(SAFEARRAY *psa, UINT nDim, LONG *plUbound)
HRESULT WINAPI SafeArrayAccessData(SAFEARRAY *psa, void **ppvData)
HRESULT WINAPI SafeArrayUnaccessData(SAFEARRAY *psa)
SAFEARRAY *WINAPI SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements)
HRESULT WINAPI SafeArrayDestroy(SAFEARRAY *psa)
HRESULT WINAPI LoadRegTypeLib(REFGUID rguid, WORD wVerMajor, WORD wVerMinor, LCID lcid, ITypeLib **ppTLib)
static const WCHAR typeW[]
static const WCHAR versionW[]
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
struct object_header * grab_object(HINTERNET hinternet)
void release_object(struct object_header *hdr)
struct object_header * addref_object(struct object_header *hdr)
HINSTANCE winhttp_instance
ULONG netconn_query_data_available(struct netconn *conn)
BOOL netconn_secure_connect(struct netconn *conn, WCHAR *hostname, DWORD security_flags, CredHandle *cred_handle, BOOL check_revocation)
const void * netconn_get_certificate(struct netconn *conn)
void netconn_close(struct netconn *conn)
BOOL netconn_recv(struct netconn *conn, void *buf, size_t len, int flags, int *recvd)
BOOL netconn_is_alive(struct netconn *netconn)
BOOL netconn_resolve(WCHAR *hostname, INTERNET_PORT port, struct sockaddr_storage *addr, int timeout)
BOOL netconn_send(struct netconn *conn, const void *msg, size_t len, int *sent)
DWORD netconn_set_timeout(struct netconn *netconn, BOOL send, int value)
struct netconn * netconn_create(struct hostdata *host, const struct sockaddr_storage *sockaddr, int timeout)
void send_callback(struct object_header *hdr, DWORD status, void *info, DWORD buflen)
HINTERNET WINAPI WinHttpOpen(LPCWSTR agent, DWORD access, LPCWSTR proxy, LPCWSTR bypass, DWORD flags)
HINTERNET WINAPI WinHttpConnect(HINTERNET hsession, LPCWSTR server, INTERNET_PORT port, DWORD reserved)
BOOL set_server_for_hostname(struct connect *connect, const WCHAR *server, INTERNET_PORT port)
BOOL WINAPI WinHttpCloseHandle(HINTERNET handle)
BOOL WINAPI WinHttpSetTimeouts(HINTERNET handle, int resolve, int connect, int send, int receive)
HINTERNET WINAPI WinHttpOpenRequest(HINTERNET hconnect, LPCWSTR verb, LPCWSTR object, LPCWSTR version, LPCWSTR referrer, LPCWSTR *types, DWORD flags)
BOOL WINAPI WinHttpSetOption(HINTERNET handle, DWORD option, LPVOID buffer, DWORD buflen)
BOOL WINAPI WinHttpTimeToSystemTime(LPCWSTR string, SYSTEMTIME *time)
WINHTTP_STATUS_CALLBACK WINAPI WinHttpSetStatusCallback(HINTERNET handle, WINHTTP_STATUS_CALLBACK callback, DWORD flags, DWORD_PTR reserved)
BOOL WINAPI WinHttpCrackUrl(LPCWSTR url, DWORD len, DWORD flags, LPURL_COMPONENTSW uc)
static ULONG connect_timeout
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLdouble GLdouble q
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
GLenum const GLvoid * addr
GLubyte GLubyte GLubyte GLubyte w
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 flag
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
static const WCHAR headW[]
#define DISPID_HTTPREQUEST_OPTION
static const WCHAR emptyW[]
#define InterlockedCompareExchangePointer
#define location(file, line)
static const WCHAR text_plainW[]
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
static unsigned int number
static const char * debugstr_variant(const VARIANT *var)
static struct _PeImage bin
static JOBOBJECTINFOCLASS LPVOID DWORD LPDWORD ret_len
static VARIANTARG static DISPID
static const WCHAR user_agentW[]
static void close_connection(void)
static const WCHAR utf8W[]
static const WCHAR crlfW[]
static const WCHAR spaceW[]
static BOOL ensure_cred_handle(void)
#define LOCALE_SYSTEM_DEFAULT
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
BSTR WINAPI SysAllocStringLen(const OLECHAR *str, unsigned int len)
#define DISPATCH_PROPERTYPUT
#define DISPATCH_PROPERTYGET
#define IsEqualGUID(rguid1, rguid2)
#define IsEqualIID(riid1, riid2)
#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
#define strncmpiW(s1, s2, n)
static const struct @628 auth_schemes[]
static const WCHAR attr_status[]
static HRESULT WINAPI stream_LockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER len, DWORD locktype)
static const WCHAR attr_upgrade[]
static HRESULT request_receive(struct winhttp_request *request)
static BOOL secure_proxy_connect(struct request *request)
static const WCHAR attr_vary[]
static BOOL discard_eol(struct request *request, BOOL notify)
static char * build_wire_request(struct request *request, DWORD *len)
static const WCHAR attr_expect[]
static BOOL need_escape(char ch, enum escape_flags flags)
static const WCHAR attr_if_none_match[]
static const WCHAR attr_user_agent[]
static WCHAR * build_request_string(struct request *request)
static const WCHAR attr_location[]
static const WCHAR attr_proxy_authorization[]
static const WCHAR attr_content_length[]
static HRESULT WINAPI winhttp_request_SetClientCertificate(IWinHttpRequest *iface, BSTR certificate)
static const WCHAR attr_accept_charset[]
static const WCHAR digestW[]
static BOOL delete_header(struct request *request, DWORD index)
static const WCHAR attr_host[]
static const WCHAR attr_from[]
static HRESULT WINAPI winhttp_request_SetRequestHeader(IWinHttpRequest *iface, BSTR header, BSTR value)
BOOL WINAPI WinHttpWriteData(HINTERNET hrequest, LPCVOID buffer, DWORD to_write, LPDWORD written)
static HRESULT WINAPI winhttp_request_GetIDsOfNames(IWinHttpRequest *iface, REFIID riid, LPOLESTR *names, UINT count, LCID lcid, DISPID *dispid)
static HRESULT WINAPI stream_Stat(IStream *iface, STATSTG *stg, DWORD flag)
static HRESULT WINAPI winhttp_request_GetTypeInfo(IWinHttpRequest *iface, UINT index, LCID lcid, ITypeInfo **info)
static const WCHAR attr_referer[]
static const WCHAR attr_allow[]
static void request_set_utf8_content_type(struct winhttp_request *request)
static const WCHAR attr_pragma[]
static HRESULT WINAPI winhttp_request_put_Option(IWinHttpRequest *iface, WinHttpRequestOption option, VARIANT value)
static const WCHAR attr_set_cookie[]
static BOOL handle_authorization(struct request *request, DWORD status)
static HRESULT WINAPI winhttp_request_get_StatusText(IWinHttpRequest *iface, BSTR *status)
static BOOL valid_token_char(WCHAR c)
static void CALLBACK task_proc(TP_CALLBACK_INSTANCE *instance, void *ctx)
static DWORD auth_scheme_from_header(const WCHAR *header)
static ULONG WINAPI stream_AddRef(IStream *iface)
static void wait_set_status_callback(struct winhttp_request *request, DWORD status)
static const WCHAR passportW[]
static BOOL do_authorization(struct request *request, DWORD target, DWORD scheme_flag)
static ULONG WINAPI winhttp_request_Release(IWinHttpRequest *iface)
static DWORD request_get_codepage(struct winhttp_request *request, UINT *codepage)
static const WCHAR attr_content_base[]
static struct list connection_pool
static BOOL handle_passport_redirect(struct request *request)
static HRESULT WINAPI winhttp_request_SetProxy(IWinHttpRequest *iface, HTTPREQUEST_PROXY_SETTING proxy_setting, VARIANT proxy_server, VARIANT bypass_list)
BOOL WINAPI WinHttpQueryHeaders(HINTERNET hrequest, DWORD level, LPCWSTR name, LPVOID buffer, LPDWORD buflen, LPDWORD index)
static const WCHAR attr_accept_ranges[]
static HRESULT WINAPI winhttp_request_get_ResponseText(IWinHttpRequest *iface, BSTR *body)
static HRESULT WINAPI stream_Clone(IStream *iface, IStream **stream)
static const WCHAR basicW[]
static const struct IWinHttpRequestVtbl winhttp_request_vtbl
static HRESULT WINAPI winhttp_request_Abort(IWinHttpRequest *iface)
#define DEFAULT_KEEP_ALIVE_TIMEOUT
BOOL process_header(struct request *request, const WCHAR *field, const WCHAR *value, DWORD flags, BOOL request_only)
static ITypeInfo * winhttp_typeinfo[last_tid]
BOOL WINAPI WinHttpAddRequestHeaders(HINTERNET hrequest, LPCWSTR headers, DWORD len, DWORD flags)
static HRESULT WINAPI stream_CopyTo(IStream *iface, IStream *stream, ULARGE_INTEGER len, ULARGE_INTEGER *read, ULARGE_INTEGER *written)
static HRESULT WINAPI winhttp_request_QueryInterface(IWinHttpRequest *iface, REFIID riid, void **obj)
static const WCHAR attr_unless_modified_since[]
static BOOL connection_collector_running
static unsigned int decode_base64(const WCHAR *base64, unsigned int len, char *buf)
#define ESCAPE_MASK_DISABLE
static DWORD set_content_length(struct request *request, DWORD status)
static BOOL end_of_read_data(struct request *request)
static const WCHAR attr_if_range[]
BOOL WINAPI WinHttpReadData(HINTERNET hrequest, LPVOID buffer, DWORD to_read, LPDWORD read)
static void clear_response_headers(struct request *request)
static HRESULT WINAPI winhttp_request_Send(IWinHttpRequest *iface, VARIANT body)
static HRESULT WINAPI winhttp_request_get_ResponseStream(IWinHttpRequest *iface, VARIANT *body)
static const WCHAR attr_etag[]
static BOOL add_host_header(struct request *request, DWORD modifier)
static BOOL start_next_chunk(struct request *request, BOOL notify)
static BOOL get_authvalue(struct request *request, DWORD level, DWORD scheme, WCHAR *buffer, DWORD len)
static const WCHAR attr_cookie[]
static const WCHAR attr_server[]
static const WCHAR attr_connection[]
static const WCHAR negotiateW[]
static BOOL query_auth_schemes(struct request *request, DWORD level, DWORD *supported, DWORD *first)
void release_host(struct hostdata *host)
static ITypeLib * winhttp_typelib
static DWORD get_available_data(struct request *request)
static char decode_char(WCHAR c)
static const WCHAR attr_mime_version[]
static void free_header(struct header *header)
static HRESULT get_typeinfo(enum type_id tid, ITypeInfo **ret)
static const WCHAR attr_retry_after[]
static HRESULT WINAPI winhttp_request_WaitForResponse(IWinHttpRequest *iface, VARIANT timeout, VARIANT_BOOL *succeeded)
static HRESULT WINAPI stream_UnlockRegion(IStream *iface, ULARGE_INTEGER offset, ULARGE_INTEGER len, DWORD locktype)
static ULONG WINAPI stream_Release(IStream *iface)
static void drain_content(struct request *request)
#define INITIAL_HEADER_BUFFER_LEN
static DWORD request_wait(struct winhttp_request *request, DWORD timeout)
static const WCHAR attr_public[]
static HRESULT WINAPI winhttp_request_SetAutoLogonPolicy(IWinHttpRequest *iface, WinHttpRequestAutoLogonPolicy policy)
BOOL WINAPI WinHttpQueryDataAvailable(HINTERNET hrequest, LPDWORD available)
static DWORD wait_for_completion(struct winhttp_request *request)
static BOOL query_data_available(struct request *request, DWORD *available, BOOL async)
static enum auth_scheme scheme_from_flag(DWORD flag)
static struct authinfo * alloc_authinfo(void)
static BOOL insert_header(struct request *request, struct header *header)
static void finished_reading(struct request *request)
static HRESULT WINAPI winhttp_request_Open(IWinHttpRequest *iface, BSTR method, BSTR url, VARIANT async)
static const WCHAR attr_content_type[]
static UINT encode_base64(const char *bin, unsigned int len, WCHAR *base64)
BOOL add_request_headers(struct request *request, const WCHAR *headers, DWORD len, DWORD flags)
BOOL WINAPI WinHttpSendRequest(HINTERNET hrequest, LPCWSTR headers, DWORD headers_len, LPVOID optional, DWORD optional_len, DWORD total_len, DWORD_PTR context)
static HRESULT WINAPI winhttp_request_GetTypeInfoCount(IWinHttpRequest *iface, UINT *count)
static HRESULT WINAPI winhttp_request_SetTimeouts(IWinHttpRequest *iface, LONG resolve_timeout, LONG connect_timeout, LONG send_timeout, LONG receive_timeout)
static void reset_request(struct winhttp_request *request)
static const WCHAR attr_content_range[]
static BOOL handle_redirect(struct request *request, DWORD status)
static void remove_data(struct request *request, int count)
static const WCHAR attr_last_modified[]
static WCHAR * get_redirect_url(struct request *request, DWORD *len)
static DWORD map_secure_protocols(DWORD mask)
static void task_write_data(struct task_header *task)
static const WCHAR attr_authorization[]
static struct task_header * dequeue_task(struct request *request)
static const WCHAR attr_uri[]
static void initialize_request(struct winhttp_request *request)
static void cancel_request(struct winhttp_request *request)
static const WCHAR attr_if_match[]
static const WCHAR attr_date[]
void release_typelib(void)
#define ESCAPE_MASK_PERCENT
static const WCHAR attr_expires[]
static BOOL read_more_data(struct request *request, int maxlen, BOOL notify)
static HRESULT WINAPI stream_Revert(IStream *iface)
static DWORD escape_string(const char *src, DWORD len, char *dst, enum escape_flags flags)
static void CALLBACK wait_status_callback(HINTERNET handle, DWORD_PTR context, DWORD status, LPVOID buffer, DWORD size)
BOOL WINAPI WinHttpSetCredentials(HINTERNET hrequest, DWORD target, DWORD scheme, LPCWSTR username, LPCWSTR password, LPVOID params)
static BOOL is_passport_request(struct request *request)
static BOOL queue_task(struct task_header *task)
static HRESULT WINAPI winhttp_request_GetResponseHeader(IWinHttpRequest *iface, BSTR header, BSTR *value)
static HRESULT WINAPI stream_Seek(IStream *iface, LARGE_INTEGER move, DWORD origin, ULARGE_INTEGER *newpos)
static struct winhttp_request * impl_from_IWinHttpRequest(IWinHttpRequest *iface)
static HRESULT WINAPI stream_SetSize(IStream *iface, ULARGE_INTEGER newsize)
static BOOL refill_buffer(struct request *request, BOOL notify)
static BOOL set_credentials(struct request *request, DWORD target, DWORD scheme_flag, const WCHAR *username, const WCHAR *password)
static const WCHAR attr_warning[]
#define ESCAPE_MASK_DEFAULT
static const WCHAR attr_proxy_connection[]
static WCHAR * build_absolute_request_path(struct request *request, const WCHAR **path)
static void task_read_data(struct task_header *task)
static const WCHAR * attribute_table[]
static const WCHAR attr_proxy_authenticate[]
static const WCHAR attr_accept_language[]
static HRESULT WINAPI winhttp_request_GetAllResponseHeaders(IWinHttpRequest *iface, BSTR *headers)
static HRESULT WINAPI stream_Write(IStream *iface, const void *buf, ULONG len, ULONG *written)
static struct stream * impl_from_IStream(IStream *iface)
static void record_cookies(struct request *request)
HRESULT WinHttpRequest_create(void **obj)
static const WCHAR attr_content_transfer_encoding[]
static char * build_wire_path(struct request *request, DWORD *ret_len)
static CRITICAL_SECTION connection_pool_cs
@ ESCAPE_FLAG_NON_PRINTABLE
static void CALLBACK connection_collector(TP_CALLBACK_INSTANCE *instance, void *ctx)
static BOOL open_connection(struct request *request)
static BOOL query_headers(struct request *request, DWORD level, const WCHAR *name, void *buffer, DWORD *buflen, DWORD *index)
static HRESULT request_send(struct winhttp_request *request)
@ REQUEST_STATE_RESPONSE_RECEIVED
@ REQUEST_STATE_INITIALIZED
@ REQUEST_STATE_CANCELLED
static const WCHAR attr_accept_encoding[]
static const WCHAR attr_via[]
static HRESULT WINAPI winhttp_request_get_Option(IWinHttpRequest *iface, WinHttpRequestOption option, VARIANT *value)
static HRESULT WINAPI stream_QueryInterface(IStream *iface, REFIID riid, void **obj)
static const WCHAR attr_content_id[]
static const WCHAR attr_if_unmodified_since[]
static const WCHAR attr_age[]
static WCHAR * addr_to_str(struct sockaddr_storage *addr)
static CRITICAL_SECTION_DEBUG connection_pool_debug
void destroy_authinfo(struct authinfo *authinfo)
static const WCHAR attr_range[]
static void task_receive_response(struct task_header *task)
static const WCHAR attr_cache_control[]
static HRESULT WINAPI winhttp_request_get_Status(IWinHttpRequest *iface, LONG *status)
static const WCHAR attr_content_md5[]
static const WCHAR attr_if_modified_since[]
static const WCHAR attr_content_language[]
static const WCHAR attr_transfer_encoding[]
static HRESULT WINAPI stream_Commit(IStream *iface, DWORD flags)
static const WCHAR attr_accept[]
static HRESULT WINAPI stream_Read(IStream *iface, void *buf, ULONG len, ULONG *read)
static void CALLBACK send_and_receive_proc(TP_CALLBACK_INSTANCE *instance, void *ctx)
static ULONG WINAPI winhttp_request_AddRef(IWinHttpRequest *iface)
static REFIID winhttp_tid_id[]
static void task_query_data_available(struct task_header *task)
static void free_request(struct winhttp_request *request)
static const WCHAR attr_max_forwards[]
static DWORD str_to_wire(const WCHAR *src, int src_len, char *dst, enum escape_flags flags)
static const WCHAR ntlmW[]
static const IStreamVtbl stream_vtbl
static void task_send_request(struct task_header *task)
static const WCHAR attr_content_encoding[]
static HRESULT WINAPI winhttp_request_Invoke(IWinHttpRequest *iface, DISPID member, REFIID riid, LCID lcid, WORD flags, DISPPARAMS *params, VARIANT *result, EXCEPINFO *excep_info, UINT *arg_err)
static int get_header_index(struct request *request, const WCHAR *field, int requested_index, BOOL request_only)
static HRESULT WINAPI winhttp_request_get_ResponseBody(IWinHttpRequest *iface, VARIANT *body)
BOOL WINAPI WinHttpReceiveResponse(HINTERNET hrequest, LPVOID reserved)
static DWORD request_set_parameters(struct winhttp_request *request)
static void cache_connection(struct netconn *netconn)
static const WCHAR attr_www_authenticate[]
static HRESULT WINAPI winhttp_request_SetCredentials(IWinHttpRequest *iface, BSTR username, BSTR password, HTTPREQUEST_SETCREDENTIALS_FLAGS flags)
static BOOL read_reply(struct request *request)
BOOL WINAPI WinHttpQueryAuthSchemes(HINTERNET hrequest, LPDWORD supported, LPDWORD first, LPDWORD target)
static WCHAR * build_proxy_connect_string(struct request *request)
static const WCHAR attr_content_location[]
static struct header * parse_header(const WCHAR *string)
static BOOL is_secure(RpcConnection_http *httpc)
#define SEC_WINNT_AUTH_IDENTITY_UNICODE
#define SP_PROT_TLS1_1_CLIENT
#define SP_PROT_TLS1_CLIENT
#define SCHANNEL_CRED_VERSION
#define SP_PROT_TLS1_2_CLIENT
#define SP_PROT_SSL2_CLIENT
#define SP_PROT_SSL3_CLIENT
__WINE_SERVER_LIST_INLINE unsigned int list_count(const struct list *list)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
static const void * body(MD5_CTX *ctx, const void *data, unsigned long size)
vector< Header * > headers
SECURITY_STATUS WINAPI FreeContextBuffer(PVOID pv)
LIST_ENTRY ProcessLocksList
PCRITICAL_SECTION_DEBUG DebugInfo
DWORD grbitEnabledProtocols
struct sockaddr_storage sockaddr
struct sockaddr_storage sockaddr
const CERT_CONTEXT * server_cert
const CERT_CONTEXT * client_cert
struct authinfo * authinfo
int receive_response_timeout
BOOL cred_handle_initialized
struct authinfo * proxy_authinfo
struct request::@629 creds[TARGET_MAX][SCHEME_MAX]
IWinHttpRequest IWinHttpRequest_iface
DWORD WINAPI WaitForMultipleObjects(IN DWORD nCount, IN CONST HANDLE *lpHandles, IN BOOL bWaitAll, IN DWORD dwMilliseconds)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, IN BOOL bManualReset, IN BOOL bInitialState, IN LPCWSTR lpName OPTIONAL)
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
TW_UINT32 TW_UINT16 TW_UINT16 MSG
#define CONTAINING_RECORD(address, type, field)
static EFI_HANDLE * handles
const char *WSAAPI inet_ntop(int af, const void *src, char *dst, size_t cnt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantChangeType(VARIANTARG *pvargDest, VARIANTARG *pvargSrc, USHORT wFlags, VARTYPE vt)
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
void WINAPI VariantInit(VARIANTARG *pVarg)
HRESULT WINAPI VariantCopyInd(VARIANT *pvargDest, VARIANTARG *pvargSrc)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
DWORD WINAPI GetLastError(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
struct _SYSTEMTIME SYSTEMTIME
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define ERROR_INVALID_OPERATION
#define DISP_E_UNKNOWNINTERFACE
#define HRESULT_FROM_WIN32(x)
#define SEC_I_CONTINUE_NEEDED
BOOL add_cookie_headers(struct request *request)
BOOL set_cookies(struct request *request, const WCHAR *cookies)
#define WINHTTP_OPTION_PROXY
#define WINHTTP_HANDLE_TYPE_REQUEST
#define WINHTTP_DISABLE_AUTHENTICATION
#define WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
#define WINHTTP_QUERY_CONTENT_LENGTH
#define WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_HIGH
#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_OPEN
#define WINHTTP_OPTION_CONTEXT_VALUE
#define WINHTTP_CALLBACK_STATUS_REDIRECT
#define WINHTTP_FLAG_ESCAPE_DISABLE_QUERY
#define WINHTTP_QUERY_WWW_AUTHENTICATE
#define WINHTTP_QUERY_CONNECTION
#define WINHTTP_CALLBACK_STATUS_SENDING_REQUEST
#define WINHTTP_QUERY_VERSION
#define HTTP_STATUS_NO_CONTENT
#define WINHTTP_CALLBACK_STATUS_REQUEST_SENT
#define WINHTTP_OPTION_REDIRECT_POLICY_NEVER
#define WINHTTP_QUERY_FLAG_SYSTEMTIME
#define WINHTTP_AUTH_SCHEME_BASIC
#define WINHTTP_QUERY_PROXY_AUTHENTICATE
#define ERROR_WINHTTP_INVALID_SERVER_RESPONSE
#define WINHTTP_AUTH_SCHEME_PASSPORT
#define WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
#define API_QUERY_DATA_AVAILABLE
#define WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
#define WINHTTP_QUERY_PROXY_CONNECTION
#define WINHTTP_OPTION_DISABLE_FEATURE
#define HTTP_STATUS_PROXY_AUTH_REQ
#define WINHTTP_ADDREQ_FLAG_ADD_IF_NEW
#define WINHTTP_DISABLE_KEEP_ALIVE
#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON
#define WINHTTP_QUERY_STATUS_CODE
#define WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
#define WINHTTP_QUERY_FLAG_REQUEST_HEADERS
#define WINHTTP_ACCESS_TYPE_DEFAULT_PROXY
#define WINHTTP_ENABLE_PASSPORT_AUTH
#define WINHTTP_ACCESS_TYPE_NAMED_PROXY
#define WINHTTP_QUERY_CONTENT_TYPE
#define WINHTTP_CALLBACK_STATUS_READ_COMPLETE
#define WINHTTP_OPTION_REDIRECT_POLICY_DISALLOW_HTTPS_TO_HTTP
#define WINHTTP_AUTH_SCHEME_NEGOTIATE
#define WINHTTP_AUTH_TARGET_SERVER
#define WINHTTP_QUERY_LOCATION
#define ERROR_WINHTTP_INCORRECT_HANDLE_STATE
#define WINHTTP_ADDREQ_FLAG_ADD
#define WINHTTP_AUTH_SCHEME_DIGEST
#define WINHTTP_QUERY_FLAG_NUMBER
#define WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
#define HTTP_STATUS_REDIRECT_KEEP_VERB
#define ERROR_WINHTTP_CANNOT_CALL_BEFORE_SEND
#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL2
#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_MEDIUM
#define WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER
#define WINHTTP_OPTION_AUTOLOGON_POLICY
#define WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER
#define WINHTTP_QUERY_CUSTOM
#define INTERNET_SCHEME_HTTP
#define ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
#define WINHTTP_ACCESS_TYPE_NO_PROXY
#define WINHTTP_QUERY_STATUS_TEXT
#define API_RECEIVE_RESPONSE
#define WINHTTP_CALLBACK_STATUS_SENDREQUEST_COMPLETE
#define WINHTTP_FLAG_ESCAPE_PERCENT
#define WINHTTP_CALLBACK_STATUS_REQUEST_ERROR
#define WINHTTP_FLAG_ASYNC
#define WINHTTP_AUTH_TARGET_PROXY
#define WINHTTP_FLAG_ESCAPE_DISABLE
#define HTTP_STATUS_DENIED
#define WINHTTP_AUTOLOGON_SECURITY_LEVEL_LOW
#define WINHTTP_CALLBACK_STATUS_RESOLVING_NAME
#define WINHTTP_CALLBACK_STATUS_WRITE_COMPLETE
#define WINHTTP_ADDREQ_FLAG_REPLACE
#define ERROR_WINHTTP_HEADER_NOT_FOUND
#define WINHTTP_CALLBACK_STATUS_NAME_RESOLVED
#define WINHTTP_QUERY_TRANSFER_ENCODING
#define HTTP_STATUS_NOT_MODIFIED
#define WINHTTP_QUERY_RAW_HEADERS_CRLF
#define WINHTTP_FLAG_SECURE
#define INTERNET_DEFAULT_HTTP_PORT
#define WINHTTP_QUERY_REQUEST_METHOD
#define WINHTTP_DISABLE_REDIRECTS
#define ERROR_WINHTTP_CANNOT_CALL_AFTER_SEND
#define INTERNET_SCHEME_HTTPS
#define WINHTTP_FLAG_REFRESH
#define WINHTTP_FLAG_SECURE_PROTOCOL_SSL3
#define HTTP_STATUS_REDIRECT
#define HTTP_STATUS_MOVED
#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2
#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_1
#define WINHTTP_AUTH_SCHEME_NTLM
#define WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA
#define WINHTTP_DISABLE_COOKIES
#define WINHTTP_QUERY_RAW_HEADERS
#define INTERNET_DEFAULT_HTTPS_PORT
#define WINHTTP_FLAG_SECURE_PROTOCOL_TLS1
static const WCHAR http1_1[]
static const WCHAR postW[]
static const WCHAR http1_0[]
static const WCHAR chunkedW[]
DWORD set_cookie(substr_t domain, substr_t path, substr_t name, substr_t data, DWORD flags)
struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE
BOOL WINAPI TranslateMessage(_In_ const MSG *)
DWORD WINAPI MsgWaitForMultipleObjects(_In_ DWORD nCount, _In_reads_opt_(nCount) CONST HANDLE *pHandles, _In_ BOOL fWaitAll, _In_ DWORD dwMilliseconds, _In_ DWORD dwWakeMask)
BOOL WINAPI PeekMessageW(_Out_ LPMSG, _In_opt_ HWND, _In_ UINT, _In_ UINT, _In_ UINT)
LRESULT WINAPI DispatchMessageW(_In_ const MSG *)
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)