Improve first line serialization

This commit is contained in:
Vinnie Falco
2016-10-10 09:00:57 -04:00
parent a26a8ea433
commit ce18124566
2 changed files with 37 additions and 10 deletions

View File

@@ -4,6 +4,7 @@
* Frame processing routines are member functions * Frame processing routines are member functions
* Fix on_headers called twice from basic_parser_v1 * Fix on_headers called twice from basic_parser_v1
* Constrain parser_v1 constructor * Constrain parser_v1 constructor
* Improve first line serialization
* Refine Parser concept * Refine Parser concept
API Changes: API Changes:

View File

@@ -40,11 +40,24 @@ write_firstline(DynamicBuffer& dynabuf,
write(dynabuf, msg.method); write(dynabuf, msg.method);
write(dynabuf, " "); write(dynabuf, " ");
write(dynabuf, msg.url); write(dynabuf, msg.url);
write(dynabuf, " HTTP/"); switch(msg.version)
write(dynabuf, msg.version / 10); {
write(dynabuf, "."); case 10:
write(dynabuf, msg.version % 10); write(dynabuf, " HTTP/1.0\r\n");
write(dynabuf, "\r\n"); break;
case 11:
write(dynabuf, " HTTP/1.1\r\n");
break;
default:
{
std::string s;
s = " HTTP/" +
std::to_string(msg.version/10) + '.' +
std::to_string(msg.version%10) + "\r\n";
write(dynabuf, s);
break;
}
}
} }
template<class DynamicBuffer, class Body, class Headers> template<class DynamicBuffer, class Body, class Headers>
@@ -52,11 +65,24 @@ void
write_firstline(DynamicBuffer& dynabuf, write_firstline(DynamicBuffer& dynabuf,
message_v1<false, Body, Headers> const& msg) message_v1<false, Body, Headers> const& msg)
{ {
write(dynabuf, "HTTP/"); switch(msg.version)
write(dynabuf, msg.version / 10); {
write(dynabuf, "."); case 10:
write(dynabuf, msg.version % 10); write(dynabuf, "HTTP/1.0 ");
write(dynabuf, " "); break;
case 11:
write(dynabuf, "HTTP/1.1 ");
break;
default:
{
std::string s;
s = " HTTP/" +
std::to_string(msg.version/10) + '.' +
std::to_string(msg.version%10) + ' ';
write(dynabuf, s);
break;
}
}
write(dynabuf, msg.status); write(dynabuf, msg.status);
write(dynabuf, " "); write(dynabuf, " ");
write(dynabuf, msg.reason); write(dynabuf, msg.reason);