69 const http_response_header_t & h,
72 std::size_t buffer_size = 0 )
76 if( 0 != buffer_size )
77 result.reserve( buffer_size );
79 result.reserve( calculate_approx_buffer_size_for_header( h ) );
81 constexpr const char header_part1[] =
"HTTP/";
82 result.append( header_part1, ct_string_len( header_part1 ) );
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();
94 result +=
'0' + ( sc / 100 ) % 10;
95 result +=
'0' + ( sc / 10 ) % 10;
96 result +=
'0' + ( sc ) % 10;
99 result += h.reason_phrase();
101 constexpr const char header_rn[] =
"\r\n";
102 result.append( header_rn, ct_string_len( header_rn ) );
104 switch( h.connection() )
106 case http_connection_header_t::keep_alive:
108 constexpr const char header_part2_1[] =
"Connection: keep-alive\r\n";
109 result.append( header_part2_1, ct_string_len( header_part2_1 ) );
113 case http_connection_header_t::close:
115 constexpr const char header_part2_2[] =
"Connection: close\r\n";
116 result.append( header_part2_2, ct_string_len( header_part2_2 ) );
120 case http_connection_header_t::upgrade:
122 constexpr const char header_part2_3[] =
"Connection: Upgrade\r\n";
123 result.append( header_part2_3, ct_string_len( header_part2_3 ) );
129 content_length_field_presence )
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) );
142 constexpr const char header_field_sep[] =
": ";
143 h.for_each_field( [&result, header_field_sep, header_rn](
const auto & f) {
145 result.append( header_field_sep, ct_string_len( header_field_sep ) );
147 result.append( header_rn, ct_string_len( header_rn ) );
150 result.append( header_rn, ct_string_len( header_rn ) );
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.