35class HttpRequest
final {
37 using HeadersMap = USERVER_NAMESPACE::http::
headers::HeaderMap;
39 using HeadersMapKeys =
decltype(
utils::impl::MakeKeysView(HeadersMap
()));
41 using CookiesMap = std::unordered_map<std::string, std::string,
utils::
StrCaseHash>;
43 using CookiesMapKeys =
decltype(
utils::impl::MakeKeysView(CookiesMap()));
46 explicit HttpRequest(
request::ResponseDataAccounter& data_accounter,
utils::impl::InternalTag);
49 HttpRequest(HttpRequest&&) =
delete;
50 HttpRequest(
const HttpRequest&) =
delete;
78 std::chrono::duration<
double> GetResponseTime()
const;
95 const std::string&
GetArg(std::string_view arg_name)
const;
105 const std::vector<std::string>&
GetArgVector(std::string_view arg_name)
const;
114 bool HasArg(std::string_view arg_name)
const;
132 template <
typename Predicate>
133 requires std::is_invocable_r_v<
bool, Predicate, std::string_view>
136 std::vector<std::pair<std::string_view, std::string_view>> args;
139 args.reserve(names.size());
141 for (
const auto& name : names) {
143 args.emplace_back(name, is_masked_arg_name(name) ?
"***" : std::string_view{value});
169 const std::string&
GetPathArg(std::string_view arg_name)
const;
188 const std::string&
GetHeader(std::string_view header_name)
const;
191 const std::string&
GetHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
198 bool HasHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
217 const std::string&
GetCookie(
const std::string& cookie_name)
const;
239 void SetRequestBody(std::string body);
240 void ParseArgsFromBody();
241 bool IsFinal()
const noexcept;
254 HttpResponse& GetHttpResponse()
const noexcept;
260 void MarkAsInternalServerError()
const;
262 void WriteAccessLogs(
263 const logging::TextLoggerPtr& logger_access,
264 const logging::TextLoggerPtr& logger_access_tskv,
265 const std::string& remote_address
269 const logging::TextLoggerPtr& logger_access,
271 const std::string& remote_address
274 void WriteAccessTskvLog(
275 const logging::TextLoggerPtr& logger_access_tskv,
277 const std::string& remote_address
280 using UpgradeCallback = std::function<
void(std::unique_ptr<engine::
io::
RwBase>&&, engine::
io::Sockaddr&&)>;
282 bool IsUpgradeWebsocket()
const;
283 void SetUpgradeWebsocket(UpgradeCallback cb)
const;
284 void DoUpgrade(std::unique_ptr<engine::
io::
RwBase>&& socket, engine::
io::Sockaddr&& peer_name)
const;
288 void SetPathArgs(std::vector<std::pair<std::string, std::string>> args);
293 void SetTaskProcessor(engine::TaskProcessor& task_processor);
294 engine::TaskProcessor* GetTaskProcessor()
const;
297 void SetResponseStreamId(std::int32_t);
298 void SetStreamProducer(impl::Http2StreamEventProducer&& producer);
300 friend class HttpRequestBuilder;
301 friend class HttpRequestHandler;
304 utils::FastPimpl<Impl, 1936, 16> pimpl_;