1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

x.websocket: fix autobahn tests for wss and wss close behavor (#6901)

This commit is contained in:
Tomas Hellström
2020-11-21 14:45:45 +01:00
committed by GitHub
parent b6099cd978
commit 155aa6dac5
20 changed files with 333 additions and 63 deletions

View File

@ -94,12 +94,13 @@ pub fn new_client(address string) ?&Client {
// connect, connects and do handshake procedure with remote server
pub fn (mut ws Client) connect() ? {
ws.assert_not_connected()
ws.assert_not_connected()?
ws.set_state(.connecting)
ws.logger.info('connecting to host $ws.uri')
ws.conn = ws.dial_socket()?
ws.conn.set_read_timeout(net.infinite_timeout)
ws.conn.set_write_timeout(net.infinite_timeout)
// Todo: make setting configurable
ws.conn.set_read_timeout(time.second * 30)
ws.conn.set_write_timeout(time.second * 30)
ws.handshake()?
ws.set_state(.open)
ws.logger.info('successfully connected to host $ws.uri')
@ -111,7 +112,9 @@ pub fn (mut ws Client) listen() ? {
ws.logger.info('Starting client listener, server($ws.is_server)...')
defer {
ws.logger.info('Quit client listener, server($ws.is_server)...')
ws.close(1000, 'closed by client')
if ws.state == .open {
ws.close(1000, 'closed by client')
}
}
for ws.state == .open {
msg := ws.read_next_message() or {
@ -122,6 +125,9 @@ pub fn (mut ws Client) listen() ? {
ws.send_error_event('failed to read next message: $err')
return error(err)
}
if ws.state in [.closed, .closing] {
return
}
ws.debug_log('got message: $msg.opcode') // , payload: $msg.payload') leaks
match msg.opcode {
.text_frame {
@ -345,9 +351,6 @@ pub fn (mut ws Client) close(code int, message string) ? {
ws.debug_log('close: Websocket allready closed ($ws.state), $message, $code handle($ws.conn.sock.handle)')
err_msg := 'Socket allready closed: $code'
ret_err := error(err_msg)
// unsafe {
// err_msg.free()
// }
return ret_err
}
defer {
@ -482,6 +485,7 @@ fn (ws Client) assert_not_connected() ? {
match ws.state {
.connecting { return error('connect: websocket is connecting') }
.open { return error('connect: websocket already open') }
.closing { return error('connect: reconnect on closing websocket not supported, please use new client') }
else {}
}
}