34class HttpRequest
final {
36 using HeadersMap = USERVER_NAMESPACE::
http::
headers::HeaderMap;
38 using HeadersMapKeys =
decltype(
utils::impl::MakeKeysView(HeadersMap
()));
40 using CookiesMap = std::unordered_map<std::string, std::string,
utils::
StrCaseHash>;
42 using CookiesMapKeys =
decltype(
utils::impl::MakeKeysView(CookiesMap()));
45 explicit HttpRequest(
request::ResponseDataAccounter& data_accounter,
utils::impl::InternalTag);
48 HttpRequest(HttpRequest&&) =
delete;
49 HttpRequest(
const HttpRequest&) =
delete;
77 std::chrono::duration<
double> GetRequestTime()
const;
79 std::chrono::duration<
double> GetResponseTime()
const;
96 const std::string&
GetArg(std::string_view arg_name)
const;
106 const std::vector<std::string>&
GetArgVector(std::string_view arg_name)
const;
115 bool HasArg(std::string_view arg_name)
const;
149 const std::string&
GetPathArg(std::string_view arg_name)
const;
168 const std::string&
GetHeader(std::string_view header_name)
const;
197 const std::string&
GetCookie(
const std::string& cookie_name)
const;
219 void SetRequestBody(std::string body);
220 void ParseArgsFromBody();
221 bool IsFinal()
const;
234 HttpResponse& GetHttpResponse()
const;
240 void MarkAsInternalServerError()
const;
242 void SetStartSendResponseTime();
243 void SetFinishSendResponseTime();
245 void WriteAccessLogs(
246 const logging::TextLoggerPtr& logger_access,
247 const logging::TextLoggerPtr& logger_access_tskv,
248 const std::string& remote_address
252 const logging::TextLoggerPtr& logger_access,
254 const std::string& remote_address
257 void WriteAccessTskvLog(
258 const logging::TextLoggerPtr& logger_access_tskv,
260 const std::string& remote_address
263 using UpgradeCallback = std::function<
void(std::unique_ptr<engine::
io::
RwBase>&&, engine::
io::Sockaddr&&)>;
265 bool IsUpgradeWebsocket()
const;
266 void SetUpgradeWebsocket(UpgradeCallback cb)
const;
267 void DoUpgrade(std::unique_ptr<engine::
io::
RwBase>&& socket, engine::
io::Sockaddr&& peer_name)
const;
271 void AccountResponseTime();
273 void SetPathArgs(std::vector<std::pair<std::string, std::string>> args);
278 void SetTaskProcessor(engine::TaskProcessor& task_processor);
279 engine::TaskProcessor* GetTaskProcessor()
const;
281 void SetHttpHandlerStatistics(handlers::HttpRequestStatistics&);
284 void SetResponseStreamId(std::int32_t);
285 void SetStreamProducer(impl::Http2StreamEventProducer&& producer);
287 void SetTaskCreateTime();
288 void SetTaskStartTime();
289 void SetResponseNotifyTime();
290 void SetResponseNotifyTime(std::chrono::steady_clock::time_point now);
292 friend class HttpRequestBuilder;
293 friend class HttpRequestHandler;
296 utils::FastPimpl<Impl, 1648, 16> pimpl_;