WebSocket: fix header parsing

This commit is contained in:
Přemysl Eric Janouch 2017-02-06 18:27:40 +01:00
parent 58408ae74a
commit d73aa0436c
Signed by: p
GPG Key ID: B715679E3A361BE6
1 changed files with 8 additions and 4 deletions

View File

@ -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;