Commit 6bb30907 authored by Hans Leidekker's avatar Hans Leidekker Committed by Alexandre Julliard

winhttp: A non-standard port must be included in the host header.

parent 04a11bb1
...@@ -721,6 +721,25 @@ void close_connection( request_t *request ) ...@@ -721,6 +721,25 @@ void close_connection( request_t *request )
send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0, 0 ); send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED, 0, 0 );
} }
static BOOL add_host_header( request_t *request, WCHAR *hostname, INTERNET_PORT port, DWORD modifier )
{
BOOL ret;
DWORD len;
WCHAR *host;
static const WCHAR fmt[] = {'%','s',':','%','u',0};
if (port == INTERNET_DEFAULT_HTTP_PORT || port == INTERNET_DEFAULT_HTTPS_PORT)
{
return process_header( request, attr_host, hostname, modifier, TRUE );
}
len = strlenW( hostname ) + 7; /* sizeof(":65335") */
if (!(host = heap_alloc( len * sizeof(WCHAR) ))) return FALSE;
sprintfW( host, fmt, hostname, port );
ret = process_header( request, attr_host, host, modifier, TRUE );
heap_free( host );
return ret;
}
static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len, LPVOID optional, static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len, LPVOID optional,
DWORD optional_len, DWORD total_len, DWORD_PTR context ) DWORD optional_len, DWORD total_len, DWORD_PTR context )
{ {
...@@ -741,9 +760,9 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len ...@@ -741,9 +760,9 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len
process_header( request, attr_user_agent, session->agent, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE ); process_header( request, attr_user_agent, session->agent, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
if (connect->hostname) if (connect->hostname)
process_header( request, attr_host, connect->hostname, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE ); add_host_header( request, connect->hostname, connect->hostport, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW );
if (total_len || !strcmpW( request->verb, post )) if (total_len || (request->verb && !strcmpW( request->verb, post )))
{ {
WCHAR length[21]; /* decimal long int + null */ WCHAR length[21]; /* decimal long int + null */
sprintfW( length, length_fmt, total_len ); sprintfW( length, length_fmt, total_len );
...@@ -980,12 +999,12 @@ static BOOL handle_redirect( request_t *request ) ...@@ -980,12 +999,12 @@ static BOOL handle_redirect( request_t *request )
{ {
heap_free( connect->servername ); heap_free( connect->servername );
connect->servername = hostname; connect->servername = hostname;
connect->serverport = port; connect->serverport = connect->hostport = port;
netconn_close( &request->netconn ); netconn_close( &request->netconn );
if (!(ret = netconn_init( &request->netconn, request->hdr.flags & WINHTTP_FLAG_SECURE ))) goto end; if (!(ret = netconn_init( &request->netconn, request->hdr.flags & WINHTTP_FLAG_SECURE ))) goto end;
} }
if (!(ret = process_header( request, attr_host, hostname, WINHTTP_ADDREQ_FLAG_REPLACE, TRUE ))) goto end; if (!(ret = add_host_header( request, hostname, port, WINHTTP_ADDREQ_FLAG_REPLACE ))) goto end;
if (!(ret = open_connection( request ))) goto end; if (!(ret = open_connection( request ))) goto end;
heap_free( request->path ); heap_free( request->path );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment