xref: /aosp_15_r20/external/cronet/net/http/http_basic_state.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 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 // A class that stores the common state between HttpBasicStream and
6*6777b538SAndroid Build Coastguard Worker // WebSocketBasicHandshakeStream.
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #ifndef NET_HTTP_HTTP_BASIC_STATE_H_
9*6777b538SAndroid Build Coastguard Worker #define NET_HTTP_HTTP_BASIC_STATE_H_
10*6777b538SAndroid Build Coastguard Worker 
11*6777b538SAndroid Build Coastguard Worker #include <memory>
12*6777b538SAndroid Build Coastguard Worker #include <set>
13*6777b538SAndroid Build Coastguard Worker #include <string>
14*6777b538SAndroid Build Coastguard Worker 
15*6777b538SAndroid Build Coastguard Worker #include "base/memory/scoped_refptr.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/base/request_priority.h"
18*6777b538SAndroid Build Coastguard Worker #include "net/traffic_annotation/network_traffic_annotation.h"
19*6777b538SAndroid Build Coastguard Worker #include "url/gurl.h"
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker namespace net {
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker class ClientSocketHandle;
24*6777b538SAndroid Build Coastguard Worker class GrowableIOBuffer;
25*6777b538SAndroid Build Coastguard Worker class HttpStreamParser;
26*6777b538SAndroid Build Coastguard Worker struct HttpRequestInfo;
27*6777b538SAndroid Build Coastguard Worker class NetLogWithSource;
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker class NET_EXPORT_PRIVATE HttpBasicState {
30*6777b538SAndroid Build Coastguard Worker  public:
31*6777b538SAndroid Build Coastguard Worker   HttpBasicState(std::unique_ptr<ClientSocketHandle> connection,
32*6777b538SAndroid Build Coastguard Worker                  bool is_for_get_to_http_proxy);
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   HttpBasicState(const HttpBasicState&) = delete;
35*6777b538SAndroid Build Coastguard Worker   HttpBasicState& operator=(const HttpBasicState&) = delete;
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker   ~HttpBasicState();
38*6777b538SAndroid Build Coastguard Worker 
39*6777b538SAndroid Build Coastguard Worker   // Initialize() must be called before using any of the other methods.
40*6777b538SAndroid Build Coastguard Worker   void Initialize(const HttpRequestInfo* request_info,
41*6777b538SAndroid Build Coastguard Worker                   RequestPriority priority,
42*6777b538SAndroid Build Coastguard Worker                   const NetLogWithSource& net_log);
43*6777b538SAndroid Build Coastguard Worker 
parser()44*6777b538SAndroid Build Coastguard Worker   HttpStreamParser* parser() const { return parser_.get(); }
45*6777b538SAndroid Build Coastguard Worker 
46*6777b538SAndroid Build Coastguard Worker   // Returns true if this request is a non-tunneled HTTP request via a proxy.
is_for_get_to_http_proxy()47*6777b538SAndroid Build Coastguard Worker   bool is_for_get_to_http_proxy() const { return is_for_get_to_http_proxy_; }
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   // Deletes |parser_| and sets it to NULL.
50*6777b538SAndroid Build Coastguard Worker   void DeleteParser();
51*6777b538SAndroid Build Coastguard Worker 
connection()52*6777b538SAndroid Build Coastguard Worker   ClientSocketHandle* connection() const { return connection_.get(); }
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<ClientSocketHandle> ReleaseConnection();
55*6777b538SAndroid Build Coastguard Worker 
56*6777b538SAndroid Build Coastguard Worker   scoped_refptr<GrowableIOBuffer> read_buf() const;
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // Generates a string of the form "METHOD PATH HTTP/1.1\r\n", based on the
59*6777b538SAndroid Build Coastguard Worker   // values of request_info_ and is_for_get_to_http_proxy_.
60*6777b538SAndroid Build Coastguard Worker   std::string GenerateRequestLine() const;
61*6777b538SAndroid Build Coastguard Worker 
traffic_annotation()62*6777b538SAndroid Build Coastguard Worker   MutableNetworkTrafficAnnotationTag traffic_annotation() {
63*6777b538SAndroid Build Coastguard Worker     return traffic_annotation_;
64*6777b538SAndroid Build Coastguard Worker   }
65*6777b538SAndroid Build Coastguard Worker 
66*6777b538SAndroid Build Coastguard Worker   // Returns true if the connection has been "reused" as defined by HttpStream -
67*6777b538SAndroid Build Coastguard Worker   // either actually reused, or has not been used yet, but has been idle for
68*6777b538SAndroid Build Coastguard Worker   // some time.
69*6777b538SAndroid Build Coastguard Worker   //
70*6777b538SAndroid Build Coastguard Worker   // TODO(mmenke): Consider renaming this concept, to avoid confusion with
71*6777b538SAndroid Build Coastguard Worker   // ClientSocketHandle::is_reused().
72*6777b538SAndroid Build Coastguard Worker   bool IsConnectionReused() const;
73*6777b538SAndroid Build Coastguard Worker 
74*6777b538SAndroid Build Coastguard Worker   // Retrieves any DNS aliases for the remote endpoint. Includes all known
75*6777b538SAndroid Build Coastguard Worker   // aliases, e.g. from A, AAAA, or HTTPS, not just from the address used for
76*6777b538SAndroid Build Coastguard Worker   // the connection, in no particular order.
77*6777b538SAndroid Build Coastguard Worker   const std::set<std::string>& GetDnsAliases() const;
78*6777b538SAndroid Build Coastguard Worker 
79*6777b538SAndroid Build Coastguard Worker  private:
80*6777b538SAndroid Build Coastguard Worker   scoped_refptr<GrowableIOBuffer> read_buf_;
81*6777b538SAndroid Build Coastguard Worker 
82*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<ClientSocketHandle> connection_;
83*6777b538SAndroid Build Coastguard Worker 
84*6777b538SAndroid Build Coastguard Worker   std::unique_ptr<HttpStreamParser> parser_;
85*6777b538SAndroid Build Coastguard Worker 
86*6777b538SAndroid Build Coastguard Worker   const bool is_for_get_to_http_proxy_;
87*6777b538SAndroid Build Coastguard Worker 
88*6777b538SAndroid Build Coastguard Worker   GURL url_;
89*6777b538SAndroid Build Coastguard Worker   std::string request_method_;
90*6777b538SAndroid Build Coastguard Worker 
91*6777b538SAndroid Build Coastguard Worker   MutableNetworkTrafficAnnotationTag traffic_annotation_;
92*6777b538SAndroid Build Coastguard Worker };
93*6777b538SAndroid Build Coastguard Worker 
94*6777b538SAndroid Build Coastguard Worker }  // namespace net
95*6777b538SAndroid Build Coastguard Worker 
96*6777b538SAndroid Build Coastguard Worker #endif  // NET_HTTP_HTTP_BASIC_STATE_H_
97