38void OutputHeader(USERVER_NAMESPACE::http::
headers::HeadersString& header, std::string_view key, std::string_view val);
69 using HeadersMap = USERVER_NAMESPACE::http::
headers::HeaderMap;
71 using HeadersMapKeys =
decltype(
utils::impl::MakeKeysView(HeadersMap
()));
73 using CookiesMap = Cookie::CookiesMap;
75 using CookiesMapKeys =
decltype(
utils::impl::MakeKeysView(CookiesMap()));
78 HttpResponse(
const HttpRequest& request,
request::ResponseDataAccounter& data_accounter);
80 const HttpRequest& request,
81 request::ResponseDataAccounter& data_accounter,
82 std::chrono::steady_clock::time_point now,
85 ~HttpResponse()
override;
87 void SetSendFailed(std::chrono::steady_clock::time_point failure_time)
override;
94 bool SetHeader(std::string name, std::string value);
100 bool SetHeader(std::string_view name, std::string value);
103 bool SetHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header, std::string value);
143 const std::string&
GetHeader(std::string_view header_name)
const;
145 const std::string&
GetHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
151 bool HasHeader(
const USERVER_NAMESPACE::http::
headers::PredefinedHeader& header_name)
const;
158 const Cookie&
GetCookie(std::string_view cookie_name)
const;
163 [[nodiscard]] impl::HeadersEndEvent FinishedSendingHeadersEvent()
noexcept USERVER_IMPL_LIFETIME_BOUND {
164 return impl::HeadersEndEvent{headers_end_};
167 void SendResponse(engine::
io::
RwBase& socket)
override;
174 bool WaitForHeadersEnd()
override;
175 void SetHeadersEnd()
override;
181 using Producer = std::variant<std::monostate, Queue::Producer, impl::Http2StreamEventProducer>;
183 void SetStreamBody();
184 bool IsBodyStreamed()
const override;
186 Producer GetBodyProducer();
189 friend class Http2ResponseWriter;
192 std::size_t SetBodyStreamed(engine::
io::
RwBase& socket, USERVER_NAMESPACE::http::
headers::HeadersString& header);
195 std::size_t SetBodyNotStreamed(engine::
io::
RwBase& socket, USERVER_NAMESPACE::http::
headers::HeadersString& header);
197 const HttpRequest& request_;
199 HeadersMap system_headers_;
200 HeadersMap user_headers_;
203 bool system_headers_ended_ =
false;
204 engine::SingleConsumerEvent headers_end_
{engine::SingleConsumerEvent::NoAutoReset()
};
205 std::optional<Queue::Consumer> body_stream_;
206 Producer body_stream_producer_;
207 bool is_stream_body_{
false};