From 846cc2b157cba07d33416276fd1f4c2faa301374 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Thu, 29 Oct 2009 11:12:45 +0100 Subject: [PATCH] winhttp: Implement WinHttpQueryHeaders(WINHTTP_QUERY_VERSION). --- dlls/winhttp/request.c | 18 ++++++++++++++++++ dlls/winhttp/tests/winhttp.c | 16 +++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index d504ea5cf15..4d5be843443 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -652,6 +652,24 @@ static BOOL query_headers( request_t *request, DWORD level, LPCWSTR name, LPVOID if (request_only) heap_free( headers ); return ret; } + case WINHTTP_QUERY_VERSION: + { + DWORD len = (strlenW( request->version ) + 1) * sizeof(WCHAR); + if (len > *buflen) + { + set_last_error( ERROR_INSUFFICIENT_BUFFER ); + *buflen = len; + return FALSE; + } + else if (buffer) + { + strcpyW( buffer, request->version ); + TRACE("returning string: %s\n", debugstr_w(buffer)); + ret = TRUE; + } + *buflen = len - sizeof(WCHAR); + return ret; + } default: { if (attr >= sizeof(attribute_table)/sizeof(attribute_table[0]) || !attribute_table[attr]) diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c index 2f842f22305..fe9bb051d74 100644 --- a/dlls/winhttp/tests/winhttp.c +++ b/dlls/winhttp/tests/winhttp.c @@ -816,7 +816,8 @@ static void test_request_parameter_defaults(void) static const WCHAR codeweavers[] = {'c','o','d','e','w','e','a','v','e','r','s','.','c','o','m',0}; HANDLE ses, con, req; - DWORD size, status; + DWORD size, status, error; + WCHAR *version; BOOL ret; ses = WinHttpOpen(test_useragent, 0, NULL, NULL, 0); @@ -850,6 +851,19 @@ static void test_request_parameter_defaults(void) ret = WinHttpReceiveResponse(req, NULL); ok(ret, "failed to receive response %u\n", GetLastError()); + size = 0; + SetLastError(0xdeadbeef); + ret = WinHttpQueryHeaders(req, WINHTTP_QUERY_VERSION, NULL, NULL, &size, NULL); + error = GetLastError(); + ok(!ret, "succeeded unexpectedly\n"); + ok(error == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", error); + + version = HeapAlloc(GetProcessHeap(), 0, size); + ret = WinHttpQueryHeaders(req, WINHTTP_QUERY_VERSION, NULL, version, &size, NULL); + ok(ret, "failed unexpectedly %u\n", GetLastError()); + ok(lstrlenW(version) == size / sizeof(WCHAR), "unexpected size %u\n", size); + HeapFree(GetProcessHeap(), 0, version); + size = sizeof(status); ret = WinHttpQueryHeaders(req, WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, NULL, &status, &size, NULL); ok(ret, "failed unexpectedly %u\n", GetLastError());