From 3b1d18fd6e61e5d27bc2b45c92bae58874626908 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 24 Jun 2020 10:33:07 +0200 Subject: [PATCH] winhttp: Implement WinHttpWebSocketQueryCloseStatus. Signed-off-by: Hans Leidekker Signed-off-by: Alexandre Julliard --- dlls/winhttp/request.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c index 60a9585d0d8..631fbb004f1 100644 --- a/dlls/winhttp/request.c +++ b/dlls/winhttp/request.c @@ -3642,10 +3642,38 @@ DWORD WINAPI WinHttpWebSocketClose( HINTERNET hsocket, USHORT status, void *reas } DWORD WINAPI WinHttpWebSocketQueryCloseStatus( HINTERNET hsocket, USHORT *status, void *reason, DWORD len, - DWORD *consumed ) + DWORD *ret_len ) { - FIXME("%p, %p, %p, %u, %p\n", hsocket, status, reason, len, consumed); - return ERROR_INVALID_PARAMETER; + struct socket *socket; + DWORD ret; + + TRACE("%p, %p, %p, %u, %p\n", hsocket, status, reason, len, ret_len); + + if (!status || (len && !reason) || !ret_len) return ERROR_INVALID_PARAMETER; + + if (!(socket = (struct socket *)grab_object( hsocket ))) return ERROR_INVALID_HANDLE; + if (socket->hdr.type != WINHTTP_HANDLE_TYPE_SOCKET) + { + release_object( &socket->hdr ); + return ERROR_WINHTTP_INCORRECT_HANDLE_TYPE; + } + if (socket->state < SOCKET_STATE_CLOSED) + { + release_object( &socket->hdr ); + return ERROR_WINHTTP_INCORRECT_HANDLE_STATE; + } + + *status = socket->status; + *ret_len = socket->reason_len; + if (socket->reason_len > len) ret = ERROR_INSUFFICIENT_BUFFER; + else + { + memcpy( reason, socket->reason, socket->reason_len ); + ret = ERROR_SUCCESS; + } + + release_object( &socket->hdr ); + return ret; } enum request_state -- 2.11.4.GIT