20 if( ctx->m_header.request_target().length() >
21 ctx->m_limits.max_url_size() )
26 catch(
const std::exception & )
43 if( ctx->m_last_was_value )
46 if( ctx->m_total_field_count == ctx->m_limits.max_field_count() )
52 ctx->m_last_was_value =
false;
56 ctx->m_current_field_name.append( at, length );
59 if( ctx->m_current_field_name.size() >
60 ctx->m_limits.max_field_name_size() )
65 catch(
const std::exception & )
76 fields.append_last_field( value );
88 ? ctx->m_chunked_info_block.m_trailing_fields
91 if( !ctx->m_last_was_value )
95 std::string{ at, length } );
97 ctx->m_last_value_total_size = length;
98 ctx->m_last_was_value =
true;
101 ctx->m_total_field_count += 1u;
106 ctx->m_last_value_total_size += length;
109 if( ctx->m_last_value_total_size >=
110 ctx->m_limits.max_field_value_size() )
115 catch(
const std::exception & )
133 if( ULLONG_MAX != parser->content_length &&
134 0 < parser->content_length )
137 if( parser->content_length > ctx->m_limits.max_body_size() )
146 parser->content_length) );
148 catch(
const std::exception & )
168 const auto total_length =
static_cast<std::uint64_t
>(
169 ctx->m_body.size() ) + length;
170 if( total_length > ctx->m_limits.max_body_size() )
175 ctx->
m_body.append( at, length );
177 catch(
const std::exception & )
194 if( 0u != parser->content_length )
209 catch(
const std::exception & )
224template<
typename Http_Methods >
229 http_parser_pause( parser, 1 );
236 if( !ctx->m_last_was_value && !ctx->m_current_field_name.empty() )
243 ctx->m_message_complete =
true;
244 ctx->m_header.method( Http_Methods::from_nodejs( parser->method ) );
246 if( 0 == parser->upgrade )
247 ctx->m_header.should_keep_alive( 0 != http_should_keep_alive( parser ) );
std::size_t uint64_to_size_t(std::uint64_t v)
Helper function for truncating uint64 to std::size_t with exception if that truncation will lead to d...
ws_handle_t upgrade(generic_request_type_from_traits_t< Traits > &req, activation_t activation_flag, http_header_fields_t upgrade_response_header_fields, WS_Message_Handler ws_message_handler)
Upgrade http-connection of a current request to a websocket connection.
nonstd::string_view string_view_t
int restinio_url_cb(http_parser *parser, const char *at, size_t length)
int restinio_header_value_cb(http_parser *parser, const char *at, size_t length)
int restinio_body_cb(http_parser *parser, const char *at, size_t length)
int restinio_message_complete_cb(http_parser *parser)
void append_last_field_accessor(http_header_fields_t &fields, string_view_t value)
int restinio_chunk_complete_cb(http_parser *)
int restinio_headers_complete_cb(http_parser *parser)
int restinio_header_field_cb(http_parser *parser, const char *at, size_t length)
int restinio_chunk_header_cb(http_parser *parser)
Parsing result context for using in parser callbacks.
bool m_leading_headers_completed
http_request_header_t m_header
Request data.
chunked_input_info_block_t m_chunked_info_block
std::string m_current_field_name
Parser context temp values and flags.