WebSocket: fix header parsing
This commit is contained in:
parent
58408ae74a
commit
d73aa0436c
|
@ -1302,7 +1302,7 @@ struct ws_context
|
||||||
char *key; ///< Key for the current handshake
|
char *key; ///< Key for the current handshake
|
||||||
|
|
||||||
http_parser hp; ///< HTTP parser
|
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 field; ///< Field part buffer
|
||||||
struct str value; ///< Value part buffer
|
struct str value; ///< Value part buffer
|
||||||
struct str_map headers; ///< HTTP Headers
|
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)
|
backend_ws_on_header_field (http_parser *parser, const char *at, size_t len)
|
||||||
{
|
{
|
||||||
struct ws_context *self = parser->data;
|
struct ws_context *self = parser->data;
|
||||||
if (self->parsing_header_value)
|
if (self->have_header_value)
|
||||||
{
|
{
|
||||||
backend_ws_on_header_read (self);
|
backend_ws_on_header_read (self);
|
||||||
str_reset (&self->field);
|
str_reset (&self->field);
|
||||||
str_reset (&self->value);
|
str_reset (&self->value);
|
||||||
}
|
}
|
||||||
str_append_data (&self->field, at, len);
|
str_append_data (&self->field, at, len);
|
||||||
self->parsing_header_value = false;
|
self->have_header_value = false;
|
||||||
return 0;
|
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;
|
struct ws_context *self = parser->data;
|
||||||
str_append_data (&self->value, at, len);
|
str_append_data (&self->value, at, len);
|
||||||
self->parsing_header_value = true;
|
self->have_header_value = true;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
backend_ws_on_headers_complete (http_parser *parser)
|
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
|
// We strictly require a protocol upgrade
|
||||||
if (!parser->upgrade)
|
if (!parser->upgrade)
|
||||||
return 2;
|
return 2;
|
||||||
|
|
Loading…
Reference in New Issue