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> GetRequestTime()
const;
80 std::chrono::duration<
double> GetResponseTime()
const;
97 const std::string&
GetArg(std::string_view arg_name)
const;
107 const std::vector<std::string>&
GetArgVector(std::string_view arg_name)
const;
116 bool HasArg(std::string_view arg_name)
const;
134 template <
typename Predicate>
135 requires std::is_invocable_r_v<
bool, Predicate, std::string_view>
138 std::vector<std::pair<std::string_view, std::string_view>> args;
141 args.reserve(names.size());
143 for (
const auto& name : names) {
145 args.emplace_back(name, is_masked_arg_name(name) ?
"***" : std::string_view{value});
171 const std::string&
GetPathArg(std::string_view arg_name)
const;
190 const std::string&
GetHeader(std::string_view header_name)
const;
193 const std::string&
GetHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
200 bool HasHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
219 const std::string&
GetCookie(
const std::string& cookie_name)
const;
241 void SetRequestBody(std::string body);
242 void ParseArgsFromBody();
243 bool IsFinal()
const noexcept;
256 HttpResponse& GetHttpResponse()
const noexcept;
262 void MarkAsInternalServerError()
const;
264 void SetStartSendResponseTime()
noexcept;
265 void SetFinishSendResponseTime();
267 void WriteAccessLogs(
268 const logging::TextLoggerPtr& logger_access,
269 const logging::TextLoggerPtr& logger_access_tskv,
270 const std::string& remote_address
274 const logging::TextLoggerPtr& logger_access,
276 const std::string& remote_address
279 void WriteAccessTskvLog(
280 const logging::TextLoggerPtr& logger_access_tskv,
282 const std::string& remote_address
285 using UpgradeCallback = std::function<
void(std::unique_ptr<engine::
io::
RwBase>&&, engine::
io::Sockaddr&&)>;
287 bool IsUpgradeWebsocket()
const;
288 void SetUpgradeWebsocket(UpgradeCallback cb)
const;
289 void DoUpgrade(std::unique_ptr<engine::
io::
RwBase>&& socket, engine::
io::Sockaddr&& peer_name)
const;
293 void SetPathArgs(std::vector<std::pair<std::string, std::string>> args);
298 void SetTaskProcessor(engine::TaskProcessor& task_processor);
299 engine::TaskProcessor* GetTaskProcessor()
const;
302 void SetResponseStreamId(std::int32_t);
303 void SetStreamProducer(impl::Http2StreamEventProducer&& producer);
305 void SetTaskCreateTime();
306 void SetTaskStartTime();
307 void SetResponseNotifyTime();
308 void SetResponseNotifyTime(std::chrono::steady_clock::time_point now);
310 friend class HttpRequestBuilder;
311 friend class HttpRequestHandler;
314 utils::FastPimpl<Impl, 1936, 16> pimpl_;