From 98e8894d907fdc5e13734e8e47c14ea59d36cb5c Mon Sep 17 00:00:00 2001 From: Delyan Angelov Date: Fri, 6 Nov 2020 16:10:05 +0200 Subject: [PATCH] x.websocket: more informative errors --- vlib/x/websocket/handshake.v | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/vlib/x/websocket/handshake.v b/vlib/x/websocket/handshake.v index 0dcae6e3db..f3b4767e76 100644 --- a/vlib/x/websocket/handshake.v +++ b/vlib/x/websocket/handshake.v @@ -49,13 +49,13 @@ fn (mut s Server) parse_client_handshake(client_handshake string, mut c Client) lines := client_handshake.split_into_lines() get_tokens := lines[0].split(' ') if get_tokens.len < 3 { - return error('unexpected get operation, $get_tokens') + return error_with_code('unexpected get operation, $get_tokens', 1) } if get_tokens[0].trim_space() != 'GET' { - return error("unexpected request '${get_tokens[0]}', expected 'GET'") + return error_with_code("unexpected request '${get_tokens[0]}', expected 'GET'", 2) } if get_tokens[2].trim_space() != 'HTTP/1.1' { - return error("unexpected request $get_tokens, expected 'HTTP/1.1'") + return error_with_code("unexpected request $get_tokens, expected 'HTTP/1.1'", 3) } // path := get_tokens[1].trim_space() mut seckey := '' @@ -87,7 +87,7 @@ fn (mut s Server) parse_client_handshake(client_handshake string, mut c Client) unsafe {keys.free()} } if flags.len < 3 { - return error('invalid client handshake, $client_handshake') + return error_with_code('invalid client handshake, $client_handshake', 4) } server_handshake := 'HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: $seckey\r\n\r\n' server_client := &ServerClient{ @@ -113,7 +113,7 @@ fn (mut ws Client) read_handshake_str() ?string { for total_bytes_read < 1024 { bytes_read := ws.socket_read_into_ptr(byteptr(&buffer), 1) ? if bytes_read == 0 { - return error('unexpected no response from handshake') + return error_with_code('unexpected no response from handshake', 5) } msg[total_bytes_read] = buffer[0] total_bytes_read++ @@ -138,7 +138,7 @@ fn (mut ws Client) check_handshake_response(handshake_response string, seckey st lines := handshake_response.split_into_lines() header := lines[0] if !header.starts_with('HTTP/1.1 101') && !header.starts_with('HTTP/1.0 101') { - return error('handshake_handler: invalid HTTP status response code') + return error_with_code('handshake_handler: invalid HTTP status response code, $header', 6) } for i in 1 .. lines.len { if lines[i].len <= 0 || lines[i] == '\r\n' { @@ -157,7 +157,7 @@ fn (mut ws Client) check_handshake_response(handshake_response string, seckey st challenge := create_key_challenge_response(seckey) ? ws.debug_log('challenge: $challenge, response: ${keys[1]}') if keys[1].trim_space() != challenge { - return error('handshake_handler: Sec-WebSocket-Accept header does not match computed sha1/base64 response.') + return error_with_code('handshake_handler: Sec-WebSocket-Accept header does not match computed sha1/base64 response.', 7) } ws.flags << .has_accept unsafe {challenge.free()} @@ -169,6 +169,6 @@ fn (mut ws Client) check_handshake_response(handshake_response string, seckey st unsafe {lines.free()} if ws.flags.len < 3 { ws.close(1002, 'invalid websocket HTTP headers') ? - return error('invalid websocket HTTP headers') + return error_with_code('invalid websocket HTTP headers', 8) } }