mirror of
https://github.com/reactos/wine.git
synced 2025-02-08 21:27:31 +00:00
wininet: Added open_simple_request helper and use it where appropriate.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1d834438ca
commit
f5c97b5060
@ -442,6 +442,39 @@ static VOID WINAPI callback(
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
HINTERNET session;
|
||||
HINTERNET connection;
|
||||
HINTERNET request;
|
||||
} test_request_t;
|
||||
|
||||
#define open_simple_request(a,b,c,d,e) _open_simple_request(__LINE__,a,b,c,d,e)
|
||||
static void _open_simple_request(unsigned line, test_request_t *req, const char *host,
|
||||
int port, const char *verb, const char *url)
|
||||
{
|
||||
req->session = InternetOpenA(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok_(__FILE__,line)(req->session != NULL, "InternetOpenA failed: %u\n", GetLastError());
|
||||
|
||||
req->connection = InternetConnectA(req->session, host, port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok_(__FILE__,line)(req->connection != NULL, "InternetConnectA failed: %u\n", GetLastError());
|
||||
|
||||
req->request = HttpOpenRequestA(req->connection, verb, url, NULL, NULL, NULL, 0, 0);
|
||||
ok_(__FILE__,line)(req->request != NULL, "HttpOpenRequest failed: %u\n", GetLastError());
|
||||
}
|
||||
|
||||
#define close_request(a) _close_request(__LINE__,a)
|
||||
static void _close_request(unsigned line, test_request_t *req)
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
ret = InternetCloseHandle(req->request);
|
||||
ok_(__FILE__,line)(ret, "InternetCloseHandle(request) failed: %u\n", GetLastError());
|
||||
ret = InternetCloseHandle(req->connection);
|
||||
ok_(__FILE__,line)(ret, "InternetCloseHandle(connection) failed: %u\n", GetLastError());
|
||||
ret = InternetCloseHandle(req->session);
|
||||
ok_(__FILE__,line)(ret, "InternetCloseHandle(session) failed: %u\n", GetLastError());
|
||||
}
|
||||
|
||||
static void close_async_handle(HINTERNET handle, HANDLE complete_event, int handle_cnt)
|
||||
{
|
||||
BOOL res;
|
||||
@ -1552,55 +1585,36 @@ static void test_http_cache(void)
|
||||
|
||||
static void InternetLockRequestFile_test(void)
|
||||
{
|
||||
HINTERNET session, connect, request;
|
||||
char file_name[MAX_PATH];
|
||||
test_request_t req;
|
||||
HANDLE lock, lock2;
|
||||
DWORD size;
|
||||
BOOL ret;
|
||||
|
||||
static const char *types[] = { "*", "", NULL };
|
||||
|
||||
session = InternetOpenA("Wine Regression Test", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
|
||||
ok(session != NULL ,"Unable to open Internet session\n");
|
||||
|
||||
connect = InternetConnectA(session, "test.winehq.org", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL,
|
||||
INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(connect != NULL, "Unable to connect to http://test.winehq.org with error %d\n", GetLastError());
|
||||
|
||||
request = HttpOpenRequestA(connect, NULL, "/tests/hello.html", NULL, NULL, types, INTERNET_FLAG_NEED_FILE|INTERNET_FLAG_RELOAD, 0);
|
||||
if (!request && GetLastError() == ERROR_INTERNET_NAME_NOT_RESOLVED)
|
||||
{
|
||||
skip( "Network unreachable, skipping test\n" );
|
||||
|
||||
ok(InternetCloseHandle(connect), "Close connect handle failed\n");
|
||||
ok(InternetCloseHandle(session), "Close session handle failed\n");
|
||||
|
||||
return;
|
||||
}
|
||||
ok(request != NULL, "Failed to open request handle err %u\n", GetLastError());
|
||||
open_simple_request(&req, "test.winehq.org", INTERNET_DEFAULT_HTTP_PORT, NULL, "/tests/hello.html");
|
||||
|
||||
size = sizeof(file_name);
|
||||
ret = InternetQueryOptionA(request, INTERNET_OPTION_DATAFILE_NAME, file_name, &size);
|
||||
ret = InternetQueryOptionA(req.request, INTERNET_OPTION_DATAFILE_NAME, file_name, &size);
|
||||
ok(!ret, "InternetQueryOptionA(INTERNET_OPTION_DATAFILE_NAME) succeeded\n");
|
||||
ok(GetLastError() == ERROR_INTERNET_ITEM_NOT_FOUND, "GetLastError()=%u\n", GetLastError());
|
||||
ok(!size, "size = %d\n", size);
|
||||
|
||||
lock = NULL;
|
||||
ret = InternetLockRequestFile(request, &lock);
|
||||
ret = InternetLockRequestFile(req.request, &lock);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND, "InternetLockRequestFile returned: %x(%u)\n", ret, GetLastError());
|
||||
|
||||
ret = HttpSendRequestA(request, NULL, 0, NULL, 0);
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed: %u\n", GetLastError());
|
||||
|
||||
size = sizeof(file_name);
|
||||
ret = InternetQueryOptionA(request, INTERNET_OPTION_DATAFILE_NAME, file_name, &size);
|
||||
ret = InternetQueryOptionA(req.request, INTERNET_OPTION_DATAFILE_NAME, file_name, &size);
|
||||
ok(ret, "InternetQueryOptionA(INTERNET_OPTION_DATAFILE_NAME) failed: %u\n", GetLastError());
|
||||
|
||||
ret = InternetLockRequestFile(request, &lock);
|
||||
ret = InternetLockRequestFile(req.request, &lock);
|
||||
ok(ret, "InternetLockRequestFile returned: %x(%u)\n", ret, GetLastError());
|
||||
ok(lock != NULL, "lock == NULL\n");
|
||||
|
||||
ret = InternetLockRequestFile(request, &lock2);
|
||||
ret = InternetLockRequestFile(req.request, &lock2);
|
||||
ok(ret, "InternetLockRequestFile returned: %x(%u)\n", ret, GetLastError());
|
||||
ok(lock == lock2, "lock != lock2\n");
|
||||
|
||||
@ -1610,7 +1624,7 @@ static void InternetLockRequestFile_test(void)
|
||||
ret = DeleteFileA(file_name);
|
||||
ok(!ret && GetLastError() == ERROR_SHARING_VIOLATION, "Deleting file returned %x(%u)\n", ret, GetLastError());
|
||||
|
||||
ok(InternetCloseHandle(request), "Close request handle failed\n");
|
||||
ok(InternetCloseHandle(req.request), "Close request handle failed\n");
|
||||
|
||||
ret = DeleteFileA(file_name);
|
||||
ok(!ret && GetLastError() == ERROR_SHARING_VIOLATION, "Deleting file returned %x(%u)\n", ret, GetLastError());
|
||||
@ -2377,23 +2391,16 @@ static DWORD CALLBACK server_thread(LPVOID param)
|
||||
|
||||
static void test_basic_request(int port, const char *verb, const char *url)
|
||||
{
|
||||
HINTERNET hi, hc, hr;
|
||||
test_request_t req;
|
||||
DWORD r, count, error;
|
||||
char buffer[0x100];
|
||||
|
||||
trace("basic request %s %s\n", verb, url);
|
||||
|
||||
hi = InternetOpenA(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(hi != NULL, "open failed\n");
|
||||
|
||||
hc = InternetConnectA(hi, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(hc != NULL, "connect failed\n");
|
||||
|
||||
hr = HttpOpenRequestA(hc, verb, url, NULL, NULL, NULL, 0, 0);
|
||||
ok(hr != NULL, "HttpOpenRequest failed\n");
|
||||
open_simple_request(&req, "localhost", port, verb, url);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
r = HttpSendRequestA(hr, NULL, 0, NULL, 0);
|
||||
r = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
error = GetLastError();
|
||||
ok(error == ERROR_SUCCESS || broken(error != ERROR_SUCCESS), "expected ERROR_SUCCESS, got %u\n", error);
|
||||
ok(r, "HttpSendRequest failed: %u\n", GetLastError());
|
||||
@ -2401,36 +2408,27 @@ static void test_basic_request(int port, const char *verb, const char *url)
|
||||
count = 0;
|
||||
memset(buffer, 0, sizeof buffer);
|
||||
SetLastError(0xdeadbeef);
|
||||
r = InternetReadFile(hr, buffer, sizeof buffer, &count);
|
||||
r = InternetReadFile(req.request, buffer, sizeof buffer, &count);
|
||||
ok(r, "InternetReadFile failed %u\n", GetLastError());
|
||||
ok(count == sizeof page1 - 1, "count was wrong\n");
|
||||
ok(!memcmp(buffer, page1, sizeof page1), "http data wrong, got: %s\n", buffer);
|
||||
|
||||
InternetCloseHandle(hr);
|
||||
InternetCloseHandle(hc);
|
||||
InternetCloseHandle(hi);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_proxy_indirect(int port)
|
||||
{
|
||||
HINTERNET hi, hc, hr;
|
||||
test_request_t req;
|
||||
DWORD r, sz;
|
||||
char buffer[0x40];
|
||||
|
||||
hi = InternetOpenA(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(hi != NULL, "open failed\n");
|
||||
open_simple_request(&req, "localhost", port, NULL, "/test2");
|
||||
|
||||
hc = InternetConnectA(hi, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(hc != NULL, "connect failed\n");
|
||||
|
||||
hr = HttpOpenRequestA(hc, NULL, "/test2", NULL, NULL, NULL, 0, 0);
|
||||
ok(hr != NULL, "HttpOpenRequest failed\n");
|
||||
|
||||
r = HttpSendRequestA(hr, NULL, 0, NULL, 0);
|
||||
r = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(r, "HttpSendRequest failed %u\n", GetLastError());
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_PROXY_AUTHENTICATE, buffer, &sz, NULL);
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_PROXY_AUTHENTICATE, buffer, &sz, NULL);
|
||||
ok(r || GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND, "HttpQueryInfo failed: %d\n", GetLastError());
|
||||
if (!r)
|
||||
{
|
||||
@ -2439,33 +2437,31 @@ static void test_proxy_indirect(int port)
|
||||
}
|
||||
ok(!strcmp(buffer, "Basic realm=\"placebo\""), "proxy auth info wrong\n");
|
||||
|
||||
test_status_code(hr, 407);
|
||||
test_request_flags(hr, 0);
|
||||
test_status_code(req.request, 407);
|
||||
test_request_flags(req.request, 0);
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_STATUS_TEXT, buffer, &sz, NULL);
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_STATUS_TEXT, buffer, &sz, NULL);
|
||||
ok(r, "HttpQueryInfo failed\n");
|
||||
ok(!strcmp(buffer, "Proxy Authentication Required"), "proxy text wrong\n");
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_VERSION, buffer, &sz, NULL);
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_VERSION, buffer, &sz, NULL);
|
||||
ok(r, "HttpQueryInfo failed\n");
|
||||
ok(!strcmp(buffer, "HTTP/1.1"), "http version wrong\n");
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_SERVER, buffer, &sz, NULL);
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_SERVER, buffer, &sz, NULL);
|
||||
ok(r, "HttpQueryInfo failed\n");
|
||||
ok(!strcmp(buffer, "winetest"), "http server wrong\n");
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_CONTENT_ENCODING, buffer, &sz, NULL);
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_CONTENT_ENCODING, buffer, &sz, NULL);
|
||||
ok(GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND, "HttpQueryInfo should fail\n");
|
||||
ok(r == FALSE, "HttpQueryInfo failed\n");
|
||||
|
||||
out:
|
||||
InternetCloseHandle(hr);
|
||||
InternetCloseHandle(hc);
|
||||
InternetCloseHandle(hi);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_proxy_direct(int port)
|
||||
@ -3747,278 +3743,225 @@ static void test_basic_authentication(int port)
|
||||
|
||||
static void test_premature_disconnect(int port)
|
||||
{
|
||||
HINTERNET session, connect, request;
|
||||
test_request_t req;
|
||||
DWORD err;
|
||||
BOOL ret;
|
||||
|
||||
session = InternetOpenA("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(session != NULL, "InternetOpen failed\n");
|
||||
|
||||
connect = InternetConnectA(session, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(connect != NULL, "InternetConnect failed\n");
|
||||
|
||||
request = HttpOpenRequestA(connect, NULL, "/premature_disconnect", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
|
||||
ok(request != NULL, "HttpOpenRequest failed\n");
|
||||
open_simple_request(&req, "localhost", port, NULL, "/premature_disconnect");
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = HttpSendRequestA(request, NULL, 0, NULL, 0);
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
err = GetLastError();
|
||||
todo_wine ok(!ret, "HttpSendRequest succeeded\n");
|
||||
todo_wine ok(err == ERROR_HTTP_INVALID_SERVER_RESPONSE, "got %u\n", err);
|
||||
|
||||
InternetCloseHandle(request);
|
||||
InternetCloseHandle(connect);
|
||||
InternetCloseHandle(session);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_invalid_response_headers(int port)
|
||||
{
|
||||
HINTERNET session, connect, request;
|
||||
test_request_t req;
|
||||
DWORD size;
|
||||
BOOL ret;
|
||||
char buffer[256];
|
||||
|
||||
session = InternetOpenA("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(session != NULL, "InternetOpen failed\n");
|
||||
open_simple_request(&req, "localhost", port, NULL, "/testE");
|
||||
|
||||
connect = InternetConnectA(session, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(connect != NULL, "InternetConnect failed\n");
|
||||
|
||||
request = HttpOpenRequestA(connect, NULL, "/testE", NULL, NULL, NULL, 0, 0);
|
||||
ok(request != NULL, "HttpOpenRequest failed\n");
|
||||
|
||||
ret = HttpSendRequestA(request, NULL, 0, NULL, 0);
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed %u\n", GetLastError());
|
||||
|
||||
test_status_code(request, 401);
|
||||
test_request_flags(request, 0);
|
||||
test_status_code(req.request, 401);
|
||||
test_request_flags(req.request, 0);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA( request, HTTP_QUERY_RAW_HEADERS, buffer, &size, NULL);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_RAW_HEADERS, buffer, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(!strcmp(buffer, "HTTP/1.0 401 Anonymous requests or requests on unsecure channel are not allowed"),
|
||||
"headers wrong \"%s\"\n", buffer);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA( request, HTTP_QUERY_SERVER, buffer, &size, NULL);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_SERVER, buffer, &size, NULL);
|
||||
ok(ret, "HttpQueryInfo failed\n");
|
||||
ok(!strcmp(buffer, "winetest"), "server wrong \"%s\"\n", buffer);
|
||||
|
||||
InternetCloseHandle(request);
|
||||
InternetCloseHandle(connect);
|
||||
InternetCloseHandle(session);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_response_without_headers(int port)
|
||||
{
|
||||
HINTERNET hi, hc, hr;
|
||||
test_request_t req;
|
||||
DWORD r, count, size;
|
||||
char buffer[1024];
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
hi = InternetOpenA(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(hi != NULL, "open failed %u\n", GetLastError());
|
||||
open_simple_request(&req, "localhost", port, NULL, "/testG");
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
hc = InternetConnectA(hi, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(hc != NULL, "connect failed %u\n", GetLastError());
|
||||
test_request_flags(req.request, INTERNET_REQFLAG_NO_HEADERS);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
hr = HttpOpenRequestA(hc, NULL, "/testG", NULL, NULL, NULL, 0, 0);
|
||||
ok(hr != NULL, "HttpOpenRequest failed %u\n", GetLastError());
|
||||
|
||||
test_request_flags(hr, INTERNET_REQFLAG_NO_HEADERS);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
r = HttpSendRequestA(hr, NULL, 0, NULL, 0);
|
||||
r = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(r, "HttpSendRequest failed %u\n", GetLastError());
|
||||
|
||||
test_request_flags_todo(hr, INTERNET_REQFLAG_NO_HEADERS);
|
||||
test_request_flags_todo(req.request, INTERNET_REQFLAG_NO_HEADERS);
|
||||
|
||||
count = 0;
|
||||
memset(buffer, 0, sizeof buffer);
|
||||
SetLastError(0xdeadbeef);
|
||||
r = InternetReadFile(hr, buffer, sizeof buffer, &count);
|
||||
r = InternetReadFile(req.request, buffer, sizeof buffer, &count);
|
||||
ok(r, "InternetReadFile failed %u\n", GetLastError());
|
||||
todo_wine ok(count == sizeof page1 - 1, "count was wrong\n");
|
||||
todo_wine ok(!memcmp(buffer, page1, sizeof page1), "http data wrong\n");
|
||||
|
||||
test_status_code(hr, 200);
|
||||
test_request_flags_todo(hr, INTERNET_REQFLAG_NO_HEADERS);
|
||||
test_status_code(req.request, 200);
|
||||
test_request_flags_todo(req.request, INTERNET_REQFLAG_NO_HEADERS);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
SetLastError(0xdeadbeef);
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_STATUS_TEXT, buffer, &size, NULL );
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_STATUS_TEXT, buffer, &size, NULL );
|
||||
ok(r, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(!strcmp(buffer, "OK"), "expected OK got: \"%s\"\n", buffer);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
SetLastError(0xdeadbeef);
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_VERSION, buffer, &size, NULL);
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_VERSION, buffer, &size, NULL);
|
||||
ok(r, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(!strcmp(buffer, "HTTP/1.0"), "expected HTTP/1.0 got: \"%s\"\n", buffer);
|
||||
|
||||
buffer[0] = 0;
|
||||
size = sizeof(buffer);
|
||||
SetLastError(0xdeadbeef);
|
||||
r = HttpQueryInfoA(hr, HTTP_QUERY_RAW_HEADERS, buffer, &size, NULL);
|
||||
r = HttpQueryInfoA(req.request, HTTP_QUERY_RAW_HEADERS, buffer, &size, NULL);
|
||||
ok(r, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(!strcmp(buffer, "HTTP/1.0 200 OK"), "raw headers wrong: \"%s\"\n", buffer);
|
||||
|
||||
InternetCloseHandle(hr);
|
||||
InternetCloseHandle(hc);
|
||||
InternetCloseHandle(hi);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_head_request(int port)
|
||||
{
|
||||
DWORD len, content_length;
|
||||
HINTERNET ses, con, req;
|
||||
test_request_t req;
|
||||
BYTE buf[100];
|
||||
BOOL ret;
|
||||
|
||||
ses = InternetOpenA("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(ses != NULL, "InternetOpen failed\n");
|
||||
open_simple_request(&req, "localhost", port, "HEAD", "/test_head");
|
||||
|
||||
con = InternetConnectA(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(con != NULL, "InternetConnect failed\n");
|
||||
|
||||
req = HttpOpenRequestA(con, "HEAD", "/test_head", NULL, NULL, NULL, INTERNET_FLAG_KEEP_CONNECTION, 0);
|
||||
ok(req != NULL, "HttpOpenRequest failed\n");
|
||||
|
||||
ret = HttpSendRequestA(req, NULL, 0, NULL, 0);
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed: %u\n", GetLastError());
|
||||
|
||||
len = sizeof(content_length);
|
||||
content_length = -1;
|
||||
ret = HttpQueryInfoA(req, HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_CONTENT_LENGTH, &content_length, &len, 0);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_FLAG_NUMBER|HTTP_QUERY_CONTENT_LENGTH, &content_length, &len, 0);
|
||||
ok(ret, "HttpQueryInfo dailed: %u\n", GetLastError());
|
||||
ok(len == sizeof(DWORD), "len = %u\n", len);
|
||||
ok(content_length == 100, "content_length = %u\n", content_length);
|
||||
|
||||
len = -1;
|
||||
ret = InternetReadFile(req, buf, sizeof(buf), &len);
|
||||
ret = InternetReadFile(req.request, buf, sizeof(buf), &len);
|
||||
ok(ret, "InternetReadFile failed: %u\n", GetLastError());
|
||||
|
||||
len = -1;
|
||||
ret = InternetReadFile(req, buf, sizeof(buf), &len);
|
||||
ret = InternetReadFile(req.request, buf, sizeof(buf), &len);
|
||||
ok(ret, "InternetReadFile failed: %u\n", GetLastError());
|
||||
|
||||
InternetCloseHandle(req);
|
||||
InternetCloseHandle(con);
|
||||
InternetCloseHandle(ses);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_HttpQueryInfo(int port)
|
||||
{
|
||||
HINTERNET hi, hc, hr;
|
||||
test_request_t req;
|
||||
DWORD size, index, error;
|
||||
char buffer[1024];
|
||||
BOOL ret;
|
||||
|
||||
hi = InternetOpenA(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(hi != NULL, "InternetOpen failed\n");
|
||||
|
||||
hc = InternetConnectA(hi, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(hc != NULL, "InternetConnect failed\n");
|
||||
|
||||
hr = HttpOpenRequestA(hc, NULL, "/testD", NULL, NULL, NULL, 0, 0);
|
||||
ok(hr != NULL, "HttpOpenRequest failed\n");
|
||||
open_simple_request(&req, "localhost", port, NULL, "/testD");
|
||||
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_STATUS_TEXT, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_STATUS_TEXT, buffer, &size, &index);
|
||||
error = GetLastError();
|
||||
ok(!ret || broken(ret), "HttpQueryInfo succeeded\n");
|
||||
if (!ret) ok(error == ERROR_HTTP_HEADER_NOT_FOUND, "got %u expected ERROR_HTTP_HEADER_NOT_FOUND\n", error);
|
||||
|
||||
ret = HttpSendRequestA(hr, NULL, 0, NULL, 0);
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed\n");
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_HOST | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_HOST | HTTP_QUERY_FLAG_REQUEST_HEADERS, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 1, "expected 1 got %u\n", index);
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_DATE | HTTP_QUERY_FLAG_SYSTEMTIME, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_DATE | HTTP_QUERY_FLAG_SYSTEMTIME, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 1, "expected 1 got %u\n", index);
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
|
||||
index = 0xdeadbeef; /* invalid start index */
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_RAW_HEADERS, buffer, &size, &index);
|
||||
todo_wine ok(!ret, "HttpQueryInfo should have failed\n");
|
||||
todo_wine ok(GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND,
|
||||
"Expected ERROR_HTTP_HEADER_NOT_FOUND, got %u\n", GetLastError());
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_RAW_HEADERS_CRLF, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_RAW_HEADERS_CRLF, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_STATUS_TEXT, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_STATUS_TEXT, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_VERSION, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_VERSION, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 0, "expected 0 got %u\n", index);
|
||||
|
||||
test_status_code(hr, 200);
|
||||
test_status_code(req.request, 200);
|
||||
|
||||
index = 0xdeadbeef;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_FORWARDED, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_FORWARDED, buffer, &size, &index);
|
||||
ok(!ret, "HttpQueryInfo succeeded\n");
|
||||
ok(index == 0xdeadbeef, "expected 0xdeadbeef got %u\n", index);
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_SERVER, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_SERVER, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 1, "expected 1 got %u\n", index);
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
strcpy(buffer, "Server");
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_CUSTOM, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_CUSTOM, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 1, "expected 1 got %u\n", index);
|
||||
|
||||
index = 0;
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_SET_COOKIE, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_SET_COOKIE, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 1, "expected 1 got %u\n", index);
|
||||
|
||||
size = sizeof(buffer);
|
||||
ret = HttpQueryInfoA(hr, HTTP_QUERY_SET_COOKIE, buffer, &size, &index);
|
||||
ret = HttpQueryInfoA(req.request, HTTP_QUERY_SET_COOKIE, buffer, &size, &index);
|
||||
ok(ret, "HttpQueryInfo failed %u\n", GetLastError());
|
||||
ok(index == 2, "expected 2 got %u\n", index);
|
||||
|
||||
InternetCloseHandle(hr);
|
||||
InternetCloseHandle(hc);
|
||||
InternetCloseHandle(hi);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_options(int port)
|
||||
@ -4201,7 +4144,7 @@ static const http_status_test_t http_status_tests[] = {
|
||||
|
||||
static void test_http_status(int port)
|
||||
{
|
||||
HINTERNET ses, con, req;
|
||||
test_request_t req;
|
||||
char buf[1000];
|
||||
DWORD i, size;
|
||||
BOOL res;
|
||||
@ -4209,29 +4152,20 @@ static void test_http_status(int port)
|
||||
for(i=0; i < sizeof(http_status_tests)/sizeof(*http_status_tests); i++) {
|
||||
send_buffer = http_status_tests[i].response_text;
|
||||
|
||||
ses = InternetOpenA(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(ses != NULL, "InternetOpen failed\n");
|
||||
open_simple_request(&req, "localhost", port, NULL, "/send_from_buffer");
|
||||
|
||||
con = InternetConnectA(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(con != NULL, "InternetConnect failed\n");
|
||||
|
||||
req = HttpOpenRequestA(con, NULL, "/send_from_buffer", NULL, NULL, NULL, 0, 0);
|
||||
ok(req != NULL, "HttpOpenRequest failed\n");
|
||||
|
||||
res = HttpSendRequestA(req, NULL, 0, NULL, 0);
|
||||
res = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(res, "HttpSendRequest failed\n");
|
||||
|
||||
test_status_code(req, http_status_tests[i].status_code);
|
||||
test_status_code(req.request, http_status_tests[i].status_code);
|
||||
|
||||
size = sizeof(buf);
|
||||
res = HttpQueryInfoA(req, HTTP_QUERY_STATUS_TEXT, buf, &size, NULL);
|
||||
res = HttpQueryInfoA(req.request, HTTP_QUERY_STATUS_TEXT, buf, &size, NULL);
|
||||
ok(res, "HttpQueryInfo failed: %u\n", GetLastError());
|
||||
ok(!strcmp(buf, http_status_tests[i].status_text), "[%u] Unexpected status text \"%s\", expected \"%s\"\n",
|
||||
i, buf, http_status_tests[i].status_text);
|
||||
|
||||
InternetCloseHandle(req);
|
||||
InternetCloseHandle(con);
|
||||
InternetCloseHandle(ses);
|
||||
close_request(&req);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4285,36 +4219,26 @@ static void test_cache_control_verb(int port)
|
||||
static void test_request_content_length(int port)
|
||||
{
|
||||
char data[] = {'t','e','s','t'};
|
||||
HINTERNET ses, con, req;
|
||||
test_request_t req;
|
||||
BOOL ret;
|
||||
|
||||
hCompleteEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||
|
||||
ses = InternetOpenA("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(ses != NULL, "InternetOpen failed\n");
|
||||
open_simple_request(&req, "localhost", port, "POST", "/test_request_content_length");
|
||||
|
||||
con = InternetConnectA(ses, "localhost", port, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(con != NULL, "InternetConnect failed\n");
|
||||
|
||||
req = HttpOpenRequestA(con, "POST", "/test_request_content_length", NULL, NULL, NULL,
|
||||
INTERNET_FLAG_KEEP_CONNECTION, 0);
|
||||
ok(req != NULL, "HttpOpenRequest failed\n");
|
||||
|
||||
ret = HttpSendRequestA(req, NULL, 0, NULL, 0);
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
ok(ret, "HttpSendRequest failed %u\n", GetLastError());
|
||||
test_status_code(req, 200);
|
||||
test_status_code(req.request, 200);
|
||||
|
||||
SetEvent(hCompleteEvent);
|
||||
|
||||
ret = HttpSendRequestA(req, NULL, 0, data, sizeof(data));
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, data, sizeof(data));
|
||||
ok(ret, "HttpSendRequest failed %u\n", GetLastError());
|
||||
test_status_code(req, 200);
|
||||
test_status_code(req.request, 200);
|
||||
|
||||
SetEvent(hCompleteEvent);
|
||||
|
||||
InternetCloseHandle(req);
|
||||
InternetCloseHandle(con);
|
||||
InternetCloseHandle(ses);
|
||||
close_request(&req);
|
||||
CloseHandle(hCompleteEvent);
|
||||
}
|
||||
|
||||
@ -4605,12 +4529,6 @@ static void test_async_read(int port)
|
||||
CloseHandle( conn_wait_event );
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
HINTERNET session;
|
||||
HINTERNET connection;
|
||||
HINTERNET request;
|
||||
} test_request_t;
|
||||
|
||||
static void server_send_string(const char *msg)
|
||||
{
|
||||
send(server_socket, msg, strlen(msg), 0);
|
||||
@ -6057,28 +5975,19 @@ static void test_InternetCloseHandle(void)
|
||||
|
||||
static void test_connection_failure(void)
|
||||
{
|
||||
HINTERNET session, connect, request;
|
||||
test_request_t req;
|
||||
DWORD error;
|
||||
BOOL ret;
|
||||
|
||||
session = InternetOpenA("winetest", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
|
||||
ok(session != NULL, "failed to get session handle\n");
|
||||
|
||||
connect = InternetConnectA(session, "localhost", 1, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
|
||||
ok(connect != NULL, "failed to get connection handle\n");
|
||||
|
||||
request = HttpOpenRequestA(connect, NULL, "/", NULL, NULL, NULL, 0, 0);
|
||||
ok(request != NULL, "failed to get request handle\n");
|
||||
open_simple_request(&req, "localhost", 1, NULL, "/");
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = HttpSendRequestA(request, NULL, 0, NULL, 0);
|
||||
ret = HttpSendRequestA(req.request, NULL, 0, NULL, 0);
|
||||
error = GetLastError();
|
||||
ok(!ret, "unexpected success\n");
|
||||
ok(error == ERROR_INTERNET_CANNOT_CONNECT, "wrong error %u\n", error);
|
||||
|
||||
InternetCloseHandle(request);
|
||||
InternetCloseHandle(connect);
|
||||
InternetCloseHandle(session);
|
||||
close_request(&req);
|
||||
}
|
||||
|
||||
static void test_default_service_port(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user