Bugfix: sometimes servers send \n instead of \r\n

event_stream
Ryan Dahl 15 years ago
parent 1d9ebac036
commit 6108b765ce

@ -930,8 +930,10 @@ size_t parse (http_parser *parser, const char *data, size_t len, int start_state
}
if (ch == LF) {
// XXX recover from this? nginx does.
goto error;
/* they might be just sending \n instead of \r\n so this would be
* the second \n to denote the end of headers*/
state = s_headers_almost_done;
goto headers_almost_done;
}
c = LOWER(ch);
@ -1137,8 +1139,7 @@ size_t parse (http_parser *parser, const char *data, size_t len, int start_state
if (ch == LF) {
CALLBACK(header_value);
state = s_header_field_start;
break;
goto header_almost_done;
}
break;
}
@ -1205,6 +1206,7 @@ size_t parse (http_parser *parser, const char *data, size_t len, int start_state
}
case s_header_almost_done:
header_almost_done:
{
STRICT_CHECK(ch != LF);
@ -1227,6 +1229,7 @@ size_t parse (http_parser *parser, const char *data, size_t len, int start_state
}
case s_headers_almost_done:
headers_almost_done:
{
STRICT_CHECK(ch != LF);

@ -579,6 +579,27 @@ const struct message responses[] =
}
#define NO_CARRIAGE_RET 5
, {.name="no carriage ret"
,.type= RESPONSE
,.raw= "HTTP/1.1 200 OK\n"
"Content-Type: text/html; charset=utf-8\n"
"Connection: close\n"
"\n"
"these headers are from http://news.ycombinator.com/"
,.should_keep_alive= FALSE
,.message_complete_on_eof= TRUE
,.http_major= 1
,.http_minor= 1
,.status_code= 200
,.num_headers= 2
,.headers=
{ {"Content-Type", "text/html; charset=utf-8" }
, {"Connection", "close" }
}
,.body= "these headers are from http://news.ycombinator.com/"
}
, {.name= NULL } /* sentinel */
};

Loading…
Cancel
Save