27template< std::
size_t N >
49 result +=
h.reason_phrase().size() + 2;
55 h.for_each_field( [&
result](
const auto &
f)
noexcept {
56 result +=
f.name().size() + 2 +
f.value().size() + 2;
72 std::size_t buffer_size = 0 )
76 if( 0 != buffer_size )
77 result.reserve( buffer_size );
84 result +=
static_cast<char>(
'0' +
h.http_major() );
86 result +=
static_cast<char>(
'0' +
h.http_minor() );
89 const auto sc =
h.status_code().raw_code();
101 constexpr const char header_rn[] =
"\r\n";
104 switch(
h.connection() )
108 constexpr const char header_part2_1[] =
"Connection: keep-alive\r\n";
122 constexpr const char header_part2_3[] =
"Connection: Upgrade\r\n";
131 std::array< char, 64 > buf;
136 "Content-Length: %llu\r\n",
137 static_cast< unsigned long long >(
h.content_length() ) );
139 result.append( buf.data(),
static_cast<std::string::size_type
>(
n) );
159 "HTTP/1.1 501 Not Implemented\r\n"
160 "Connection: close\r\n"
161 "Content-Length: 0\r\n"
173 "HTTP/1.1 504 Gateway Time-out\r\n"
174 "Connection: close\r\n"
175 "Content-Length: 0\r\n"
std::size_t calculate_approx_buffer_size_for_header(const http_response_header_t &h) noexcept
Calculate buffer size that is enough for serializing the buffer.
std::string create_header_string(const http_response_header_t &h, content_length_field_presence_t content_length_field_presence=content_length_field_presence_t::add_content_length, std::size_t buffer_size=0)
Creates a string for http response header.
auto create_timeout_resp()
auto create_not_implemented_resp()
content_length_field_presence_t
constexpr std::size_t ct_string_len(const char(&)[N]) noexcept
Compile time c-string length.
std::vector< writable_item_t > writable_items_container_t
run_on_this_thread_settings_t< Traits > on_this_thread()
A special marker for the case when http_server must be run on the context of the current thread.