[PATCH 2/2] winhttp: Semi-stub WinHttpWebSocketQueryCloseStatus

Alistair Leslie-Hughes leslie_alistair at hotmail.com
Tue Jun 23 23:05:52 CDT 2020


Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
 dlls/winhttp/request.c       | 26 ++++++++++++++++++++++++--
 dlls/winhttp/tests/winhttp.c | 10 ++++++++++
 2 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 7ca2dfe864..e7c2184ab0 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -3185,8 +3185,30 @@ DWORD WINAPI WinHttpWebSocketClose( HINTERNET hsocket, USHORT status, void *reas
 DWORD WINAPI WinHttpWebSocketQueryCloseStatus( HINTERNET hsocket, USHORT *status, void *reason, DWORD len,
                                                DWORD *consumed )
 {
-    FIXME("%p, %p, %p, %u, %p\n", hsocket, status, reason, len, consumed);
-    return ERROR_INVALID_PARAMETER;
+    struct socket *sock;
+
+    FIXME("%p, %p, %p, %u, %p Semi-stub\n", hsocket, status, reason, len, consumed);
+
+    if (!(sock = (struct socket *)grab_object( hsocket )))
+    {
+        return ERROR_INVALID_HANDLE;
+    }
+
+    if (sock->hdr.type != WINHTTP_HANDLE_TYPE_SOCKET)
+    {
+        ERR("Incorrect handle type\n");
+        release_object( &sock->hdr );
+        return ERROR_WINHTTP_INCORRECT_HANDLE_TYPE;
+    }
+
+    if (reason)
+        *(char*)reason = 0;
+    *consumed = 0;
+    *status = WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS;
+
+    release_object( &sock->hdr );
+
+    return NO_ERROR;
 }
 
 enum request_state
diff --git a/dlls/winhttp/tests/winhttp.c b/dlls/winhttp/tests/winhttp.c
index 44f156ba39..804d4fbca9 100644
--- a/dlls/winhttp/tests/winhttp.c
+++ b/dlls/winhttp/tests/winhttp.c
@@ -39,6 +39,7 @@ DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
 
 static DWORD     (WINAPI *pWinHttpWebSocketClose)(HINTERNET,USHORT,void *,DWORD);
 static HINTERNET (WINAPI *pWinHttpWebSocketCompleteUpgrade)(HINTERNET,DWORD_PTR);
+static DWORD     (WINAPI *pWinHttpWebSocketQueryCloseStatus)(HINTERNET,USHORT*,void*,DWORD,DWORD*);
 
 static BOOL proxy_active(void)
 {
@@ -3104,6 +3105,7 @@ static void test_websocket(int port)
     WCHAR header[32];
     char buf[128];
     BOOL ret;
+    USHORT closestatus;
 
     if (!pWinHttpWebSocketCompleteUpgrade)
     {
@@ -3252,6 +3254,13 @@ static void test_websocket(int port)
     ret = pWinHttpWebSocketClose(socket, WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS, NULL, 0);
     ok(ret == NO_ERROR, "got %u\n", GetLastError());
 
+    size = sizeof(buf);
+    closestatus = WINHTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS;
+    ret = pWinHttpWebSocketQueryCloseStatus(socket, &closestatus, NULL, 0, &size);
+    ok(ret == NO_ERROR, "got %u\n", GetLastError());
+    ok(size == 0, "got %u\n", size);
+    ok(closestatus == WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS, "got %u\n", closestatus);
+
     /* request handle is still valid */
     size = sizeof(ctx);
     ret = WinHttpQueryOption(request, WINHTTP_OPTION_CONTEXT_VALUE, &ctx, &size);
@@ -4948,6 +4957,7 @@ START_TEST (winhttp)
 
     pWinHttpWebSocketClose = (void *)GetProcAddress(mod, "WinHttpWebSocketClose");
     pWinHttpWebSocketCompleteUpgrade = (void *)GetProcAddress(mod, "WinHttpWebSocketCompleteUpgrade");
+    pWinHttpWebSocketQueryCloseStatus = (void *)GetProcAddress(mod, "WinHttpWebSocketQueryCloseStatus");
 
     test_WinHttpOpenRequest();
     test_WinHttpSendRequest();
-- 
2.27.0




More information about the wine-devel mailing list