[4/9] winhttp: Implement IWinHttpRequest::WaitForResponse.

Hans Leidekker hans at codeweavers.com
Thu Jul 21 04:51:34 CDT 2011


---
 dlls/winhttp/request.c |   38 ++++++++++++++++++++++++++++++++++++--
 1 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 4d8b489..73ef9fa 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -2517,6 +2517,36 @@ static HRESULT WINAPI winhttp_request_Send(
     return S_OK;
 }
 
+static DWORD request_wait_for_response( struct winhttp_request *request, DWORD timeout, VARIANT_BOOL *succeeded )
+{
+    DWORD err;
+
+    if (request->state >= REQUEST_STATE_RESPONSE_RECEIVED) return ERROR_SUCCESS;
+    if (request->state < REQUEST_STATE_SENT)
+    {
+        if ((err = wait_for_completion( request, timeout ))) return err;
+        request->state = REQUEST_STATE_SENT;
+    }
+    wait_set_status_callback( request, WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE );
+    if (!WinHttpReceiveResponse( request->hrequest, NULL ))
+    {
+        return GetLastError();
+    }
+    switch ((err = wait_for_completion( request, timeout )))
+    {
+    case WAIT_OBJECT_0:
+        if (succeeded) *succeeded = VARIANT_TRUE;
+        break;
+    case WAIT_TIMEOUT:
+        if (succeeded) *succeeded = VARIANT_FALSE;
+        break;
+    default:
+        return err;
+    }
+    request->state = REQUEST_STATE_RESPONSE_RECEIVED;
+    return ERROR_SUCCESS;
+}
+ 
 static HRESULT WINAPI winhttp_request_get_Status(
     IWinHttpRequest *iface,
     LONG *status )
@@ -2580,8 +2610,12 @@ static HRESULT WINAPI winhttp_request_WaitForResponse(
     VARIANT timeout,
     VARIANT_BOOL *succeeded )
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    struct winhttp_request *request = impl_from_IWinHttpRequest( iface );
+    DWORD msecs = (V_I4(&timeout) == -1) ? INFINITE : V_I4(&timeout) * 1000;
+
+    TRACE("%p, %s, %p\n", request, debugstr_variant(&timeout), succeeded);
+
+    return HRESULT_FROM_WIN32( request_wait_for_response( request, msecs, succeeded ) );
 }
 
 static HRESULT WINAPI winhttp_request_Abort(
-- 
1.7.4.1







More information about the wine-patches mailing list