66 std::variant<std::string, std::shared_ptr<
const std::string>> storage_{};
79 using HeadersMap = USERVER_NAMESPACE::http::
headers::HeaderMap;
81 using HeadersMapKeys =
decltype(
utils::impl::MakeKeysView(HeadersMap
()));
83 using CookiesMap = Cookie::CookiesMap;
85 using CookiesMapKeys =
decltype(
utils::impl::MakeKeysView(CookiesMap()));
87 void SetData(std::string data);
91 const std::string& GetData()
const;
97 bool SetHeader(std::string name, std::string value);
103 bool SetHeader(std::string_view name, std::string value);
106 bool SetHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header, std::string value);
141 const std::string&
GetHeader(std::string_view header_name)
const;
143 const std::string&
GetHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
149 bool HasHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
156 const Cookie&
GetCookie(std::string_view cookie_name)
const;
162 bool WaitForHeadersEnd();
163 void SetHeadersEnd();
168 [[
nodiscard]]
bool IsBodyStreamed()
const noexcept {
return is_stream_body_; }
170 [[
nodiscard]]
bool IsSent()
const noexcept {
return is_sent_; }
173 HttpResponse(
const HttpRequest& request,
request::ResponseDataAccounter& data_accounter);
175 const HttpRequest& request,
176 request::ResponseDataAccounter& data_accounter,
177 std::chrono::steady_clock::time_point now,
180 ~HttpResponse()
noexcept;
183 friend class HttpResponseImpl;
184 friend class Http2ResponseWriter;
186 void StoreData(impl::ChunkStorage data);
190 static constexpr auto kUnset = std::chrono::steady_clock::time_point::min();
192 request::ResponseDataAccounter& accounter_;
193 impl::ChunkStorage data_;
194 std::chrono::steady_clock::time_point create_time_;
195 std::chrono::steady_clock::time_point ready_time_{kUnset};
196 std::size_t accounted_size_ = 0;
197 std::size_t bytes_sent_ = 0;
198 bool is_sent_ =
false;
200 const bool is_final_;
201 bool is_head_request_;
202 const std::uint8_t http_major_;
203 const std::uint8_t http_minor_;
205 HeadersMap system_headers_;
206 HeadersMap user_headers_;
209 bool is_stream_body_{
false};
210 bool system_headers_ended_ =
false;
211 engine::SingleConsumerEvent headers_end_
{engine::SingleConsumerEvent::NoAutoReset()
};