xref: /aosp_15_r20/external/cronet/net/http/http_basic_stream.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker //
5*6777b538SAndroid Build Coastguard Worker // HttpBasicStream is a simple implementation of HttpStream.  It assumes it is
6*6777b538SAndroid Build Coastguard Worker // not sharing a sharing with any other HttpStreams, therefore it just reads and
7*6777b538SAndroid Build Coastguard Worker // writes directly to the Http Stream.
8*6777b538SAndroid Build Coastguard Worker 
9*6777b538SAndroid Build Coastguard Worker #ifndef NET_HTTP_HTTP_BASIC_STREAM_H_
10*6777b538SAndroid Build Coastguard Worker #define NET_HTTP_HTTP_BASIC_STREAM_H_
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker #include <memory>
15*6777b538SAndroid Build Coastguard Worker #include <set>
16*6777b538SAndroid Build Coastguard Worker #include <string>
17*6777b538SAndroid Build Coastguard Worker #include <string_view>
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
20*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h"
21*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
22*6777b538SAndroid Build Coastguard Worker #include "net/http/http_basic_state.h"
23*6777b538SAndroid Build Coastguard Worker #include "net/http/http_stream.h"
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker namespace net {
26*6777b538SAndroid Build Coastguard Worker 
27*6777b538SAndroid Build Coastguard Worker class ClientSocketHandle;
28*6777b538SAndroid Build Coastguard Worker class HttpResponseInfo;
29*6777b538SAndroid Build Coastguard Worker struct HttpRequestInfo;
30*6777b538SAndroid Build Coastguard Worker class HttpRequestHeaders;
31*6777b538SAndroid Build Coastguard Worker class HttpStreamParser;
32*6777b538SAndroid Build Coastguard Worker class IOBuffer;
33*6777b538SAndroid Build Coastguard Worker class NetLogWithSource;
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE HttpBasicStream : public HttpStream {
36*6777b538SAndroid Build Coastguard Worker  public:
37*6777b538SAndroid Build Coastguard Worker   // Constructs a new HttpBasicStream. InitializeStream must be called to
38*6777b538SAndroid Build Coastguard Worker   // initialize it correctly.
39*6777b538SAndroid Build Coastguard Worker   HttpBasicStream(std::unique_ptr<ClientSocketHandle> connection,
40*6777b538SAndroid Build Coastguard Worker                   bool is_for_get_to_http_proxy);
41*6777b538SAndroid Build Coastguard Worker 
42*6777b538SAndroid Build Coastguard Worker   HttpBasicStream(const HttpBasicStream&) = delete;
43*6777b538SAndroid Build Coastguard Worker   HttpBasicStream& operator=(const HttpBasicStream&) = delete;
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker   ~HttpBasicStream() override;
46*6777b538SAndroid Build Coastguard Worker 
47*6777b538SAndroid Build Coastguard Worker   // HttpStream methods:
48*6777b538SAndroid Build Coastguard Worker   void RegisterRequest(const HttpRequestInfo* request_info) override;
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker   int InitializeStream(bool can_send_early,
51*6777b538SAndroid Build Coastguard Worker                        RequestPriority priority,
52*6777b538SAndroid Build Coastguard Worker                        const NetLogWithSource& net_log,
53*6777b538SAndroid Build Coastguard Worker                        CompletionOnceCallback callback) override;
54*6777b538SAndroid Build Coastguard Worker 
55*6777b538SAndroid Build Coastguard Worker   int SendRequest(const HttpRequestHeaders& headers,
56*6777b538SAndroid Build Coastguard Worker                   HttpResponseInfo* response,
57*6777b538SAndroid Build Coastguard Worker                   CompletionOnceCallback callback) override;
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker   int ReadResponseHeaders(CompletionOnceCallback callback) override;
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker   int ReadResponseBody(IOBuffer* buf,
62*6777b538SAndroid Build Coastguard Worker                        int buf_len,
63*6777b538SAndroid Build Coastguard Worker                        CompletionOnceCallback callback) override;
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker   void Close(bool not_reusable) override;
66*6777b538SAndroid Build Coastguard Worker 
67*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<HttpStream> RenewStreamForAuth() override;
68*6777b538SAndroid Build Coastguard Worker 
69*6777b538SAndroid Build Coastguard Worker   bool IsResponseBodyComplete() const override;
70*6777b538SAndroid Build Coastguard Worker 
71*6777b538SAndroid Build Coastguard Worker   bool IsConnectionReused() const override;
72*6777b538SAndroid Build Coastguard Worker 
73*6777b538SAndroid Build Coastguard Worker   void SetConnectionReused() override;
74*6777b538SAndroid Build Coastguard Worker 
75*6777b538SAndroid Build Coastguard Worker   bool CanReuseConnection() const override;
76*6777b538SAndroid Build Coastguard Worker 
77*6777b538SAndroid Build Coastguard Worker   int64_t GetTotalReceivedBytes() const override;
78*6777b538SAndroid Build Coastguard Worker 
79*6777b538SAndroid Build Coastguard Worker   int64_t GetTotalSentBytes() const override;
80*6777b538SAndroid Build Coastguard Worker 
81*6777b538SAndroid Build Coastguard Worker   bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override;
82*6777b538SAndroid Build Coastguard Worker 
83*6777b538SAndroid Build Coastguard Worker   bool GetAlternativeService(
84*6777b538SAndroid Build Coastguard Worker       AlternativeService* alternative_service) const override;
85*6777b538SAndroid Build Coastguard Worker 
86*6777b538SAndroid Build Coastguard Worker   void GetSSLInfo(SSLInfo* ssl_info) override;
87*6777b538SAndroid Build Coastguard Worker 
88*6777b538SAndroid Build Coastguard Worker   int GetRemoteEndpoint(IPEndPoint* endpoint) override;
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker   void Drain(HttpNetworkSession* session) override;
91*6777b538SAndroid Build Coastguard Worker 
92*6777b538SAndroid Build Coastguard Worker   void PopulateNetErrorDetails(NetErrorDetails* details) override;
93*6777b538SAndroid Build Coastguard Worker 
94*6777b538SAndroid Build Coastguard Worker   void SetPriority(RequestPriority priority) override;
95*6777b538SAndroid Build Coastguard Worker 
96*6777b538SAndroid Build Coastguard Worker   void SetRequestHeadersCallback(RequestHeadersCallback callback) override;
97*6777b538SAndroid Build Coastguard Worker 
98*6777b538SAndroid Build Coastguard Worker   const std::set<std::string>& GetDnsAliases() const override;
99*6777b538SAndroid Build Coastguard Worker 
100*6777b538SAndroid Build Coastguard Worker   std::string_view GetAcceptChViaAlps() const override;
101*6777b538SAndroid Build Coastguard Worker 
102*6777b538SAndroid Build Coastguard Worker  private:
parser()103*6777b538SAndroid Build Coastguard Worker   HttpStreamParser* parser() const { return state_.parser(); }
104*6777b538SAndroid Build Coastguard Worker 
105*6777b538SAndroid Build Coastguard Worker   void OnHandshakeConfirmed(CompletionOnceCallback callback, int rv);
106*6777b538SAndroid Build Coastguard Worker 
107*6777b538SAndroid Build Coastguard Worker   HttpBasicState state_;
108*6777b538SAndroid Build Coastguard Worker   base::TimeTicks confirm_handshake_end_;
109*6777b538SAndroid Build Coastguard Worker   RequestHeadersCallback request_headers_callback_;
110*6777b538SAndroid Build Coastguard Worker   // The request to send.
111*6777b538SAndroid Build Coastguard Worker   // Set to null before the response body is read. This is to allow |this| to
112*6777b538SAndroid Build Coastguard Worker   // be shared for reading and to possibly outlive request_info_'s owner.
113*6777b538SAndroid Build Coastguard Worker   // Setting to null happens after headers are completely read or upload data
114*6777b538SAndroid Build Coastguard Worker   // stream is uploaded, whichever is later.
115*6777b538SAndroid Build Coastguard Worker   raw_ptr<const HttpRequestInfo> request_info_;
116*6777b538SAndroid Build Coastguard Worker };
117*6777b538SAndroid Build Coastguard Worker 
118*6777b538SAndroid Build Coastguard Worker }  // namespace net
119*6777b538SAndroid Build Coastguard Worker 
120*6777b538SAndroid Build Coastguard Worker #endif  // NET_HTTP_HTTP_BASIC_STREAM_H_
121