84 lines
1.5 KiB
C++
Raw Normal View History

2025-03-07 02:25:54 +01:00
#ifndef seafire__server__request_hxx_
#define seafire__server__request_hxx_
#include <seafire/protocol/request.hxx>
#include <seafire/common/allocator.hxx>
#include <seafire/common/extension-context.hxx>
#include <seafire/common/io/buffer.hxx>
#include <asio.hpp>
namespace seafire::server
{
/// Represents a server-side request.
///
class request_t
{
public:
protocol::request_t const&
get_message() const;
std::istream&
content();
// fixme: replace with non-virtual function and virtual
// get_request_allocator function.
//
virtual
common::allocator_t&
memory() = 0;
common::extension_context_t&
extensions();
protected:
request_t();
request_t(request_t const&) = delete;
request_t(request_t&&) = delete;
~request_t() noexcept;
request_t& operator=(request_t const&) = delete;
request_t& operator=(request_t&&) = delete;
private:
virtual
protocol::request_t const&
get_request() const = 0;
virtual
std::istream&
get_request_content() = 0;
virtual
common::extension_context_t&
get_request_extensions() = 0;
};
template<typename Header>
bool
has(request_t const&);
template<typename Header>
bool
has_quick(request_t const&);
template<typename Header>
auto
get(request_t const&);
template<typename Header>
auto
get(request_t const&, std::error_code&);
} // namespace seafire::server
#include <seafire/server/request.txx>
#endif