WebSocket: fix header parsing
This commit is contained in:
parent
2b7d455471
commit
a785dc9670
@ -476,7 +476,7 @@ struct ws_handler
|
|||||||
// HTTP handshake:
|
// HTTP 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
|
||||||
@ -873,14 +873,14 @@ static int
|
|||||||
ws_handler_on_header_field (http_parser *parser, const char *at, size_t len)
|
ws_handler_on_header_field (http_parser *parser, const char *at, size_t len)
|
||||||
{
|
{
|
||||||
struct ws_handler *self = parser->data;
|
struct ws_handler *self = parser->data;
|
||||||
if (self->parsing_header_value)
|
if (self->have_header_value)
|
||||||
{
|
{
|
||||||
ws_handler_on_header_read (self);
|
ws_handler_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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -889,13 +889,17 @@ ws_handler_on_header_value (http_parser *parser, const char *at, size_t len)
|
|||||||
{
|
{
|
||||||
struct ws_handler *self = parser->data;
|
struct ws_handler *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
|
||||||
ws_handler_on_headers_complete (http_parser *parser)
|
ws_handler_on_headers_complete (http_parser *parser)
|
||||||
{
|
{
|
||||||
|
struct ws_handler *self = parser->data;
|
||||||
|
if (self->have_header_value)
|
||||||
|
ws_handler_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
Block a user