33class HttpRequest
final {
35 using HeadersMap = USERVER_NAMESPACE::
http::
headers::HeaderMap;
37 using HeadersMapKeys =
decltype(
utils::impl::MakeKeysView(HeadersMap
()));
39 using CookiesMap = std::unordered_map<std::string, std::string,
utils::
StrCaseHash>;
41 using CookiesMapKeys =
decltype(
utils::impl::MakeKeysView(CookiesMap()));
44 explicit HttpRequest(
request::ResponseDataAccounter& data_accounter,
utils::impl::InternalTag);
47 HttpRequest(HttpRequest&&) =
delete;
48 HttpRequest(
const HttpRequest&) =
delete;
76 std::chrono::duration<
double> GetRequestTime()
const;
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;
148 const std::string&
GetPathArg(std::string_view arg_name)
const;
167 const std::string&
GetHeader(std::string_view header_name)
const;
196 const std::string&
GetCookie(
const std::string& cookie_name)
const;
218 void SetRequestBody(std::string body);
219 void ParseArgsFromBody();
220 bool IsFinal()
const noexcept;
233 HttpResponse& GetHttpResponse()
const noexcept;
239 void MarkAsInternalServerError()
const;
241 void SetStartSendResponseTime()
noexcept;
242 void SetFinishSendResponseTime();
244 void WriteAccessLogs(
245 const logging::TextLoggerPtr& logger_access,
246 const logging::TextLoggerPtr& logger_access_tskv,
247 const std::string& remote_address
251 const logging::TextLoggerPtr& logger_access,
252 utils::datetime::WallCoarseClock::time_point tp,
253 const std::string& remote_address
256 void WriteAccessTskvLog(
257 const logging::TextLoggerPtr& logger_access_tskv,
258 utils::datetime::WallCoarseClock::time_point tp,
259 const std::string& remote_address
262 using UpgradeCallback = std::function<
void(std::unique_ptr<engine::
io::
RwBase>&&, engine::
io::Sockaddr&&)>;
264 bool IsUpgradeWebsocket()
const;
265 void SetUpgradeWebsocket(UpgradeCallback cb)
const;
266 void DoUpgrade(std::unique_ptr<engine::
io::
RwBase>&& socket, engine::
io::Sockaddr&& peer_name)
const;
270 void SetPathArgs(std::vector<std::pair<std::string, std::string>> args);
275 void SetTaskProcessor(engine::TaskProcessor& task_processor);
276 engine::TaskProcessor* GetTaskProcessor()
const;
279 void SetResponseStreamId(std::int32_t);
280 void SetStreamProducer(impl::Http2StreamEventProducer&& producer);
282 void SetTaskCreateTime();
283 void SetTaskStartTime();
284 void SetResponseNotifyTime();
285 void SetResponseNotifyTime(std::chrono::steady_clock::time_point now);
287 friend class HttpRequestBuilder;
288 friend class HttpRequestHandler;
291 utils::FastPimpl<Impl, 1936, 16> pimpl_;