winhttp: Use wide character string literals.
Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
26df43d8ca
commit
5bf055a62d
|
@ -262,8 +262,6 @@ static struct attr *parse_attr( const WCHAR *str, int *used )
|
|||
|
||||
BOOL set_cookies( struct request *request, const WCHAR *cookies )
|
||||
{
|
||||
static const WCHAR pathW[] = {'p','a','t','h',0};
|
||||
static const WCHAR domainW[] = {'d','o','m','a','i','n',0};
|
||||
BOOL ret = FALSE;
|
||||
WCHAR *buffer, *p;
|
||||
WCHAR *cookie_domain = NULL, *cookie_path = NULL;
|
||||
|
@ -287,12 +285,12 @@ BOOL set_cookies( struct request *request, const WCHAR *cookies )
|
|||
len = lstrlenW( p );
|
||||
while (len && (attr = parse_attr( p, &used )))
|
||||
{
|
||||
if (!wcsicmp( attr->name, domainW ))
|
||||
if (!wcsicmp( attr->name, L"domain" ))
|
||||
{
|
||||
domain = attr;
|
||||
cookie_domain = attr->value;
|
||||
}
|
||||
else if (!wcsicmp( attr->name, pathW ))
|
||||
else if (!wcsicmp( attr->name, L"path" ))
|
||||
{
|
||||
path = attr;
|
||||
cookie_path = attr->value;
|
||||
|
|
|
@ -41,136 +41,79 @@ WINE_DEFAULT_DEBUG_CHANNEL(winhttp);
|
|||
|
||||
#define DEFAULT_KEEP_ALIVE_TIMEOUT 30000
|
||||
|
||||
static const WCHAR attr_accept[] = {'A','c','c','e','p','t',0};
|
||||
static const WCHAR attr_accept_charset[] = {'A','c','c','e','p','t','-','C','h','a','r','s','e','t', 0};
|
||||
static const WCHAR attr_accept_encoding[] = {'A','c','c','e','p','t','-','E','n','c','o','d','i','n','g',0};
|
||||
static const WCHAR attr_accept_language[] = {'A','c','c','e','p','t','-','L','a','n','g','u','a','g','e',0};
|
||||
static const WCHAR attr_accept_ranges[] = {'A','c','c','e','p','t','-','R','a','n','g','e','s',0};
|
||||
static const WCHAR attr_age[] = {'A','g','e',0};
|
||||
static const WCHAR attr_allow[] = {'A','l','l','o','w',0};
|
||||
static const WCHAR attr_authorization[] = {'A','u','t','h','o','r','i','z','a','t','i','o','n',0};
|
||||
static const WCHAR attr_cache_control[] = {'C','a','c','h','e','-','C','o','n','t','r','o','l',0};
|
||||
static const WCHAR attr_connection[] = {'C','o','n','n','e','c','t','i','o','n',0};
|
||||
static const WCHAR attr_content_base[] = {'C','o','n','t','e','n','t','-','B','a','s','e',0};
|
||||
static const WCHAR attr_content_encoding[] = {'C','o','n','t','e','n','t','-','E','n','c','o','d','i','n','g',0};
|
||||
static const WCHAR attr_content_id[] = {'C','o','n','t','e','n','t','-','I','D',0};
|
||||
static const WCHAR attr_content_language[] = {'C','o','n','t','e','n','t','-','L','a','n','g','u','a','g','e',0};
|
||||
static const WCHAR attr_content_length[] = {'C','o','n','t','e','n','t','-','L','e','n','g','t','h',0};
|
||||
static const WCHAR attr_content_location[] = {'C','o','n','t','e','n','t','-','L','o','c','a','t','i','o','n',0};
|
||||
static const WCHAR attr_content_md5[] = {'C','o','n','t','e','n','t','-','M','D','5',0};
|
||||
static const WCHAR attr_content_range[] = {'C','o','n','t','e','n','t','-','R','a','n','g','e',0};
|
||||
static 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};
|
||||
static const WCHAR attr_content_type[] = {'C','o','n','t','e','n','t','-','T','y','p','e',0};
|
||||
static const WCHAR attr_cookie[] = {'C','o','o','k','i','e',0};
|
||||
static const WCHAR attr_date[] = {'D','a','t','e',0};
|
||||
static const WCHAR attr_from[] = {'F','r','o','m',0};
|
||||
static const WCHAR attr_etag[] = {'E','T','a','g',0};
|
||||
static const WCHAR attr_expect[] = {'E','x','p','e','c','t',0};
|
||||
static const WCHAR attr_expires[] = {'E','x','p','i','r','e','s',0};
|
||||
static const WCHAR attr_host[] = {'H','o','s','t',0};
|
||||
static const WCHAR attr_if_match[] = {'I','f','-','M','a','t','c','h',0};
|
||||
static const WCHAR attr_if_modified_since[] = {'I','f','-','M','o','d','i','f','i','e','d','-','S','i','n','c','e',0};
|
||||
static const WCHAR attr_if_none_match[] = {'I','f','-','N','o','n','e','-','M','a','t','c','h',0};
|
||||
static const WCHAR attr_if_range[] = {'I','f','-','R','a','n','g','e',0};
|
||||
static const WCHAR attr_if_unmodified_since[] = {'I','f','-','U','n','m','o','d','i','f','i','e','d','-','S','i','n','c','e',0};
|
||||
static const WCHAR attr_last_modified[] = {'L','a','s','t','-','M','o','d','i','f','i','e','d',0};
|
||||
static const WCHAR attr_location[] = {'L','o','c','a','t','i','o','n',0};
|
||||
static const WCHAR attr_max_forwards[] = {'M','a','x','-','F','o','r','w','a','r','d','s',0};
|
||||
static const WCHAR attr_mime_version[] = {'M','i','m','e','-','V','e','r','s','i','o','n',0};
|
||||
static const WCHAR attr_pragma[] = {'P','r','a','g','m','a',0};
|
||||
static const WCHAR attr_proxy_authenticate[] = {'P','r','o','x','y','-','A','u','t','h','e','n','t','i','c','a','t','e',0};
|
||||
static const WCHAR attr_proxy_authorization[] = {'P','r','o','x','y','-','A','u','t','h','o','r','i','z','a','t','i','o','n',0};
|
||||
static const WCHAR attr_proxy_connection[] = {'P','r','o','x','y','-','C','o','n','n','e','c','t','i','o','n',0};
|
||||
static const WCHAR attr_public[] = {'P','u','b','l','i','c',0};
|
||||
static const WCHAR attr_range[] = {'R','a','n','g','e',0};
|
||||
static const WCHAR attr_referer[] = {'R','e','f','e','r','e','r',0};
|
||||
static const WCHAR attr_retry_after[] = {'R','e','t','r','y','-','A','f','t','e','r',0};
|
||||
static const WCHAR attr_server[] = {'S','e','r','v','e','r',0};
|
||||
static const WCHAR attr_set_cookie[] = {'S','e','t','-','C','o','o','k','i','e',0};
|
||||
static const WCHAR attr_status[] = {'S','t','a','t','u','s',0};
|
||||
static const WCHAR attr_transfer_encoding[] = {'T','r','a','n','s','f','e','r','-','E','n','c','o','d','i','n','g',0};
|
||||
static 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};
|
||||
static const WCHAR attr_upgrade[] = {'U','p','g','r','a','d','e',0};
|
||||
static const WCHAR attr_uri[] = {'U','R','I',0};
|
||||
static const WCHAR attr_user_agent[] = {'U','s','e','r','-','A','g','e','n','t',0};
|
||||
static const WCHAR attr_vary[] = {'V','a','r','y',0};
|
||||
static const WCHAR attr_via[] = {'V','i','a',0};
|
||||
static const WCHAR attr_warning[] = {'W','a','r','n','i','n','g',0};
|
||||
static const WCHAR attr_www_authenticate[] = {'W','W','W','-','A','u','t','h','e','n','t','i','c','a','t','e',0};
|
||||
|
||||
static const WCHAR *attribute_table[] =
|
||||
{
|
||||
attr_mime_version, /* WINHTTP_QUERY_MIME_VERSION = 0 */
|
||||
attr_content_type, /* WINHTTP_QUERY_CONTENT_TYPE = 1 */
|
||||
attr_content_transfer_encoding, /* WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2 */
|
||||
attr_content_id, /* WINHTTP_QUERY_CONTENT_ID = 3 */
|
||||
L"Mime-Version", /* WINHTTP_QUERY_MIME_VERSION = 0 */
|
||||
L"Content-Type" , /* WINHTTP_QUERY_CONTENT_TYPE = 1 */
|
||||
L"Content-Transfer-Encoding", /* WINHTTP_QUERY_CONTENT_TRANSFER_ENCODING = 2 */
|
||||
L"Content-ID", /* WINHTTP_QUERY_CONTENT_ID = 3 */
|
||||
NULL, /* WINHTTP_QUERY_CONTENT_DESCRIPTION = 4 */
|
||||
attr_content_length, /* WINHTTP_QUERY_CONTENT_LENGTH = 5 */
|
||||
attr_content_language, /* WINHTTP_QUERY_CONTENT_LANGUAGE = 6 */
|
||||
attr_allow, /* WINHTTP_QUERY_ALLOW = 7 */
|
||||
attr_public, /* WINHTTP_QUERY_PUBLIC = 8 */
|
||||
attr_date, /* WINHTTP_QUERY_DATE = 9 */
|
||||
attr_expires, /* WINHTTP_QUERY_EXPIRES = 10 */
|
||||
attr_last_modified, /* WINHTTP_QUERY_LAST_MODIFIEDcw = 11 */
|
||||
L"Content-Length", /* WINHTTP_QUERY_CONTENT_LENGTH = 5 */
|
||||
L"Content-Language", /* WINHTTP_QUERY_CONTENT_LANGUAGE = 6 */
|
||||
L"Allow", /* WINHTTP_QUERY_ALLOW = 7 */
|
||||
L"Public", /* WINHTTP_QUERY_PUBLIC = 8 */
|
||||
L"Date", /* WINHTTP_QUERY_DATE = 9 */
|
||||
L"Expires", /* WINHTTP_QUERY_EXPIRES = 10 */
|
||||
L"Last-Modified", /* WINHTTP_QUERY_LAST_MODIFIEDcw = 11 */
|
||||
NULL, /* WINHTTP_QUERY_MESSAGE_ID = 12 */
|
||||
attr_uri, /* WINHTTP_QUERY_URI = 13 */
|
||||
attr_from, /* WINHTTP_QUERY_DERIVED_FROM = 14 */
|
||||
L"URI", /* WINHTTP_QUERY_URI = 13 */
|
||||
L"From", /* WINHTTP_QUERY_DERIVED_FROM = 14 */
|
||||
NULL, /* WINHTTP_QUERY_COST = 15 */
|
||||
NULL, /* WINHTTP_QUERY_LINK = 16 */
|
||||
attr_pragma, /* WINHTTP_QUERY_PRAGMA = 17 */
|
||||
L"Pragma", /* WINHTTP_QUERY_PRAGMA = 17 */
|
||||
NULL, /* WINHTTP_QUERY_VERSION = 18 */
|
||||
attr_status, /* WINHTTP_QUERY_STATUS_CODE = 19 */
|
||||
L"Status", /* WINHTTP_QUERY_STATUS_CODE = 19 */
|
||||
NULL, /* WINHTTP_QUERY_STATUS_TEXT = 20 */
|
||||
NULL, /* WINHTTP_QUERY_RAW_HEADERS = 21 */
|
||||
NULL, /* WINHTTP_QUERY_RAW_HEADERS_CRLF = 22 */
|
||||
attr_connection, /* WINHTTP_QUERY_CONNECTION = 23 */
|
||||
attr_accept, /* WINHTTP_QUERY_ACCEPT = 24 */
|
||||
attr_accept_charset, /* WINHTTP_QUERY_ACCEPT_CHARSET = 25 */
|
||||
attr_accept_encoding, /* WINHTTP_QUERY_ACCEPT_ENCODING = 26 */
|
||||
attr_accept_language, /* WINHTTP_QUERY_ACCEPT_LANGUAGE = 27 */
|
||||
attr_authorization, /* WINHTTP_QUERY_AUTHORIZATION = 28 */
|
||||
attr_content_encoding, /* WINHTTP_QUERY_CONTENT_ENCODING = 29 */
|
||||
L"Connection", /* WINHTTP_QUERY_CONNECTION = 23 */
|
||||
L"Accept", /* WINHTTP_QUERY_ACCEPT = 24 */
|
||||
L"Accept-Charset", /* WINHTTP_QUERY_ACCEPT_CHARSET = 25 */
|
||||
L"Accept-Encoding", /* WINHTTP_QUERY_ACCEPT_ENCODING = 26 */
|
||||
L"Accept-Language", /* WINHTTP_QUERY_ACCEPT_LANGUAGE = 27 */
|
||||
L"Authorization", /* WINHTTP_QUERY_AUTHORIZATION = 28 */
|
||||
L"Content-Encoding", /* WINHTTP_QUERY_CONTENT_ENCODING = 29 */
|
||||
NULL, /* WINHTTP_QUERY_FORWARDED = 30 */
|
||||
NULL, /* WINHTTP_QUERY_FROM = 31 */
|
||||
attr_if_modified_since, /* WINHTTP_QUERY_IF_MODIFIED_SINCE = 32 */
|
||||
attr_location, /* WINHTTP_QUERY_LOCATION = 33 */
|
||||
L"If-Modified-Since", /* WINHTTP_QUERY_IF_MODIFIED_SINCE = 32 */
|
||||
L"Location", /* WINHTTP_QUERY_LOCATION = 33 */
|
||||
NULL, /* WINHTTP_QUERY_ORIG_URI = 34 */
|
||||
attr_referer, /* WINHTTP_QUERY_REFERER = 35 */
|
||||
attr_retry_after, /* WINHTTP_QUERY_RETRY_AFTER = 36 */
|
||||
attr_server, /* WINHTTP_QUERY_SERVER = 37 */
|
||||
L"Referer", /* WINHTTP_QUERY_REFERER = 35 */
|
||||
L"Retry-After", /* WINHTTP_QUERY_RETRY_AFTER = 36 */
|
||||
L"Server", /* WINHTTP_QUERY_SERVER = 37 */
|
||||
NULL, /* WINHTTP_TITLE = 38 */
|
||||
attr_user_agent, /* WINHTTP_QUERY_USER_AGENT = 39 */
|
||||
attr_www_authenticate, /* WINHTTP_QUERY_WWW_AUTHENTICATE = 40 */
|
||||
attr_proxy_authenticate, /* WINHTTP_QUERY_PROXY_AUTHENTICATE = 41 */
|
||||
attr_accept_ranges, /* WINHTTP_QUERY_ACCEPT_RANGES = 42 */
|
||||
attr_set_cookie, /* WINHTTP_QUERY_SET_COOKIE = 43 */
|
||||
attr_cookie, /* WINHTTP_QUERY_COOKIE = 44 */
|
||||
L"User-Agent", /* WINHTTP_QUERY_USER_AGENT = 39 */
|
||||
L"WWW-Authenticate", /* WINHTTP_QUERY_WWW_AUTHENTICATE = 40 */
|
||||
L"Proxy-Authenticate", /* WINHTTP_QUERY_PROXY_AUTHENTICATE = 41 */
|
||||
L"Accept-Ranges", /* WINHTTP_QUERY_ACCEPT_RANGES = 42 */
|
||||
L"Set-Cookie", /* WINHTTP_QUERY_SET_COOKIE = 43 */
|
||||
L"Cookie", /* WINHTTP_QUERY_COOKIE = 44 */
|
||||
NULL, /* WINHTTP_QUERY_REQUEST_METHOD = 45 */
|
||||
NULL, /* WINHTTP_QUERY_REFRESH = 46 */
|
||||
NULL, /* WINHTTP_QUERY_CONTENT_DISPOSITION = 47 */
|
||||
attr_age, /* WINHTTP_QUERY_AGE = 48 */
|
||||
attr_cache_control, /* WINHTTP_QUERY_CACHE_CONTROL = 49 */
|
||||
attr_content_base, /* WINHTTP_QUERY_CONTENT_BASE = 50 */
|
||||
attr_content_location, /* WINHTTP_QUERY_CONTENT_LOCATION = 51 */
|
||||
attr_content_md5, /* WINHTTP_QUERY_CONTENT_MD5 = 52 */
|
||||
attr_content_range, /* WINHTTP_QUERY_CONTENT_RANGE = 53 */
|
||||
attr_etag, /* WINHTTP_QUERY_ETAG = 54 */
|
||||
attr_host, /* WINHTTP_QUERY_HOST = 55 */
|
||||
attr_if_match, /* WINHTTP_QUERY_IF_MATCH = 56 */
|
||||
attr_if_none_match, /* WINHTTP_QUERY_IF_NONE_MATCH = 57 */
|
||||
attr_if_range, /* WINHTTP_QUERY_IF_RANGE = 58 */
|
||||
attr_if_unmodified_since, /* WINHTTP_QUERY_IF_UNMODIFIED_SINCE = 59 */
|
||||
attr_max_forwards, /* WINHTTP_QUERY_MAX_FORWARDS = 60 */
|
||||
attr_proxy_authorization, /* WINHTTP_QUERY_PROXY_AUTHORIZATION = 61 */
|
||||
attr_range, /* WINHTTP_QUERY_RANGE = 62 */
|
||||
attr_transfer_encoding, /* WINHTTP_QUERY_TRANSFER_ENCODING = 63 */
|
||||
attr_upgrade, /* WINHTTP_QUERY_UPGRADE = 64 */
|
||||
attr_vary, /* WINHTTP_QUERY_VARY = 65 */
|
||||
attr_via, /* WINHTTP_QUERY_VIA = 66 */
|
||||
attr_warning, /* WINHTTP_QUERY_WARNING = 67 */
|
||||
attr_expect, /* WINHTTP_QUERY_EXPECT = 68 */
|
||||
attr_proxy_connection, /* WINHTTP_QUERY_PROXY_CONNECTION = 69 */
|
||||
attr_unless_modified_since, /* WINHTTP_QUERY_UNLESS_MODIFIED_SINCE = 70 */
|
||||
L"Age", /* WINHTTP_QUERY_AGE = 48 */
|
||||
L"Cache-Control", /* WINHTTP_QUERY_CACHE_CONTROL = 49 */
|
||||
L"Content-Base", /* WINHTTP_QUERY_CONTENT_BASE = 50 */
|
||||
L"Content-Location", /* WINHTTP_QUERY_CONTENT_LOCATION = 51 */
|
||||
L"Content-MD5", /* WINHTTP_QUERY_CONTENT_MD5 = 52 */
|
||||
L"Content-Range", /* WINHTTP_QUERY_CONTENT_RANGE = 53 */
|
||||
L"ETag", /* WINHTTP_QUERY_ETAG = 54 */
|
||||
L"Host", /* WINHTTP_QUERY_HOST = 55 */
|
||||
L"If-Match", /* WINHTTP_QUERY_IF_MATCH = 56 */
|
||||
L"If-None-Match", /* WINHTTP_QUERY_IF_NONE_MATCH = 57 */
|
||||
L"If-Range", /* WINHTTP_QUERY_IF_RANGE = 58 */
|
||||
L"If-Unmodified-Since", /* WINHTTP_QUERY_IF_UNMODIFIED_SINCE = 59 */
|
||||
L"Max-Forwards", /* WINHTTP_QUERY_MAX_FORWARDS = 60 */
|
||||
L"Proxy-Authorization", /* WINHTTP_QUERY_PROXY_AUTHORIZATION = 61 */
|
||||
L"Range", /* WINHTTP_QUERY_RANGE = 62 */
|
||||
L"Transfer-Encoding", /* WINHTTP_QUERY_TRANSFER_ENCODING = 63 */
|
||||
L"Upgrade", /* WINHTTP_QUERY_UPGRADE = 64 */
|
||||
L"Vary", /* WINHTTP_QUERY_VARY = 65 */
|
||||
L"Via", /* WINHTTP_QUERY_VIA = 66 */
|
||||
L"Warning", /* WINHTTP_QUERY_WARNING = 67 */
|
||||
L"Expect", /* WINHTTP_QUERY_EXPECT = 68 */
|
||||
L"Proxy-Connection", /* WINHTTP_QUERY_PROXY_CONNECTION = 69 */
|
||||
L"Unless-Modified-Since", /* WINHTTP_QUERY_UNLESS_MODIFIED_SINCE = 70 */
|
||||
NULL, /* WINHTTP_QUERY_PROXY_SUPPORT = 75 */
|
||||
NULL, /* WINHTTP_QUERY_AUTHENTICATION_INFO = 76 */
|
||||
NULL, /* WINHTTP_QUERY_PASSPORT_URLS = 77 */
|
||||
|
@ -543,14 +486,11 @@ BOOL WINAPI WinHttpAddRequestHeaders( HINTERNET hrequest, LPCWSTR headers, DWORD
|
|||
|
||||
static WCHAR *build_absolute_request_path( struct request *request, const WCHAR **path )
|
||||
{
|
||||
static const WCHAR http[] = {'h','t','t','p',0};
|
||||
static const WCHAR https[] = {'h','t','t','p','s',0};
|
||||
static const WCHAR fmt[] = {'%','s',':','/','/','%','s',0};
|
||||
const WCHAR *scheme;
|
||||
WCHAR *ret;
|
||||
int len, offset;
|
||||
|
||||
scheme = (request->netconn ? request->netconn->secure : (request->hdr.flags & WINHTTP_FLAG_SECURE)) ? https : http;
|
||||
scheme = (request->netconn ? request->netconn->secure : (request->hdr.flags & WINHTTP_FLAG_SECURE)) ? L"https" : L"http";
|
||||
|
||||
len = lstrlenW( scheme ) + lstrlenW( request->connect->hostname ) + 4; /* '://' + nul */
|
||||
if (request->connect->hostport) len += 6; /* ':' between host and port, up to 5 for port */
|
||||
|
@ -558,11 +498,10 @@ static WCHAR *build_absolute_request_path( struct request *request, const WCHAR
|
|||
len += lstrlenW( request->path );
|
||||
if ((ret = heap_alloc( len * sizeof(WCHAR) )))
|
||||
{
|
||||
offset = swprintf( ret, len, fmt, scheme, request->connect->hostname );
|
||||
offset = swprintf( ret, len, L"%s://%s", scheme, request->connect->hostname );
|
||||
if (request->connect->hostport)
|
||||
{
|
||||
static const WCHAR port_fmt[] = {':','%','u',0};
|
||||
offset += swprintf( ret + offset, len - offset, port_fmt, request->connect->hostport );
|
||||
offset += swprintf( ret + offset, len - offset, L":%u", request->connect->hostport );
|
||||
}
|
||||
lstrcpyW( ret + offset, request->path );
|
||||
if (path) *path = ret + offset;
|
||||
|
@ -573,8 +512,6 @@ static WCHAR *build_absolute_request_path( struct request *request, const WCHAR
|
|||
|
||||
static WCHAR *build_request_string( struct request *request )
|
||||
{
|
||||
static const WCHAR spaceW[] = {' ',0}, crlfW[] = {'\r','\n',0}, colonW[] = {':',' ',0};
|
||||
static const WCHAR twocrlfW[] = {'\r','\n','\r','\n',0};
|
||||
WCHAR *path, *ret;
|
||||
unsigned int i, len;
|
||||
|
||||
|
@ -595,22 +532,22 @@ static WCHAR *build_request_string( struct request *request )
|
|||
if ((ret = heap_alloc( (len + 1) * sizeof(WCHAR) )))
|
||||
{
|
||||
lstrcpyW( ret, request->verb );
|
||||
lstrcatW( ret, spaceW );
|
||||
lstrcatW( ret, L" " );
|
||||
lstrcatW( ret, path );
|
||||
lstrcatW( ret, spaceW );
|
||||
lstrcatW( ret, L" " );
|
||||
lstrcatW( ret, request->version );
|
||||
|
||||
for (i = 0; i < request->num_headers; i++)
|
||||
{
|
||||
if (request->headers[i].is_request)
|
||||
{
|
||||
lstrcatW( ret, crlfW );
|
||||
lstrcatW( ret, L"\r\n" );
|
||||
lstrcatW( ret, request->headers[i].field );
|
||||
lstrcatW( ret, colonW );
|
||||
lstrcatW( ret, L": " );
|
||||
lstrcatW( ret, request->headers[i].value );
|
||||
}
|
||||
}
|
||||
lstrcatW( ret, twocrlfW );
|
||||
lstrcatW( ret, L"\r\n\r\n" );
|
||||
}
|
||||
|
||||
if (path != request->path) heap_free( path );
|
||||
|
@ -850,12 +787,6 @@ BOOL WINAPI WinHttpQueryHeaders( HINTERNET hrequest, DWORD level, LPCWSTR name,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static const WCHAR basicW[] = {'B','a','s','i','c',0};
|
||||
static const WCHAR ntlmW[] = {'N','T','L','M',0};
|
||||
static const WCHAR passportW[] = {'P','a','s','s','p','o','r','t',0};
|
||||
static const WCHAR digestW[] = {'D','i','g','e','s','t',0};
|
||||
static const WCHAR negotiateW[] = {'N','e','g','o','t','i','a','t','e',0};
|
||||
|
||||
static const struct
|
||||
{
|
||||
const WCHAR *str;
|
||||
|
@ -864,11 +795,11 @@ static const struct
|
|||
}
|
||||
auth_schemes[] =
|
||||
{
|
||||
{ basicW, ARRAY_SIZE(basicW) - 1, WINHTTP_AUTH_SCHEME_BASIC },
|
||||
{ ntlmW, ARRAY_SIZE(ntlmW) - 1, WINHTTP_AUTH_SCHEME_NTLM },
|
||||
{ passportW, ARRAY_SIZE(passportW) - 1, WINHTTP_AUTH_SCHEME_PASSPORT },
|
||||
{ digestW, ARRAY_SIZE(digestW) - 1, WINHTTP_AUTH_SCHEME_DIGEST },
|
||||
{ negotiateW, ARRAY_SIZE(negotiateW) - 1, WINHTTP_AUTH_SCHEME_NEGOTIATE }
|
||||
{ L"Basic", ARRAY_SIZE(L"Basic") - 1, WINHTTP_AUTH_SCHEME_BASIC },
|
||||
{ L"NTLM", ARRAY_SIZE(L"NTLM") - 1, WINHTTP_AUTH_SCHEME_NTLM },
|
||||
{ L"Passport", ARRAY_SIZE(L"Passport") - 1, WINHTTP_AUTH_SCHEME_PASSPORT },
|
||||
{ L"Digest", ARRAY_SIZE(L"Digest") - 1, WINHTTP_AUTH_SCHEME_DIGEST },
|
||||
{ L"Negotiate", ARRAY_SIZE(L"Negotiate") - 1, WINHTTP_AUTH_SCHEME_NEGOTIATE }
|
||||
};
|
||||
|
||||
static enum auth_scheme scheme_from_flag( DWORD flag )
|
||||
|
@ -1147,7 +1078,7 @@ static BOOL do_authorization( struct request *request, DWORD target, DWORD schem
|
|||
case WINHTTP_AUTH_TARGET_SERVER:
|
||||
has_auth_value = get_authvalue( request, WINHTTP_QUERY_WWW_AUTHENTICATE, scheme_flag, auth_value, len );
|
||||
auth_ptr = &request->authinfo;
|
||||
auth_target = attr_authorization;
|
||||
auth_target = L"Authorization";
|
||||
if (request->creds[TARGET_SERVER][scheme].username)
|
||||
{
|
||||
if (scheme != SCHEME_BASIC && !has_auth_value) return FALSE;
|
||||
|
@ -1166,7 +1097,7 @@ static BOOL do_authorization( struct request *request, DWORD target, DWORD schem
|
|||
if (!get_authvalue( request, WINHTTP_QUERY_PROXY_AUTHENTICATE, scheme_flag, auth_value, len ))
|
||||
return FALSE;
|
||||
auth_ptr = &request->proxy_authinfo;
|
||||
auth_target = attr_proxy_authorization;
|
||||
auth_target = L"Proxy-Authorization";
|
||||
if (request->creds[TARGET_PROXY][scheme].username)
|
||||
{
|
||||
username = request->creds[TARGET_PROXY][scheme].username;
|
||||
|
@ -1362,19 +1293,15 @@ static BOOL do_authorization( struct request *request, DWORD target, DWORD schem
|
|||
|
||||
static WCHAR *build_proxy_connect_string( struct request *request )
|
||||
{
|
||||
static const WCHAR fmtW[] = {'%','s',':','%','u',0};
|
||||
static const WCHAR connectW[] = {'C','O','N','N','E','C','T', 0};
|
||||
static const WCHAR spaceW[] = {' ',0}, crlfW[] = {'\r','\n',0}, colonW[] = {':',' ',0};
|
||||
static const WCHAR twocrlfW[] = {'\r','\n','\r','\n',0};
|
||||
WCHAR *ret, *host;
|
||||
unsigned int i;
|
||||
int len = lstrlenW( request->connect->hostname ) + 7;
|
||||
|
||||
if (!(host = heap_alloc( len * sizeof(WCHAR) ))) return NULL;
|
||||
len = swprintf( host, len, fmtW, request->connect->hostname, request->connect->hostport );
|
||||
len = swprintf( host, len, L"%s:%u", request->connect->hostname, request->connect->hostport );
|
||||
|
||||
len += ARRAY_SIZE(connectW);
|
||||
len += ARRAY_SIZE(http1_1);
|
||||
len += ARRAY_SIZE(L"CONNECT");
|
||||
len += ARRAY_SIZE(L"HTTP/1.1");
|
||||
|
||||
for (i = 0; i < request->num_headers; i++)
|
||||
{
|
||||
|
@ -1385,23 +1312,23 @@ static WCHAR *build_proxy_connect_string( struct request *request )
|
|||
|
||||
if ((ret = heap_alloc( (len + 1) * sizeof(WCHAR) )))
|
||||
{
|
||||
lstrcpyW( ret, connectW );
|
||||
lstrcatW( ret, spaceW );
|
||||
lstrcpyW( ret, L"CONNECT" );
|
||||
lstrcatW( ret, L" " );
|
||||
lstrcatW( ret, host );
|
||||
lstrcatW( ret, spaceW );
|
||||
lstrcatW( ret, http1_1 );
|
||||
lstrcatW( ret, L" " );
|
||||
lstrcatW( ret, L"HTTP/1.1" );
|
||||
|
||||
for (i = 0; i < request->num_headers; i++)
|
||||
{
|
||||
if (request->headers[i].is_request)
|
||||
{
|
||||
lstrcatW( ret, crlfW );
|
||||
lstrcatW( ret, L"\r\n" );
|
||||
lstrcatW( ret, request->headers[i].field );
|
||||
lstrcatW( ret, colonW );
|
||||
lstrcatW( ret, L": " );
|
||||
lstrcatW( ret, request->headers[i].value );
|
||||
}
|
||||
}
|
||||
lstrcatW( ret, twocrlfW );
|
||||
lstrcatW( ret, L"\r\n\r\n" );
|
||||
}
|
||||
|
||||
heap_free( host );
|
||||
|
@ -1768,7 +1695,6 @@ static BOOL add_host_header( struct request *request, DWORD modifier )
|
|||
BOOL ret;
|
||||
DWORD len;
|
||||
WCHAR *host;
|
||||
static const WCHAR fmt[] = {'%','s',':','%','u',0};
|
||||
struct connect *connect = request->connect;
|
||||
INTERNET_PORT port;
|
||||
|
||||
|
@ -1776,12 +1702,12 @@ static BOOL add_host_header( struct request *request, DWORD modifier )
|
|||
|
||||
if (port == INTERNET_DEFAULT_HTTP_PORT || port == INTERNET_DEFAULT_HTTPS_PORT)
|
||||
{
|
||||
return process_header( request, attr_host, connect->hostname, modifier, TRUE );
|
||||
return process_header( request, L"Host", connect->hostname, modifier, TRUE );
|
||||
}
|
||||
len = lstrlenW( connect->hostname ) + 7; /* sizeof(":65335") */
|
||||
if (!(host = heap_alloc( len * sizeof(WCHAR) ))) return FALSE;
|
||||
swprintf( host, len, fmt, connect->hostname, port );
|
||||
ret = process_header( request, attr_host, host, modifier, TRUE );
|
||||
swprintf( host, len, L"%s:%u", connect->hostname, port );
|
||||
ret = process_header( request, L"Host", host, modifier, TRUE );
|
||||
heap_free( host );
|
||||
return ret;
|
||||
}
|
||||
|
@ -1921,8 +1847,6 @@ static BOOL refill_buffer( struct request *request, BOOL notify )
|
|||
|
||||
static void finished_reading( struct request *request )
|
||||
{
|
||||
static const WCHAR closeW[] = {'c','l','o','s','e',0};
|
||||
|
||||
BOOL close = FALSE;
|
||||
WCHAR connection[20];
|
||||
DWORD size = sizeof(connection);
|
||||
|
@ -1933,9 +1857,9 @@ static void finished_reading( struct request *request )
|
|||
else if (query_headers( request, WINHTTP_QUERY_CONNECTION, NULL, connection, &size, NULL ) ||
|
||||
query_headers( request, WINHTTP_QUERY_PROXY_CONNECTION, NULL, connection, &size, NULL ))
|
||||
{
|
||||
if (!wcsicmp( connection, closeW )) close = TRUE;
|
||||
if (!wcsicmp( connection, L"close" )) close = TRUE;
|
||||
}
|
||||
else if (!wcscmp( request->version, http1_0 )) close = TRUE;
|
||||
else if (!wcscmp( request->version, L"HTTP/1.0" )) close = TRUE;
|
||||
if (close)
|
||||
{
|
||||
close_connection( request );
|
||||
|
@ -2199,10 +2123,6 @@ static char *build_wire_request( struct request *request, DWORD *len )
|
|||
static BOOL send_request( struct request *request, const WCHAR *headers, DWORD headers_len, void *optional,
|
||||
DWORD optional_len, DWORD total_len, DWORD_PTR context, BOOL async )
|
||||
{
|
||||
static const WCHAR keep_alive[] = {'K','e','e','p','-','A','l','i','v','e',0};
|
||||
static const WCHAR no_cache[] = {'n','o','-','c','a','c','h','e',0};
|
||||
static const WCHAR length_fmt[] = {'%','l','d',0};
|
||||
|
||||
BOOL ret = FALSE;
|
||||
struct connect *connect = request->connect;
|
||||
struct session *session = connect->session;
|
||||
|
@ -2214,7 +2134,7 @@ static BOOL send_request( struct request *request, const WCHAR *headers, DWORD h
|
|||
drain_content( request );
|
||||
|
||||
if (session->agent)
|
||||
process_header( request, attr_user_agent, session->agent, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
process_header( request, L"User-Agent", session->agent, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
|
||||
if (connect->hostname)
|
||||
add_host_header( request, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW );
|
||||
|
@ -2222,20 +2142,20 @@ static BOOL send_request( struct request *request, const WCHAR *headers, DWORD h
|
|||
if (request->creds[TARGET_SERVER][SCHEME_BASIC].username)
|
||||
do_authorization( request, WINHTTP_AUTH_TARGET_SERVER, WINHTTP_AUTH_SCHEME_BASIC );
|
||||
|
||||
if (total_len || (request->verb && !wcscmp( request->verb, postW )))
|
||||
if (total_len || (request->verb && !wcscmp( request->verb, L"POST" )))
|
||||
{
|
||||
WCHAR length[21]; /* decimal long int + null */
|
||||
swprintf( length, ARRAY_SIZE(length), length_fmt, total_len );
|
||||
process_header( request, attr_content_length, length, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
swprintf( length, ARRAY_SIZE(length), L"%ld", total_len );
|
||||
process_header( request, L"Content-Length", length, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
}
|
||||
if (!(request->hdr.disable_flags & WINHTTP_DISABLE_KEEP_ALIVE))
|
||||
{
|
||||
process_header( request, attr_connection, keep_alive, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
process_header( request, L"Connection", L"Keep-Alive", WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
}
|
||||
if (request->hdr.flags & WINHTTP_FLAG_REFRESH)
|
||||
{
|
||||
process_header( request, attr_pragma, no_cache, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
process_header( request, attr_cache_control, no_cache, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
process_header( request, L"Pragma", L"no-cache", WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
process_header( request, L"Cache-Control", L"no-cache", WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
|
||||
}
|
||||
if (headers && !add_request_headers( request, headers, headers_len, WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE ))
|
||||
{
|
||||
|
@ -2452,7 +2372,7 @@ static DWORD set_content_length( struct request *request, DWORD status )
|
|||
WCHAR encoding[20];
|
||||
DWORD buflen = sizeof(request->content_length);
|
||||
|
||||
if (status == HTTP_STATUS_NO_CONTENT || status == HTTP_STATUS_NOT_MODIFIED || !wcscmp( request->verb, headW ))
|
||||
if (status == HTTP_STATUS_NO_CONTENT || status == HTTP_STATUS_NOT_MODIFIED || !wcscmp( request->verb, L"HEAD" ))
|
||||
request->content_length = 0;
|
||||
else
|
||||
{
|
||||
|
@ -2462,7 +2382,7 @@ static DWORD set_content_length( struct request *request, DWORD status )
|
|||
|
||||
buflen = sizeof(encoding);
|
||||
if (query_headers( request, WINHTTP_QUERY_TRANSFER_ENCODING, NULL, encoding, &buflen, NULL ) &&
|
||||
!wcsicmp( encoding, chunkedW ))
|
||||
!wcsicmp( encoding, L"chunked" ))
|
||||
{
|
||||
request->content_length = ~0u;
|
||||
request->read_chunked = TRUE;
|
||||
|
@ -2517,8 +2437,6 @@ static BOOL read_line( struct request *request, char *buffer, DWORD *len )
|
|||
|
||||
static BOOL read_reply( struct request *request )
|
||||
{
|
||||
static const WCHAR crlf[] = {'\r','\n',0};
|
||||
|
||||
char buffer[MAX_REPLY_LEN];
|
||||
DWORD buflen, len, offset, crlf_len = 2; /* lstrlenW(crlf) */
|
||||
char *status_code, *status_text;
|
||||
|
@ -2549,7 +2467,7 @@ static BOOL read_reply( struct request *request )
|
|||
/* we rely on the fact that the protocol is ascii */
|
||||
MultiByteToWideChar( CP_ACP, 0, status_code, len, status_codeW, len );
|
||||
status_codeW[len] = 0;
|
||||
if (!(process_header( request, attr_status, status_codeW,
|
||||
if (!(process_header( request, L"Status", status_codeW,
|
||||
WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE, FALSE )))
|
||||
return FALSE;
|
||||
|
||||
|
@ -2571,7 +2489,7 @@ static BOOL read_reply( struct request *request )
|
|||
len = max( buflen + crlf_len, INITIAL_HEADER_BUFFER_LEN );
|
||||
if (!(raw_headers = heap_alloc( len * sizeof(WCHAR) ))) return FALSE;
|
||||
MultiByteToWideChar( CP_ACP, 0, buffer, buflen, raw_headers, buflen );
|
||||
memcpy( raw_headers + buflen - 1, crlf, sizeof(crlf) );
|
||||
memcpy( raw_headers + buflen - 1, L"\r\n", sizeof(L"\r\n") );
|
||||
|
||||
heap_free( request->raw_headers );
|
||||
request->raw_headers = raw_headers;
|
||||
|
@ -2594,7 +2512,7 @@ static BOOL read_reply( struct request *request )
|
|||
}
|
||||
if (!*buffer)
|
||||
{
|
||||
memcpy( raw_headers + offset, crlf, sizeof(crlf) );
|
||||
memcpy( raw_headers + offset, L"\r\n", sizeof(L"\r\n") );
|
||||
break;
|
||||
}
|
||||
MultiByteToWideChar( CP_ACP, 0, buffer, buflen, raw_headers + offset, buflen );
|
||||
|
@ -2606,7 +2524,7 @@ static BOOL read_reply( struct request *request )
|
|||
break;
|
||||
}
|
||||
free_header( header );
|
||||
memcpy( raw_headers + offset + buflen - 1, crlf, sizeof(crlf) );
|
||||
memcpy( raw_headers + offset + buflen - 1, L"\r\n", sizeof(L"\r\n") );
|
||||
offset += buflen + crlf_len - 1;
|
||||
}
|
||||
|
||||
|
@ -2621,7 +2539,7 @@ static void record_cookies( struct request *request )
|
|||
for (i = 0; i < request->num_headers; i++)
|
||||
{
|
||||
struct header *set_cookie = &request->headers[i];
|
||||
if (!wcsicmp( set_cookie->field, attr_set_cookie ) && !set_cookie->is_request)
|
||||
if (!wcsicmp( set_cookie->field, L"Set-Cookie" ) && !set_cookie->is_request)
|
||||
{
|
||||
set_cookies( request, set_cookie->value );
|
||||
}
|
||||
|
@ -2674,7 +2592,7 @@ static BOOL handle_redirect( struct request *request, DWORD status )
|
|||
len = lstrlenW( request->path ) + 1 + len_loc;
|
||||
if (!(path = heap_alloc( (len + 1) * sizeof(WCHAR) ))) goto end;
|
||||
lstrcpyW( path, request->path );
|
||||
lstrcatW( path, slashW );
|
||||
lstrcatW( path, L"/" );
|
||||
memcpy( path + lstrlenW(path), location, len_loc * sizeof(WCHAR) );
|
||||
path[len_loc] = 0;
|
||||
}
|
||||
|
@ -2732,17 +2650,17 @@ static BOOL handle_redirect( struct request *request, DWORD status )
|
|||
memcpy( request->path, uc.lpszUrlPath, (len + 1) * sizeof(WCHAR) );
|
||||
request->path[len] = 0;
|
||||
}
|
||||
else request->path = strdupW( slashW );
|
||||
else request->path = strdupW( L"/" );
|
||||
}
|
||||
|
||||
/* remove content-type/length headers */
|
||||
if ((index = get_header_index( request, attr_content_type, 0, TRUE )) >= 0) delete_header( request, index );
|
||||
if ((index = get_header_index( request, attr_content_length, 0, TRUE )) >= 0 ) delete_header( request, index );
|
||||
if ((index = get_header_index( request, L"Content-Type", 0, TRUE )) >= 0) delete_header( request, index );
|
||||
if ((index = get_header_index( request, L"Content-Length", 0, TRUE )) >= 0 ) delete_header( request, index );
|
||||
|
||||
if (status != HTTP_STATUS_REDIRECT_KEEP_VERB && !wcscmp( request->verb, postW ))
|
||||
if (status != HTTP_STATUS_REDIRECT_KEEP_VERB && !wcscmp( request->verb, L"POST" ))
|
||||
{
|
||||
heap_free( request->verb );
|
||||
request->verb = strdupW( getW );
|
||||
request->verb = strdupW( L"GET" );
|
||||
request->optional = NULL;
|
||||
request->optional_len = 0;
|
||||
}
|
||||
|
@ -2770,12 +2688,11 @@ static BOOL is_passport_request( struct request *request )
|
|||
|
||||
static BOOL handle_passport_redirect( struct request *request )
|
||||
{
|
||||
static const WCHAR status401W[] = {'4','0','1',0};
|
||||
DWORD flags = WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE;
|
||||
int i, len = lstrlenW( request->raw_headers );
|
||||
WCHAR *p = request->raw_headers;
|
||||
|
||||
if (!process_header( request, attr_status, status401W, flags, FALSE )) return FALSE;
|
||||
if (!process_header( request, L"Status", L"401", flags, FALSE )) return FALSE;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
|
@ -3560,13 +3477,9 @@ static HRESULT WINAPI winhttp_request_Open(
|
|||
BSTR url,
|
||||
VARIANT async )
|
||||
{
|
||||
static const WCHAR typeW[] = {'*','/','*',0};
|
||||
static const WCHAR *acceptW[] = {typeW, NULL};
|
||||
static const WCHAR httpsW[] = {'h','t','t','p','s'};
|
||||
static const WCHAR user_agentW[] = {
|
||||
'M','o','z','i','l','l','a','/','4','.','0',' ','(','c','o','m','p','a','t','i','b','l','e',';',' ',
|
||||
'W','i','n','3','2',';',' ','W','i','n','H','t','t','p','.','W','i','n','H','t','t','p',
|
||||
'R','e','q','u','e','s','t','.','5',')',0};
|
||||
static const WCHAR *acceptW[] = {L"*/*", NULL};
|
||||
static const WCHAR user_agentW[] = L"Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)";
|
||||
struct winhttp_request *request = impl_from_IWinHttpRequest( iface );
|
||||
URL_COMPONENTS uc;
|
||||
WCHAR *hostname, *path = NULL, *verb = NULL;
|
||||
|
@ -3656,8 +3569,6 @@ static HRESULT WINAPI winhttp_request_SetRequestHeader(
|
|||
BSTR header,
|
||||
BSTR value )
|
||||
{
|
||||
static const WCHAR fmtW[] = {'%','s',':',' ','%','s','\r','\n',0};
|
||||
static const WCHAR emptyW[] = {0};
|
||||
struct winhttp_request *request = impl_from_IWinHttpRequest( iface );
|
||||
DWORD len, err = ERROR_SUCCESS;
|
||||
WCHAR *str;
|
||||
|
@ -3684,7 +3595,7 @@ static HRESULT WINAPI winhttp_request_SetRequestHeader(
|
|||
err = ERROR_OUTOFMEMORY;
|
||||
goto done;
|
||||
}
|
||||
swprintf( str, len + 1, fmtW, header, value ? value : emptyW );
|
||||
swprintf( str, len + 1, L"%s: %s\r\n", header, value ? value : L"" );
|
||||
if (!WinHttpAddRequestHeaders( request->hrequest, str, len,
|
||||
WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_REPLACE ))
|
||||
{
|
||||
|
@ -3843,7 +3754,7 @@ static HRESULT request_receive( struct winhttp_request *request )
|
|||
return HRESULT_FROM_WIN32( GetLastError() );
|
||||
}
|
||||
if ((err = wait_for_completion( request ))) return HRESULT_FROM_WIN32( err );
|
||||
if (!wcscmp( request->verb, headW ))
|
||||
if (!wcscmp( request->verb, L"HEAD" ))
|
||||
{
|
||||
request->state = REQUEST_STATE_RESPONSE_RECEIVED;
|
||||
return S_OK;
|
||||
|
@ -3914,15 +3825,13 @@ static DWORD request_set_parameters( struct winhttp_request *request )
|
|||
|
||||
static void request_set_utf8_content_type( struct winhttp_request *request )
|
||||
{
|
||||
static const WCHAR fmtW[] = {'%','s',':',' ','%','s',0};
|
||||
static const WCHAR text_plainW[] = {'t','e','x','t','/','p','l','a','i','n',0};
|
||||
static const WCHAR charset_utf8W[] = {'c','h','a','r','s','e','t','=','u','t','f','-','8',0};
|
||||
WCHAR headerW[64];
|
||||
int len;
|
||||
|
||||
len = swprintf( headerW, ARRAY_SIZE(headerW), fmtW, attr_content_type, text_plainW );
|
||||
len = swprintf( headerW, ARRAY_SIZE(headerW), L"%s: %s", L"Content-Type", L"text/plain" );
|
||||
WinHttpAddRequestHeaders( request->hrequest, headerW, len, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW );
|
||||
len = swprintf( headerW, ARRAY_SIZE(headerW), fmtW, attr_content_type, charset_utf8W );
|
||||
|
||||
len = swprintf( headerW, ARRAY_SIZE(headerW), L"%s: %s", L"Content-Type", L"charset=utf-8" );
|
||||
WinHttpAddRequestHeaders( request->hrequest, headerW, len, WINHTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON );
|
||||
}
|
||||
|
||||
|
@ -3936,7 +3845,7 @@ static HRESULT request_send( struct winhttp_request *request )
|
|||
DWORD err;
|
||||
|
||||
if ((err = request_set_parameters( request ))) return HRESULT_FROM_WIN32( err );
|
||||
if (wcscmp( request->verb, getW ))
|
||||
if (wcscmp( request->verb, L"GET" ))
|
||||
{
|
||||
VariantInit( &data );
|
||||
if (V_VT( &request->data ) == VT_BSTR)
|
||||
|
@ -4139,8 +4048,6 @@ done:
|
|||
|
||||
static DWORD request_get_codepage( struct winhttp_request *request, UINT *codepage )
|
||||
{
|
||||
static const WCHAR utf8W[] = {'u','t','f','-','8',0};
|
||||
static const WCHAR charsetW[] = {'c','h','a','r','s','e','t',0};
|
||||
WCHAR *buffer, *p;
|
||||
DWORD size;
|
||||
|
||||
|
@ -4153,14 +4060,14 @@ static DWORD request_get_codepage( struct winhttp_request *request, UINT *codepa
|
|||
{
|
||||
return GetLastError();
|
||||
}
|
||||
if ((p = wcsstr( buffer, charsetW )))
|
||||
if ((p = wcsstr( buffer, L"charset" )))
|
||||
{
|
||||
p += lstrlenW( charsetW );
|
||||
p += lstrlenW( L"charset" );
|
||||
while (*p == ' ') p++;
|
||||
if (*p++ == '=')
|
||||
{
|
||||
while (*p == ' ') p++;
|
||||
if (!wcsicmp( p, utf8W )) *codepage = CP_UTF8;
|
||||
if (!wcsicmp( p, L"utf-8" )) *codepage = CP_UTF8;
|
||||
}
|
||||
}
|
||||
heap_free( buffer );
|
||||
|
@ -4496,9 +4403,7 @@ static HRESULT WINAPI winhttp_request_put_Option(
|
|||
}
|
||||
case WinHttpRequestOption_URLCodePage:
|
||||
{
|
||||
static const WCHAR utf8W[] = {'u','t','f','-','8',0};
|
||||
VARIANT cp;
|
||||
|
||||
VariantInit( &cp );
|
||||
hr = VariantChangeType( &cp, &value, 0, VT_UI4 );
|
||||
if (SUCCEEDED( hr ))
|
||||
|
@ -4506,7 +4411,7 @@ static HRESULT WINAPI winhttp_request_put_Option(
|
|||
request->url_codepage = V_UI4( &cp );
|
||||
TRACE("URL codepage: %u\n", request->url_codepage);
|
||||
}
|
||||
else if (V_VT( &value ) == VT_BSTR && !wcsicmp( V_BSTR( &value ), utf8W ))
|
||||
else if (V_VT( &value ) == VT_BSTR && !wcsicmp( V_BSTR( &value ), L"utf-8" ))
|
||||
{
|
||||
TRACE("URL codepage: UTF-8\n");
|
||||
request->url_codepage = CP_UTF8;
|
||||
|
|
|
@ -374,10 +374,9 @@ static const struct object_vtbl connect_vtbl =
|
|||
|
||||
static BOOL domain_matches(LPCWSTR server, LPCWSTR domain)
|
||||
{
|
||||
static const WCHAR localW[] = { '<','l','o','c','a','l','>',0 };
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (!wcsicmp( domain, localW ) && !wcschr( server, '.' ))
|
||||
if (!wcsicmp( domain, L"<local>" ) && !wcschr( server, '.' ))
|
||||
ret = TRUE;
|
||||
else if (*domain == '*')
|
||||
{
|
||||
|
@ -1059,13 +1058,12 @@ static const struct object_vtbl request_vtbl =
|
|||
|
||||
static BOOL add_accept_types_header( struct request *request, const WCHAR **types )
|
||||
{
|
||||
static const WCHAR acceptW[] = {'A','c','c','e','p','t',0};
|
||||
static const DWORD flags = WINHTTP_ADDREQ_FLAG_ADD | WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;
|
||||
|
||||
if (!types) return TRUE;
|
||||
while (*types)
|
||||
{
|
||||
if (!process_header( request, acceptW, *types, flags, TRUE )) return FALSE;
|
||||
if (!process_header( request, L"Accept", *types, flags, TRUE )) return FALSE;
|
||||
types++;
|
||||
}
|
||||
return TRUE;
|
||||
|
@ -1141,11 +1139,11 @@ HINTERNET WINAPI WinHttpOpenRequest( HINTERNET hconnect, LPCWSTR verb, LPCWSTR o
|
|||
request->receive_timeout = connect->session->receive_timeout;
|
||||
request->receive_response_timeout = connect->session->receive_response_timeout;
|
||||
|
||||
if (!verb || !verb[0]) verb = getW;
|
||||
if (!verb || !verb[0]) verb = L"GET";
|
||||
if (!(request->verb = strdupW( verb ))) goto end;
|
||||
if (!(request->path = get_request_path( object ))) goto end;
|
||||
|
||||
if (!version || !version[0]) version = http1_1;
|
||||
if (!version || !version[0]) version = L"HTTP/1.1";
|
||||
if (!(request->version = strdupW( version ))) goto end;
|
||||
if (!(add_accept_types_header( request, types ))) goto end;
|
||||
|
||||
|
@ -1408,8 +1406,6 @@ static int reverse_lookup( const struct addrinfo *ai, char *hostname, size_t len
|
|||
|
||||
static WCHAR *build_wpad_url( const char *hostname, const struct addrinfo *ai )
|
||||
{
|
||||
static const WCHAR httpW[] = {'h','t','t','p',':','/','/',0};
|
||||
static const WCHAR wpadW[] = {'/','w','p','a','d','.','d','a','t',0};
|
||||
char name[NI_MAXHOST];
|
||||
WCHAR *ret, *p;
|
||||
int len;
|
||||
|
@ -1419,12 +1415,12 @@ static WCHAR *build_wpad_url( const char *hostname, const struct addrinfo *ai )
|
|||
|
||||
if (!reverse_lookup( ai, name, sizeof(name) )) hostname = name;
|
||||
|
||||
len = lstrlenW( httpW ) + strlen( hostname ) + lstrlenW( wpadW );
|
||||
len = lstrlenW( L"http://" ) + strlen( hostname ) + lstrlenW( L"/wpad.dat" );
|
||||
if (!(ret = p = GlobalAlloc( 0, (len + 1) * sizeof(WCHAR) ))) return NULL;
|
||||
lstrcpyW( p, httpW );
|
||||
p += lstrlenW( httpW );
|
||||
lstrcpyW( p, L"http://" );
|
||||
p += lstrlenW( L"http://" );
|
||||
while (*hostname) { *p++ = *hostname++; }
|
||||
lstrcpyW( p, wpadW );
|
||||
lstrcpyW( p, L"/wpad.dat" );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1504,15 +1500,9 @@ BOOL WINAPI WinHttpDetectAutoProxyConfigUrl( DWORD flags, LPWSTR *url )
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static const WCHAR Connections[] = {
|
||||
'S','o','f','t','w','a','r','e','\\',
|
||||
'M','i','c','r','o','s','o','f','t','\\',
|
||||
'W','i','n','d','o','w','s','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
|
||||
'I','n','t','e','r','n','e','t',' ','S','e','t','t','i','n','g','s','\\',
|
||||
'C','o','n','n','e','c','t','i','o','n','s',0 };
|
||||
static const WCHAR WinHttpSettings[] = {
|
||||
'W','i','n','H','t','t','p','S','e','t','t','i','n','g','s',0 };
|
||||
static const WCHAR path_connections[] =
|
||||
L"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections";
|
||||
|
||||
static const DWORD WINHTTP_SETTINGS_MAGIC = 0x18;
|
||||
static const DWORD WININET_SETTINGS_MAGIC = 0x46;
|
||||
static const DWORD PROXY_TYPE_DIRECT = 1;
|
||||
|
@ -1548,12 +1538,12 @@ BOOL WINAPI WinHttpGetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info )
|
|||
|
||||
TRACE("%p\n", info);
|
||||
|
||||
l = RegOpenKeyExW( HKEY_LOCAL_MACHINE, Connections, 0, KEY_READ, &key );
|
||||
l = RegOpenKeyExW( HKEY_LOCAL_MACHINE, path_connections, 0, KEY_READ, &key );
|
||||
if (!l)
|
||||
{
|
||||
DWORD type, size = 0;
|
||||
|
||||
l = RegQueryValueExW( key, WinHttpSettings, NULL, &type, NULL, &size );
|
||||
l = RegQueryValueExW( key, L"WinHttpSettings", NULL, &type, NULL, &size );
|
||||
if (!l && type == REG_BINARY &&
|
||||
size >= sizeof(struct connection_settings_header) + 2 * sizeof(DWORD))
|
||||
{
|
||||
|
@ -1565,7 +1555,7 @@ BOOL WINAPI WinHttpGetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info )
|
|||
(struct connection_settings_header *)buf;
|
||||
DWORD *len = (DWORD *)(hdr + 1);
|
||||
|
||||
l = RegQueryValueExW( key, WinHttpSettings, NULL, NULL, buf,
|
||||
l = RegQueryValueExW( key, L"WinHttpSettings", NULL, NULL, buf,
|
||||
&size );
|
||||
if (!l && hdr->magic == WINHTTP_SETTINGS_MAGIC &&
|
||||
hdr->unknown == 0)
|
||||
|
@ -1668,8 +1658,6 @@ BOOL WINAPI WinHttpGetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info )
|
|||
*/
|
||||
BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser( WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *config )
|
||||
{
|
||||
static const WCHAR settingsW[] =
|
||||
{'D','e','f','a','u','l','t','C','o','n','n','e','c','t','i','o','n','S','e','t','t','i','n','g','s',0};
|
||||
HKEY hkey = NULL;
|
||||
struct connection_settings_header *hdr = NULL;
|
||||
DWORD type, offset, len, size = 0;
|
||||
|
@ -1685,15 +1673,15 @@ BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser( WINHTTP_CURRENT_USER_IE_PROXY
|
|||
memset( config, 0, sizeof(*config) );
|
||||
config->fAutoDetect = TRUE;
|
||||
|
||||
if (RegOpenKeyExW( HKEY_CURRENT_USER, Connections, 0, KEY_READ, &hkey ) ||
|
||||
RegQueryValueExW( hkey, settingsW, NULL, &type, NULL, &size ) ||
|
||||
if (RegOpenKeyExW( HKEY_CURRENT_USER, path_connections, 0, KEY_READ, &hkey ) ||
|
||||
RegQueryValueExW( hkey, L"DefaultConnectionSettings", NULL, &type, NULL, &size ) ||
|
||||
type != REG_BINARY || size < sizeof(struct connection_settings_header))
|
||||
{
|
||||
ret = TRUE;
|
||||
goto done;
|
||||
}
|
||||
if (!(hdr = heap_alloc( size ))) goto done;
|
||||
if (RegQueryValueExW( hkey, settingsW, NULL, &type, (BYTE *)hdr, &size ) ||
|
||||
if (RegQueryValueExW( hkey, L"DefaultConnectionSettings", NULL, &type, (BYTE *)hdr, &size ) ||
|
||||
hdr->magic != WININET_SETTINGS_MAGIC)
|
||||
{
|
||||
ret = TRUE;
|
||||
|
@ -1782,8 +1770,7 @@ static BOOL parse_script_result( const char *result, WINHTTP_PROXY_INFO *info )
|
|||
|
||||
static char *download_script( const WCHAR *url, DWORD *out_size )
|
||||
{
|
||||
static const WCHAR typeW[] = {'*','/','*',0};
|
||||
static const WCHAR *acceptW[] = {typeW, NULL};
|
||||
static const WCHAR *acceptW[] = {L"*/*", NULL};
|
||||
HINTERNET ses, con = NULL, req = NULL;
|
||||
WCHAR *hostname;
|
||||
URL_COMPONENTSW uc;
|
||||
|
@ -1996,7 +1983,7 @@ BOOL WINAPI WinHttpSetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info )
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
l = RegCreateKeyExW( HKEY_LOCAL_MACHINE, Connections, 0, NULL, 0,
|
||||
l = RegCreateKeyExW( HKEY_LOCAL_MACHINE, path_connections, 0, NULL, 0,
|
||||
KEY_WRITE, NULL, &key, NULL );
|
||||
if (!l)
|
||||
{
|
||||
|
@ -2044,7 +2031,7 @@ BOOL WINAPI WinHttpSetDefaultProxyConfiguration( WINHTTP_PROXY_INFO *info )
|
|||
*len++ = 0;
|
||||
*len++ = 0;
|
||||
}
|
||||
l = RegSetValueExW( key, WinHttpSettings, 0, REG_BINARY, buf, size );
|
||||
l = RegSetValueExW( key, L"WinHttpSettings", 0, REG_BINARY, buf, size );
|
||||
if (!l)
|
||||
ret = TRUE;
|
||||
heap_free( buf );
|
||||
|
@ -2150,22 +2137,15 @@ BOOL WINAPI WinHttpSetTimeouts( HINTERNET handle, int resolve, int connect, int
|
|||
}
|
||||
|
||||
static const WCHAR wkday[7][4] =
|
||||
{{'S','u','n', 0}, {'M','o','n', 0}, {'T','u','e', 0}, {'W','e','d', 0},
|
||||
{'T','h','u', 0}, {'F','r','i', 0}, {'S','a','t', 0}};
|
||||
{L"Sun", L"Mon", L"Tue", L"Wed", L"Thu", L"Fri", L"Sat"};
|
||||
static const WCHAR month[12][4] =
|
||||
{{'J','a','n', 0}, {'F','e','b', 0}, {'M','a','r', 0}, {'A','p','r', 0},
|
||||
{'M','a','y', 0}, {'J','u','n', 0}, {'J','u','l', 0}, {'A','u','g', 0},
|
||||
{'S','e','p', 0}, {'O','c','t', 0}, {'N','o','v', 0}, {'D','e','c', 0}};
|
||||
{L"Jan", L"Feb", L"Mar", L"Apr", L"May", L"Jun", L"Jul", L"Aug", L"Sep", L"Oct", L"Nov", L"Dec"};
|
||||
|
||||
/***********************************************************************
|
||||
* WinHttpTimeFromSystemTime (WININET.@)
|
||||
*/
|
||||
BOOL WINAPI WinHttpTimeFromSystemTime( const SYSTEMTIME *time, LPWSTR string )
|
||||
{
|
||||
static const WCHAR format[] =
|
||||
{'%','s',',',' ','%','0','2','d',' ','%','s',' ','%','4','d',' ','%','0',
|
||||
'2','d',':','%','0','2','d',':','%','0','2','d',' ','G','M','T', 0};
|
||||
|
||||
TRACE("%p, %p\n", time, string);
|
||||
|
||||
if (!time || !string)
|
||||
|
@ -2174,7 +2154,8 @@ BOOL WINAPI WinHttpTimeFromSystemTime( const SYSTEMTIME *time, LPWSTR string )
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
swprintf( string, WINHTTP_TIME_FORMAT_BUFSIZE / sizeof(WCHAR), format,
|
||||
swprintf( string, WINHTTP_TIME_FORMAT_BUFSIZE / sizeof(WCHAR),
|
||||
L"%s, %02d %s %4d %02d:%02d:%02d GMT",
|
||||
wkday[time->wDayOfWeek],
|
||||
time->wDay,
|
||||
month[time->wMonth - 1],
|
||||
|
|
|
@ -29,9 +29,6 @@
|
|||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(winhttp);
|
||||
|
||||
static const WCHAR scheme_http[] = {'h','t','t','p',0};
|
||||
static const WCHAR scheme_https[] = {'h','t','t','p','s',0};
|
||||
|
||||
struct url_component
|
||||
{
|
||||
WCHAR **str;
|
||||
|
@ -93,8 +90,7 @@ static WCHAR *decode_url( LPCWSTR url, DWORD *len )
|
|||
|
||||
static inline BOOL need_escape( WCHAR ch )
|
||||
{
|
||||
static const WCHAR escapes[] = {' ','"','#','%','<','>','[','\\',']','^','`','{','|','}','~',0};
|
||||
const WCHAR *p = escapes;
|
||||
const WCHAR *p = L" \"#%<>[\\]^`{|}~";
|
||||
|
||||
if (ch <= 31 || ch >= 127) return TRUE;
|
||||
while (*p)
|
||||
|
@ -106,7 +102,7 @@ static inline BOOL need_escape( WCHAR ch )
|
|||
|
||||
static BOOL escape_string( const WCHAR *src, DWORD src_len, WCHAR *dst, DWORD *dst_len )
|
||||
{
|
||||
static const WCHAR hex[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
|
||||
static const WCHAR hex[] = L"0123456789ABCDEF";
|
||||
WCHAR *p = dst;
|
||||
DWORD i;
|
||||
|
||||
|
@ -214,8 +210,8 @@ BOOL WINAPI WinHttpCrackUrl( LPCWSTR url, DWORD len, DWORD flags, LPURL_COMPONEN
|
|||
SetLastError( ERROR_WINHTTP_UNRECOGNIZED_SCHEME );
|
||||
return FALSE;
|
||||
}
|
||||
if (p - url == 4 && !wcsnicmp( url, scheme_http, 4 )) scheme_number = INTERNET_SCHEME_HTTP;
|
||||
else if (p - url == 5 && !wcsnicmp( url, scheme_https, 5 )) scheme_number = INTERNET_SCHEME_HTTPS;
|
||||
if (p - url == 4 && !wcsnicmp( url, L"http", 4 )) scheme_number = INTERNET_SCHEME_HTTP;
|
||||
else if (p - url == 5 && !wcsnicmp( url, L"https", 5 )) scheme_number = INTERNET_SCHEME_HTTPS;
|
||||
else
|
||||
{
|
||||
err = ERROR_WINHTTP_UNRECOGNIZED_SCHEME;
|
||||
|
@ -343,15 +339,15 @@ exit:
|
|||
|
||||
static INTERNET_SCHEME get_scheme( const WCHAR *scheme, DWORD len )
|
||||
{
|
||||
if (!wcsncmp( scheme, scheme_http, len )) return INTERNET_SCHEME_HTTP;
|
||||
if (!wcsncmp( scheme, scheme_https, len )) return INTERNET_SCHEME_HTTPS;
|
||||
if (!wcsncmp( scheme, L"http", len )) return INTERNET_SCHEME_HTTP;
|
||||
if (!wcsncmp( scheme, L"https", len )) return INTERNET_SCHEME_HTTPS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const WCHAR *get_scheme_string( INTERNET_SCHEME scheme )
|
||||
{
|
||||
if (scheme == INTERNET_SCHEME_HTTP) return scheme_http;
|
||||
if (scheme == INTERNET_SCHEME_HTTPS) return scheme_https;
|
||||
if (scheme == INTERNET_SCHEME_HTTP) return L"http";
|
||||
if (scheme == INTERNET_SCHEME_HTTPS) return L"https";
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -375,7 +371,6 @@ static DWORD get_comp_length( DWORD len, DWORD flags, WCHAR *comp )
|
|||
|
||||
static BOOL get_url_length( URL_COMPONENTS *uc, DWORD flags, DWORD *len )
|
||||
{
|
||||
static const WCHAR formatW[] = {'%','u',0};
|
||||
INTERNET_SCHEME scheme;
|
||||
|
||||
*len = 0;
|
||||
|
@ -419,7 +414,7 @@ static BOOL get_url_length( URL_COMPONENTS *uc, DWORD flags, DWORD *len )
|
|||
{
|
||||
WCHAR port[sizeof("65535")];
|
||||
|
||||
*len += swprintf( port, ARRAY_SIZE(port), formatW, uc->nPort );
|
||||
*len += swprintf( port, ARRAY_SIZE(port), L"%u", uc->nPort );
|
||||
*len += 1; /* ":" */
|
||||
}
|
||||
if (uc->lpszUrlPath && *uc->lpszUrlPath != '/') *len += 1; /* '/' */
|
||||
|
@ -434,7 +429,6 @@ static BOOL get_url_length( URL_COMPONENTS *uc, DWORD flags, DWORD *len )
|
|||
*/
|
||||
BOOL WINAPI WinHttpCreateUrl( LPURL_COMPONENTS uc, DWORD flags, LPWSTR url, LPDWORD required )
|
||||
{
|
||||
static const WCHAR formatW[] = {'%','u',0};
|
||||
DWORD len, len_escaped;
|
||||
INTERNET_SCHEME scheme;
|
||||
|
||||
|
@ -511,7 +505,7 @@ BOOL WINAPI WinHttpCreateUrl( LPURL_COMPONENTS uc, DWORD flags, LPWSTR url, LPDW
|
|||
if (!uses_default_port( scheme, uc->nPort ))
|
||||
{
|
||||
*url++ = ':';
|
||||
url += swprintf( url, sizeof("65535"), formatW, uc->nPort );
|
||||
url += swprintf( url, sizeof("65535"), L"%u", uc->nPort );
|
||||
}
|
||||
|
||||
/* add slash between hostname and path if necessary */
|
||||
|
|
|
@ -26,14 +26,6 @@
|
|||
#include "sspi.h"
|
||||
#include "wincrypt.h"
|
||||
|
||||
static const WCHAR getW[] = {'G','E','T',0};
|
||||
static const WCHAR postW[] = {'P','O','S','T',0};
|
||||
static const WCHAR headW[] = {'H','E','A','D',0};
|
||||
static const WCHAR slashW[] = {'/',0};
|
||||
static const WCHAR http1_0[] = {'H','T','T','P','/','1','.','0',0};
|
||||
static const WCHAR http1_1[] = {'H','T','T','P','/','1','.','1',0};
|
||||
static const WCHAR chunkedW[] = {'c','h','u','n','k','e','d',0};
|
||||
|
||||
struct object_header;
|
||||
struct object_vtbl
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue