Paul Gofman : winhttp: Return ERROR_INVALID_OPERATION when websocket is in the wrong state.
Alexandre Julliard
julliard at winehq.org
Tue Jan 25 15:41:18 CST 2022
Module: wine
Branch: master
Commit: 01c02f60d4dae78cab644dd936c486d23a136664
URL: https://source.winehq.org/git/wine.git/?a=commit;h=01c02f60d4dae78cab644dd936c486d23a136664
Author: Paul Gofman <pgofman at codeweavers.com>
Date: Tue Jan 25 03:07:56 2022 +0300
winhttp: Return ERROR_INVALID_OPERATION when websocket is in the wrong state.
Signed-off-by: Paul Gofman <pgofman at codeweavers.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winhttp/request.c | 10 +++++-----
dlls/winhttp/tests/notification.c | 15 ++++++++++++++-
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/dlls/winhttp/request.c b/dlls/winhttp/request.c
index 31e65a68359..fc2c06bd11f 100644
--- a/dlls/winhttp/request.c
+++ b/dlls/winhttp/request.c
@@ -3324,7 +3324,7 @@ DWORD WINAPI WinHttpWebSocketSend( HINTERNET hsocket, WINHTTP_WEB_SOCKET_BUFFER_
if (socket->state != SOCKET_STATE_OPEN)
{
release_object( &socket->hdr );
- return ERROR_WINHTTP_INCORRECT_HANDLE_STATE;
+ return ERROR_INVALID_OPERATION;
}
if (socket->request->connect->hdr.flags & WINHTTP_FLAG_ASYNC)
@@ -3625,7 +3625,7 @@ DWORD WINAPI WinHttpWebSocketReceive( HINTERNET hsocket, void *buf, DWORD len, D
if (socket->state > SOCKET_STATE_SHUTDOWN)
{
release_object( &socket->hdr );
- return ERROR_WINHTTP_INCORRECT_HANDLE_STATE;
+ return ERROR_INVALID_OPERATION;
}
if (socket->request->connect->hdr.flags & WINHTTP_FLAG_ASYNC)
@@ -3704,7 +3704,7 @@ DWORD WINAPI WinHttpWebSocketShutdown( HINTERNET hsocket, USHORT status, void *r
if (socket->state >= SOCKET_STATE_SHUTDOWN)
{
release_object( &socket->hdr );
- return ERROR_WINHTTP_INCORRECT_HANDLE_STATE;
+ return ERROR_INVALID_OPERATION;
}
if (socket->request->connect->hdr.flags & WINHTTP_FLAG_ASYNC)
@@ -3814,7 +3814,7 @@ DWORD WINAPI WinHttpWebSocketClose( HINTERNET hsocket, USHORT status, void *reas
if (socket->state >= SOCKET_STATE_CLOSED)
{
release_object( &socket->hdr );
- return ERROR_WINHTTP_INCORRECT_HANDLE_STATE;
+ return ERROR_INVALID_OPERATION;
}
if (socket->request->connect->hdr.flags & WINHTTP_FLAG_ASYNC)
@@ -3859,7 +3859,7 @@ DWORD WINAPI WinHttpWebSocketQueryCloseStatus( HINTERNET hsocket, USHORT *status
if (socket->state < SOCKET_STATE_CLOSED)
{
release_object( &socket->hdr );
- return ERROR_WINHTTP_INCORRECT_HANDLE_STATE;
+ return ERROR_INVALID_OPERATION;
}
*status = socket->status;
diff --git a/dlls/winhttp/tests/notification.c b/dlls/winhttp/tests/notification.c
index e919159ba98..0c3ff98c342 100644
--- a/dlls/winhttp/tests/notification.c
+++ b/dlls/winhttp/tests/notification.c
@@ -816,6 +816,12 @@ static void test_websocket(BOOL secure)
ok( err == ERROR_SUCCESS, "got %u\n", err );
WaitForSingleObject( info.wait, INFINITE );
+ err = pWinHttpWebSocketShutdown( socket, 1000, (void *)"success", sizeof("success") );
+ ok( err == ERROR_INVALID_OPERATION, "got %u\n", err );
+ err = pWinHttpWebSocketSend( socket, WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE,
+ (void*)"hello", sizeof("hello") );
+ ok( err == ERROR_INVALID_OPERATION, "got %u\n", err );
+
setup_test( &info, winhttp_websocket_receive, __LINE__ );
buffer[0] = 0;
size = 0xdeadbeef;
@@ -838,8 +844,15 @@ static void test_websocket(BOOL secure)
ok( type == 0xdeadbeef, "got %u\n", type );
ok( buffer[0] == 'h', "unexpected data\n" );
+ close_status = 0xdead;
+ size = sizeof(buffer) + 1;
+ err = pWinHttpWebSocketQueryCloseStatus( socket, &close_status, buffer, sizeof(buffer), &size );
+ ok( err == ERROR_INVALID_OPERATION, "got %u\n", err );
+ ok( close_status == 0xdead, "got %u\n", close_status );
+ ok( size == sizeof(buffer) + 1, "got %u\n", size );
+
setup_test( &info, winhttp_websocket_close, __LINE__ );
- ret = pWinHttpWebSocketClose( socket, 1000, (void *)"success", sizeof("success") );
+ err = pWinHttpWebSocketClose( socket, 1000, (void *)"success", sizeof("success") );
ok( err == ERROR_SUCCESS, "got %u\n", err );
WaitForSingleObject( info.wait, INFINITE );
More information about the wine-cvs
mailing list