diff --git a/CHANGELOG.md b/CHANGELOG.md index 77926efa..8c7a1c8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +Version 118: + +HTTP: + +* Fix writing header into std::ostream + +-------------------------------------------------------------------------------- + Version 117: * Add buffers_to_string diff --git a/include/boost/beast/http/impl/write.ipp b/include/boost/beast/http/impl/write.ipp index 5ce7ee90..1d9e8448 100644 --- a/include/boost/beast/http/impl/write.ipp +++ b/include/boost/beast/http/impl/write.ipp @@ -878,7 +878,7 @@ operator<<(std::ostream& os, header const& h) { typename Fields::reader fr{ - h, h.version, h.method()}; + h, h.version(), h.method()}; return os << buffers(fr.get()); } @@ -888,7 +888,7 @@ operator<<(std::ostream& os, header const& h) { typename Fields::reader fr{ - h, h.version, h.result_int()}; + h, h.version(), h.result_int()}; return os << buffers(fr.get()); } diff --git a/test/beast/http/write.cpp b/test/beast/http/write.cpp index 78fa0f0b..35437df2 100644 --- a/test/beast/http/write.cpp +++ b/test/beast/http/write.cpp @@ -596,14 +596,36 @@ public: void test_std_ostream() { // Conversion to std::string via operator<< - request m; - m.method(verb::get); - m.target("/"); - m.version(11); - m.set(field::user_agent, "test"); - m.body() = "*"; - BEAST_EXPECT(to_string(m) == - "GET / HTTP/1.1\r\nUser-Agent: test\r\n\r\n*"); + { + request m; + m.method(verb::get); + m.target("/"); + m.version(11); + m.set(field::user_agent, "test"); + m.body() = "*"; + BEAST_EXPECT(to_string(m) == + "GET / HTTP/1.1\r\nUser-Agent: test\r\n\r\n*"); + } + + // Output to std::ostream + { + request m{verb::get, "/", 11}; + std::stringstream ss; + ss << m; + BEAST_EXPECT(ss.str() == + "GET / HTTP/1.1\r\n" + "\r\n"); + } + + // Output header to std::ostream + { + request m{verb::get, "/", 11}; + std::stringstream ss; + ss << m.base(); + BEAST_EXPECT(ss.str() == + "GET / HTTP/1.1\r\n" + "\r\n"); + } } // Ensure completion handlers are not leaked