From d73aa0436c9347330424031d039fdbe05fb3ec63 Mon Sep 17 00:00:00 2001
From: Přemysl Janouch
Date: Mon, 6 Feb 2017 18:27:40 +0100
Subject: 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;
--
cgit v1.2.3-70-g09d2