winhttp: Pass server initiated websocket close request to application.
Signed-off-by: Paul Gofman <pgofman@codeweavers.com> Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
85747f0abe
commit
be921fb386
|
@ -3591,6 +3591,8 @@ static DWORD receive_close_status( struct socket *socket, unsigned int len )
|
|||
|
||||
static DWORD handle_control_frame( struct socket *socket )
|
||||
{
|
||||
DWORD ret;
|
||||
|
||||
TRACE( "opcode %u.\n", socket->opcode );
|
||||
|
||||
switch (socket->opcode)
|
||||
|
@ -3602,7 +3604,7 @@ static DWORD handle_control_frame( struct socket *socket )
|
|||
return socket_drain( socket );
|
||||
|
||||
case SOCKET_OPCODE_CLOSE:
|
||||
if (socket->state != SOCKET_STATE_CLOSED)
|
||||
if (socket->state < SOCKET_STATE_SHUTDOWN)
|
||||
WARN( "SOCKET_OPCODE_CLOSE received, socket->state %u.\n", socket->state );
|
||||
if (socket->close_frame_received)
|
||||
{
|
||||
|
@ -3610,9 +3612,9 @@ static DWORD handle_control_frame( struct socket *socket )
|
|||
return ERROR_WINHTTP_INVALID_SERVER_RESPONSE;
|
||||
}
|
||||
|
||||
receive_close_status( socket, socket->read_size );
|
||||
ret = receive_close_status( socket, socket->read_size );
|
||||
socket->read_size = 0;
|
||||
return ERROR_WINHTTP_INVALID_SERVER_RESPONSE;
|
||||
return ret;
|
||||
|
||||
default:
|
||||
ERR("unhandled control opcode %02x\n", socket->opcode);
|
||||
|
@ -3654,7 +3656,8 @@ static DWORD socket_receive( struct socket *socket, void *buf, DWORD len, DWORD
|
|||
{
|
||||
if (!(ret = receive_frame( socket, &socket->read_size, &socket->opcode )))
|
||||
{
|
||||
if (!(socket->opcode & CONTROL_BIT) || (ret = handle_control_frame( socket ))) break;
|
||||
if (!(socket->opcode & CONTROL_BIT) || (ret = handle_control_frame( socket ))
|
||||
|| socket->opcode == SOCKET_OPCODE_CLOSE) break;
|
||||
}
|
||||
else if (ret == WSAETIMEDOUT) ret = socket_send_pong( socket );
|
||||
if (ret) break;
|
||||
|
|
Loading…
Reference in New Issue