diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index f6c9bcefff..8bb825cb1d 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -1057,6 +1057,7 @@ static BOOL send_request( request_t *request, LPCWSTR headers, DWORD headers_len TRACE("full request: %s\n", debugstr_a(req_ascii)); len = strlen(req_ascii); + if (context) request->hdr.context = context; send_callback( &request->hdr, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, NULL, 0 ); ret = netconn_send( &request->netconn, req_ascii, len, 0, &bytes_sent ); diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c index d9966eaee0..4a4e7f42bc 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -248,8 +248,8 @@ static void test_empty_headers_param(void) static void test_SendRequest (void) { HINTERNET session, request, connection; - DWORD header_len, optional_len, total_len; - DWORD bytes_rw; + DWORD header_len, optional_len, total_len, bytes_rw, size; + DWORD_PTR context; BOOL ret; CHAR buffer[256]; int i; @@ -284,9 +284,20 @@ static void test_SendRequest (void) } ok(request != NULL, "WinHttpOpenrequest failed to open a request, error: %u.\n", GetLastError()); - ret = WinHttpSendRequest(request, content_type, header_len, post_data, optional_len, total_len, 0); + context = 0xdeadbeef; + ret = WinHttpSetOption(request, WINHTTP_OPTION_CONTEXT_VALUE, &context, sizeof(context)); + ok(ret, "WinHttpSetOption failed: %u\n", GetLastError()); + + context++; + ret = WinHttpSendRequest(request, content_type, header_len, post_data, optional_len, total_len, context); ok(ret == TRUE, "WinHttpSendRequest failed: %u\n", GetLastError()); + context = 0; + size = sizeof(context); + ret = WinHttpQueryOption(request, WINHTTP_OPTION_CONTEXT_VALUE, &context, &size); + ok(ret, "WinHttpQueryOption failed: %u\n", GetLastError()); + ok(context == 0xdeadbef0, "expected 0xdeadbef0, got %lx\n", context); + for (i = 3; post_data[i]; i++) { bytes_rw = -1;