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::handlers {
14class HttpHandlerBase;
15}
16
17namespace server::http {
18
19/// @brief Streaming HTTP response body writer
20class ResponseBodyStream final {
21public:
22 ResponseBodyStream(ResponseBodyStream&&) = default;
23 ~ResponseBodyStream();
24
25 // Send a chunk of response data. It may NOT generate
26 // exactly one HTTP chunk per call to PushBodyChunk().
27 // May not be called after SetBody().
28 void PushBodyChunk(std::string&& chunk, engine::Deadline deadline);
29
30 // Set full response body instead of sending chunks.
31 // May not be called after 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 void SetStatusCode(int status_code);
41
42 void SetStatusCode(HttpStatus status);
43
44private:
45 friend class server::handlers::HttpHandlerBase;
46
47 ResponseBodyStream(HttpResponse::Producer&& queue_producer, HttpResponse& http_response);
48
49 bool headers_ended_{false};
50 bool headers_end_sent_{false};
51 HttpResponse::Producer queue_producer_;
52 HttpResponse& http_response_;
53};
54
55} // namespace server::http
56
57USERVER_NAMESPACE_END