From d73aa0436c9347330424031d039fdbe05fb3ec63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C5=99emysl=20Janouch?= Date: Mon, 6 Feb 2017 18:27:40 +0100 Subject: [PATCH] WebSocket: fix header parsing --- json-rpc-shell.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/json-rpc-shell.c b/json-rpc-shell.c index 2a36bf8..6792bb4 100644 --- a/json-rpc-shell.c +++ b/json-rpc-shell.c @@ -1302,7 +1302,7 @@ struct ws_context char *key; ///< Key for the current handshake http_parser hp; ///< HTTP parser - bool parsing_header_value; ///< Parsing header value or field? + bool have_header_value; ///< Parsing header value or field? struct str field; ///< Field part buffer struct str value; ///< Value part buffer struct str_map headers; ///< HTTP Headers @@ -1431,14 +1431,14 @@ static int backend_ws_on_header_field (http_parser *parser, const char *at, size_t len) { struct ws_context *self = parser->data; - if (self->parsing_header_value) + if (self->have_header_value) { backend_ws_on_header_read (self); str_reset (&self->field); str_reset (&self->value); } str_append_data (&self->field, at, len); - self->parsing_header_value = false; + self->have_header_value = false; return 0; } @@ -1447,13 +1447,17 @@ backend_ws_on_header_value (http_parser *parser, const char *at, size_t len) { struct ws_context *self = parser->data; str_append_data (&self->value, at, len); - self->parsing_header_value = true; + self->have_header_value = true; return 0; } static int backend_ws_on_headers_complete (http_parser *parser) { + struct ws_context *self = parser->data; + if (self->have_header_value) + backend_ws_on_header_read (self); + // We strictly require a protocol upgrade if (!parser->upgrade) return 2;