diff --git a/CHANGELOG.md b/CHANGELOG.md index c7ad903c..eb336e4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * Frame processing routines are member functions * Fix on_headers called twice from basic_parser_v1 * Constrain parser_v1 constructor +* Improve first line serialization * Refine Parser concept API Changes: diff --git a/include/beast/http/impl/write.ipp b/include/beast/http/impl/write.ipp index 2a319228..81df375c 100644 --- a/include/beast/http/impl/write.ipp +++ b/include/beast/http/impl/write.ipp @@ -40,11 +40,24 @@ write_firstline(DynamicBuffer& dynabuf, write(dynabuf, msg.method); write(dynabuf, " "); write(dynabuf, msg.url); - write(dynabuf, " HTTP/"); - write(dynabuf, msg.version / 10); - write(dynabuf, "."); - write(dynabuf, msg.version % 10); - write(dynabuf, "\r\n"); + switch(msg.version) + { + case 10: + write(dynabuf, " HTTP/1.0\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 @@ -52,11 +65,24 @@ void write_firstline(DynamicBuffer& dynabuf, message_v1 const& msg) { - write(dynabuf, "HTTP/"); - write(dynabuf, msg.version / 10); - write(dynabuf, "."); - write(dynabuf, msg.version % 10); - write(dynabuf, " "); + switch(msg.version) + { + case 10: + write(dynabuf, "HTTP/1.0 "); + 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, " "); write(dynabuf, msg.reason);