Hans Leidekker : winhttp: Add accept types to the request headers.
Alexandre Julliard
julliard at winehq.org
Tue Jul 26 11:37:55 CDT 2011
Module: wine
Branch: master
Commit: 050058c5bfa668e28bd6f53043126025943ee0a2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=050058c5bfa668e28bd6f53043126025943ee0a2
Author: Hans Leidekker <hans at codeweavers.com>
Date: Tue Jul 26 09:26:07 2011 +0200
winhttp: Add accept types to the request headers.
---
dlls/winhttp/request.c | 11 +++++++++--
dlls/winhttp/session.c | 38 +++++++++++++++++++++++++++++++++++++-
dlls/winhttp/winhttp_private.h | 2 ++
3 files changed, 48 insertions(+), 3 deletions(-)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 15979c3..00f5caf 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -1031,8 +1031,13 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len
WCHAR *req = NULL;
char *req_ascii;
int bytes_sent;
- DWORD len;
+ DWORD len, i, flags;
+ flags = WINHTTP_ADDREQ_FLAG_ADD|WINHTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA;
+ for (i = 0; i < request->num_accept_types; i++)
+ {
+ process_header( request, attr_accept, request->accept_types[i], flags, TRUE );
+ }
if (session->agent)
process_header( request, attr_user_agent, session->agent, WINHTTP_ADDREQ_FLAG_ADD_IF_NEW, TRUE );
@@ -2422,6 +2427,8 @@ static HRESULT WINAPI winhttp_request_Open(
BSTR url,
VARIANT async )
{
+ static const WCHAR typeW[] = {'*','/','*',0};
+ static const WCHAR *acceptW[] = {typeW, NULL};
struct winhttp_request *request = impl_from_IWinHttpRequest( iface );
HINTERNET hsession = NULL, hconnect = NULL, hrequest;
URL_COMPONENTS uc;
@@ -2461,7 +2468,7 @@ static HRESULT WINAPI winhttp_request_Open(
err = get_last_error();
goto error;
}
- if (!(hrequest = WinHttpOpenRequest( hconnect, method, path, NULL, NULL, NULL, 0 )))
+ if (!(hrequest = WinHttpOpenRequest( hconnect, method, path, NULL, NULL, acceptW, 0 )))
{
err = get_last_error();
goto error;
diff --git a/dlls/winhttp/session.c b/dlls/winhttp/session.c
index 14f3940..1fe1889 100644
--- a/dlls/winhttp/session.c
+++ b/dlls/winhttp/session.c
@@ -527,7 +527,7 @@ end:
static void request_destroy( object_header_t *hdr )
{
request_t *request = (request_t *)hdr;
- DWORD i;
+ unsigned int i;
TRACE("%p\n", request);
@@ -544,6 +544,8 @@ static void request_destroy( object_header_t *hdr )
heap_free( request->headers[i].value );
}
heap_free( request->headers );
+ for (i = 0; i < request->num_accept_types; i++) heap_free( request->accept_types[i] );
+ heap_free( request->accept_types );
heap_free( request );
}
@@ -859,6 +861,39 @@ static const object_vtbl_t request_vtbl =
request_set_option
};
+static BOOL store_accept_types( request_t *request, const WCHAR **accept_types )
+{
+ const WCHAR **types = accept_types;
+ int i;
+
+ if (!types) return TRUE;
+ while (*types)
+ {
+ request->num_accept_types++;
+ types++;
+ }
+ if (!request->num_accept_types) return TRUE;
+ if (!(request->accept_types = heap_alloc( request->num_accept_types * sizeof(WCHAR *))))
+ {
+ request->num_accept_types = 0;
+ return FALSE;
+ }
+ types = accept_types;
+ for (i = 0; i < request->num_accept_types; i++)
+ {
+ if (!(request->accept_types[i] = strdupW( *types )))
+ {
+ for (; i >= 0; i--) heap_free( request->accept_types[i] );
+ heap_free( request->accept_types );
+ request->accept_types = NULL;
+ request->num_accept_types = 0;
+ return FALSE;
+ }
+ types++;
+ }
+ return TRUE;
+}
+
/***********************************************************************
* WinHttpOpenRequest (winhttp.@)
*/
@@ -926,6 +961,7 @@ HINTERNET WINAPI WinHttpOpenRequest( HINTERNET hconnect, LPCWSTR verb, LPCWSTR o
if (!version || !version[0]) version = http1_1;
if (!(request->version = strdupW( version ))) goto end;
+ if (!(store_accept_types( request, types ))) goto end;
if (!(hrequest = alloc_handle( &request->hdr ))) goto end;
request->hdr.handle = hrequest;
diff --git a/dlls/winhttp/winhttp_private.h b/dlls/winhttp/winhttp_private.h
index 4bac24f..fbd5032 100644
--- a/dlls/winhttp/winhttp_private.h
+++ b/dlls/winhttp/winhttp_private.h
@@ -157,6 +157,8 @@ typedef struct
DWORD content_read; /* bytes read so far */
header_t *headers;
DWORD num_headers;
+ WCHAR **accept_types;
+ DWORD num_accept_types;
} request_t;
typedef struct _task_header_t task_header_t;
More information about the wine-cvs
mailing list