Commit 4ae5741c authored by Hans Leidekker's avatar Hans Leidekker Committed by Alexandre Julliard

winhttp: Move handling of default request parameters back to WinHttpOpenRequest.

Avoids special casing all over the place.
parent 8df906f2
...@@ -480,28 +480,20 @@ static WCHAR *build_request_string( request_t *request ) ...@@ -480,28 +480,20 @@ static WCHAR *build_request_string( request_t *request )
static const WCHAR crlf[] = {'\r','\n',0}; static const WCHAR crlf[] = {'\r','\n',0};
static const WCHAR colon[] = {':',' ',0}; static const WCHAR colon[] = {':',' ',0};
static const WCHAR twocrlf[] = {'\r','\n','\r','\n',0}; static const WCHAR twocrlf[] = {'\r','\n','\r','\n',0};
static const WCHAR get[] = {'G','E','T',0};
static const WCHAR slash[] = {'/',0};
static const WCHAR http1_1[] = {'H','T','T','P','/','1','.','1',0};
WCHAR *ret; WCHAR *ret;
const WCHAR **headers, **p; const WCHAR **headers, **p;
const WCHAR *verb = get, *path = slash, *version = http1_1;
unsigned int len, i = 0, j; unsigned int len, i = 0, j;
if (request->verb && request->verb[0]) verb = request->verb;
if (request->path && request->path[0]) path = request->path;
if (request->version && request->version[0]) version = request->version;
/* allocate space for an array of all the string pointers to be added */ /* allocate space for an array of all the string pointers to be added */
len = request->num_headers * 4 + 7; len = request->num_headers * 4 + 7;
if (!(headers = heap_alloc( len * sizeof(LPCWSTR) ))) return NULL; if (!(headers = heap_alloc( len * sizeof(LPCWSTR) ))) return NULL;
headers[i++] = verb; headers[i++] = request->verb;
headers[i++] = space; headers[i++] = space;
headers[i++] = path; headers[i++] = request->path;
headers[i++] = space; headers[i++] = space;
headers[i++] = version; headers[i++] = request->version;
for (j = 0; j < request->num_headers; j++) for (j = 0; j < request->num_headers; j++)
{ {
...@@ -797,7 +789,6 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len ...@@ -797,7 +789,6 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len
static const WCHAR keep_alive[] = {'K','e','e','p','-','A','l','i','v','e',0}; 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 no_cache[] = {'n','o','-','c','a','c','h','e',0};
static const WCHAR length_fmt[] = {'%','l','d',0}; static const WCHAR length_fmt[] = {'%','l','d',0};
static const WCHAR post[] = {'P','O','S','T',0};
BOOL ret = FALSE; BOOL ret = FALSE;
connect_t *connect = request->connect; connect_t *connect = request->connect;
...@@ -813,7 +804,7 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len ...@@ -813,7 +804,7 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len
if (connect->hostname) if (connect->hostname)
add_host_header( request, connect->hostname, connect->hostport, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW ); add_host_header( request, connect->hostname, connect->hostport, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW );
if (total_len || (request->verb && !strcmpW( request->verb, post ))) if (total_len || (request->verb && !strcmpW( request->verb, postW )))
{ {
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 );
...@@ -1114,6 +1105,7 @@ static BOOL handle_redirect( request_t *request ) ...@@ -1114,6 +1105,7 @@ static BOOL handle_redirect( request_t *request )
if (!(request->path = heap_alloc( (len + 1) * sizeof(WCHAR) ))) goto end; if (!(request->path = heap_alloc( (len + 1) * sizeof(WCHAR) ))) goto end;
strcpyW( request->path, uc.lpszUrlPath ); strcpyW( request->path, uc.lpszUrlPath );
} }
else request->path = strdupW( slashW );
} }
/* remove content-type/length headers */ /* remove content-type/length headers */
...@@ -1122,7 +1114,7 @@ static BOOL handle_redirect( request_t *request ) ...@@ -1122,7 +1114,7 @@ static BOOL handle_redirect( request_t *request )
/* redirects are always GET requests */ /* redirects are always GET requests */
heap_free( request->verb ); heap_free( request->verb );
request->verb = NULL; request->verb = strdupW( getW );
ret = TRUE; ret = TRUE;
end: end:
......
...@@ -480,9 +480,13 @@ HINTERNET WINAPI WinHttpOpenRequest( HINTERNET hconnect, LPCWSTR verb, LPCWSTR o ...@@ -480,9 +480,13 @@ HINTERNET WINAPI WinHttpOpenRequest( HINTERNET hconnect, LPCWSTR verb, LPCWSTR o
if (!netconn_init( &request->netconn, request->hdr.flags & WINHTTP_FLAG_SECURE )) goto end; if (!netconn_init( &request->netconn, request->hdr.flags & WINHTTP_FLAG_SECURE )) goto end;
if (verb && !(request->verb = strdupW( verb ))) goto end; if (!verb || !verb[0]) verb = getW;
if (object && !(request->path = strdupW( object ))) goto end; if (!object || !object[0]) object = slashW;
if (version && !(request->version = strdupW( version ))) goto end; if (!version || !version[0]) version = http1_1;
if (!(request->verb = strdupW( verb ))) goto end;
if (!(request->path = strdupW( object ))) goto end;
if (!(request->version = strdupW( version ))) goto end;
if (!(hrequest = alloc_handle( &request->hdr ))) goto end; if (!(hrequest = alloc_handle( &request->hdr ))) goto end;
request->hdr.handle = hrequest; request->hdr.handle = hrequest;
......
...@@ -36,6 +36,11 @@ ...@@ -36,6 +36,11 @@
# include <ws2tcpip.h> # include <ws2tcpip.h>
#endif #endif
static const WCHAR getW[] = {'G','E','T',0};
static const WCHAR postW[] = {'P','O','S','T',0};
static const WCHAR slashW[] = {'/',0};
static const WCHAR http1_1[] = {'H','T','T','P','/','1','.','1',0};
typedef struct _object_header_t object_header_t; typedef struct _object_header_t object_header_t;
typedef struct typedef struct
......
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