From ce18124566e53453eac0b4c31b1b0bb4ad2361a8 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Mon, 10 Oct 2016 09:00:57 -0400 Subject: [PATCH] Improve first line serialization --- CHANGELOG.md | 1 + include/beast/http/impl/write.ipp | 46 ++++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 10 deletions(-) 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);