userver: userver/server/http/http_response_body_stream.hpp Source File
Loading...
Searching...
No Matches
http_response_body_stream.hpp
1#pragma once
2
3#include <string>
4
5#include <userver/server/http/http_response.hpp>
6#include <userver/server/request/response_base.hpp>
7
8USERVER_NAMESPACE_BEGIN
9
10namespace server::handlers {
11class HttpHandlerBase;
12}
13
14namespace server::http {
15
16class ResponseBodyStream final {
17public:
18 ResponseBodyStream(ResponseBodyStream&&) = default;
19 ~ResponseBodyStream();
20
21 // Send a chunk of response data. It may NOT generate
22 // exactly one HTTP chunk per call to PushBodyChunk().
23 // May not be called after SetBody().
24 void PushBodyChunk(std::string&& chunk, engine::Deadline deadline);
25
26 // Set full response body instead of sending chunks.
27 // May not be called after PushBodyChunk().
28 void SetBody(std::string&& body);
29
30 void SetHeader(const std::string&, const std::string&);
31
32 void SetHeader(std::string_view, const std::string&);
33
34 void SetEndOfHeaders();
35
36 void SetStatusCode(int status_code);
37
38 void SetStatusCode(HttpStatus status);
39
40private:
41 friend class server::handlers::HttpHandlerBase;
42
43 ResponseBodyStream(HttpResponse::Producer&& queue_producer, HttpResponse& http_response);
44
45 bool headers_ended_{false};
46 bool headers_end_sent_{false};
47 HttpResponse::Producer queue_producer_;
48 HttpResponse& http_response_;
49};
50
51} // namespace server::http
52
53USERVER_NAMESPACE_END