11 #include <restinio/compiler_features.hpp> 13 #include <restinio/exception.hpp> 14 #include <restinio/http_headers.hpp> 15 #include <restinio/message_builders.hpp> 16 #include <restinio/chunked_input_info.hpp> 17 #include <restinio/impl/connection_base.hpp> 53 template<
typename Extra_Data >
88 new(buffer.get()) data_t{};
118 template<
typename Extra_Data >
121 using data_t = Extra_Data;
131 template<
typename Extra_Data >
132 class generic_request_t;
137 template<
typename Extra_Data >
154 template<
typename Extra_Data >
160 template<
typename Factory >
207 template<
typename Extra_Data >
208 class generic_request_t final
209 :
public std::enable_shared_from_this< generic_request_t< Extra_Data > >
211 template<
typename UD >
221 template<
typename Extra_Data_Factory >
223 request_id_t request_id,
224 http_request_header_t header,
226 impl::connection_handle_t connection,
227 endpoint_t remote_endpoint,
228 Extra_Data_Factory & extra_data_factory )
233 chunked_input_info_unique_ptr_t{},
234 std::move( connection ),
235 std::move( remote_endpoint ),
244 template<
typename Extra_Data_Factory >
246 request_id_t request_id,
247 http_request_header_t header,
249 chunked_input_info_unique_ptr_t chunked_input_info,
250 impl::connection_handle_t connection,
251 endpoint_t remote_endpoint,
252 Extra_Data_Factory & extra_data_factory )
253 : m_request_id{ request_id }
254 , m_header{ std::move( header ) }
255 , m_body{ std::move( body ) }
256 , m_chunked_input_info{ std::move( chunked_input_info ) }
257 , m_connection{ std::move( connection ) }
258 , m_connection_id{ m_connection->connection_id() }
259 , m_remote_endpoint{ std::move( remote_endpoint ) }
260 , m_extra_data_holder{ extra_data_factory }
277 template <
typename Output = restinio_controlled_output_t >
283 return response_builder_t< Output >{
285 std::move( m_connection ),
287 m_header.should_keep_alive() };
310 return m_chunked_input_info.get();
352 return *m_extra_data_holder.get_ptr();
398 return *m_extra_data_holder.get_ptr();
407 throw exception_t{
"connection already moved" };
439 template<
typename Extra_Data >
484 template<
typename Extra_Data >
const http_request_header_t & header() const noexcept
Get request header.
nullable_pointer_t< const chunked_input_info_t > chunked_input_info() const noexcept
Get optional info about chunked input.
const http_request_header_t m_header
friend impl::connection_handle_t & impl::access_req_connection(generic_request_t< UD > &) noexcept
connection_handle_t & access_req_connection(generic_request_t< Extra_Data > &) noexcept
generic_request_t(request_id_t request_id, http_request_header_t header, std::string body, impl::connection_handle_t connection, endpoint_t remote_endpoint, Extra_Data_Factory &extra_data_factory)
Old-format initializing constructor.
const connection_id_t m_connection_id
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, std::optional< Value_Type > >::type opt_value(const Parameter_Container ¶ms, string_view_t key)
Gets the value of a parameter specified by key wrapped in std::optional<Value_Type> if parameter exis...
auto request_id() const noexcept
Get request id.
generic_request_t(request_id_t request_id, http_request_header_t header, std::string body, chunked_input_info_unique_ptr_t chunked_input_info, impl::connection_handle_t connection, endpoint_t remote_endpoint, Extra_Data_Factory &extra_data_factory)
New-format initializing constructor.
Extra_Data & extra_data() noexcept
Get writeable access to extra-data object incorporated into a request object.
impl::connection_handle_t m_connection
const endpoint_t & remote_endpoint() const noexcept
Get the remote endpoint of the underlying connection.
const Extra_Data & extra_data() const noexcept
Get readonly access to extra-data object incorporated into a request object.
const chunked_input_info_unique_ptr_t m_chunked_input_info
Optional description for chunked-encoding.
const request_id_t m_request_id
std::ostream & operator<<(std::ostream &o, const generic_request_t< Extra_Data > &req)
auto create_response(http_status_line_t status_line=status_ok())
impl::generic_request_extra_data_holder_t< Extra_Data > m_extra_data_holder
An instance of extra-data that is incorporated into a request object.
const std::string & body() const noexcept
Get request body.
connection_id_t connection_id() const noexcept
Get connection id.
const endpoint_t m_remote_endpoint
Remote endpoint for underlying connection.