Module: wine Branch: master Commit: f213cdbc4e0215be595c70f943142e0f63df6d4e URL: http://source.winehq.org/git/wine.git/?a=commit;h=f213cdbc4e0215be595c70f943...
Author: Greg Geldorp ggeldorp@vmware.com Date: Thu Jan 20 13:39:05 2011 +0100
winhttp/tests: No reconnect on redirect when using proxy.
---
dlls/winhttp/tests/notification.c | 42 +++++++++++++++++++++++++++++------- 1 files changed, 34 insertions(+), 8 deletions(-)
diff --git a/dlls/winhttp/tests/notification.c b/dlls/winhttp/tests/notification.c index bd6db58..6c9142b 100644 --- a/dlls/winhttp/tests/notification.c +++ b/dlls/winhttp/tests/notification.c @@ -46,6 +46,7 @@ struct notification unsigned int status; /* status received */ int todo; int ignore; + int skipped_for_proxy; };
struct info @@ -58,6 +59,25 @@ struct info unsigned int line; };
+static BOOL proxy_active(void) +{ + WINHTTP_PROXY_INFO proxy_info; + BOOL active = FALSE; + + if (WinHttpGetDefaultProxyConfiguration(&proxy_info)) + { + active = (proxy_info.lpszProxy != NULL); + if (active) + GlobalFree((HGLOBAL) proxy_info.lpszProxy); + if (proxy_info.lpszProxyBypass != NULL) + GlobalFree((HGLOBAL) proxy_info.lpszProxyBypass); + } + else + active = FALSE; + + return active; +} + static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DWORD status, LPVOID buffer, DWORD buflen ) { BOOL status_ok, function_ok; @@ -88,6 +108,12 @@ static void CALLBACK check_notification( HINTERNET handle, DWORD_PTR context, DW } } if (status_ok) info->index++; + if (proxy_active()) + { + while (info->test[info->index].skipped_for_proxy) + info->index++; + } + if (status & (WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING)) { SetEvent( info->wait ); @@ -222,10 +248,10 @@ static const struct notification redirect_test[] = { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REDIRECT, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0, 0, 1 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0, 0, 1 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0, 0, 1 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, @@ -299,10 +325,10 @@ static const struct notification async_test[] = { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REDIRECT, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0 }, - { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RESOLVING_NAME, 0, 0, 1 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_NAME_RESOLVED, 0, 0, 1 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTING_TO_SERVER, 0, 0, 1 }, + { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_CONNECTED_TO_SERVER, 0, 0, 1 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_SENDING_REQUEST, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_REQUEST_SENT, 0 }, { winhttp_receive_response, WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE, 0 },