userver: userver/server/http/http_response_body_stream.hpp Source File
Loading...
Searching...
No Matches
http_response_body_stream.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/server/http/http_response_body_stream.hpp
4/// @brief @copybrief server::http::ResponseBodyStream
5
6#include <string>
7
8#include <userver/server/http/http_response.hpp>
9#include <userver/server/request/response_base.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace server::http {
14
15/// @brief Streaming HTTP response body writer that is passed to
16/// @ref server::handlers::HttpHandlerBase::HandleStreamRequest() overloads.
17///
18/// @see @ref scripts/docs/en/userver/http_server.md
19class ResponseBodyStream final {
20public:
21 /// Constructor that can be used in @ref server::handlers::HttpHandlerBase::HandleHttpRequest
22 explicit ResponseBodyStream(HttpResponse& http_response);
23
24 ResponseBodyStream(ResponseBodyStream&&) = default;
25 ~ResponseBodyStream();
26
27 /// Send a chunk of response data; should not be called after SetBody().
28 /// It may NOT generate exactly one HTTP chunk per call to @ref PushBodyChunk().
29 void PushBodyChunk(std::string&& chunk, engine::Deadline deadline);
30
31 /// Set full response body instead of sending chunks; should not be called after @ref PushBodyChunk()
32 void SetBody(std::string&& body);
33
34 void SetHeader(const std::string&, const std::string&);
35
36 void SetHeader(std::string_view, const std::string&);
37
38 void SetEndOfHeaders();
39
40 /// Set the HTTP status code; should not be called after @ref PushBodyChunk() as the result will be ignored.
41 void SetStatusCode(int status_code);
42
43 /// @overload
45
46private:
47 bool headers_ended_{false};
48 bool headers_end_sent_{false};
49 HttpResponse::Producer queue_producer_;
50 HttpResponse& http_response_;
51};
52
53} // namespace server::http
54
55USERVER_NAMESPACE_END