xref: /aosp_15_r20/external/cronet/net/base/transport_info.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2020 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 #ifndef NET_BASE_TRANSPORT_INFO_H_
6*6777b538SAndroid Build Coastguard Worker #define NET_BASE_TRANSPORT_INFO_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include <iosfwd>
9*6777b538SAndroid Build Coastguard Worker #include <string>
10*6777b538SAndroid Build Coastguard Worker #include <string_view>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "net/base/ip_endpoint.h"
13*6777b538SAndroid Build Coastguard Worker #include "net/base/net_export.h"
14*6777b538SAndroid Build Coastguard Worker #include "net/socket/next_proto.h"
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace net {
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // Specifies the type of a network transport over which a resource is loaded.
19*6777b538SAndroid Build Coastguard Worker enum class TransportType {
20*6777b538SAndroid Build Coastguard Worker   // The transport was established directly to a peer.
21*6777b538SAndroid Build Coastguard Worker   kDirect,
22*6777b538SAndroid Build Coastguard Worker   // The transport was established to a proxy of some kind.
23*6777b538SAndroid Build Coastguard Worker   kProxied,
24*6777b538SAndroid Build Coastguard Worker   // The transport was "established" to a cache entry.
25*6777b538SAndroid Build Coastguard Worker   kCached,
26*6777b538SAndroid Build Coastguard Worker   // Same as `kCached`, but the resource was initially loaded through a proxy.
27*6777b538SAndroid Build Coastguard Worker   kCachedFromProxy,
28*6777b538SAndroid Build Coastguard Worker };
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker // Returns a string representation of the given transport type.
31*6777b538SAndroid Build Coastguard Worker // The returned StringPiece is static, has no lifetime restrictions.
32*6777b538SAndroid Build Coastguard Worker NET_EXPORT std::string_view TransportTypeToString(TransportType type);
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker // Describes a network transport.
35*6777b538SAndroid Build Coastguard Worker struct NET_EXPORT TransportInfo {
36*6777b538SAndroid Build Coastguard Worker   TransportInfo();
37*6777b538SAndroid Build Coastguard Worker   TransportInfo(TransportType type_arg,
38*6777b538SAndroid Build Coastguard Worker                 IPEndPoint endpoint_arg,
39*6777b538SAndroid Build Coastguard Worker                 std::string accept_ch_frame_arg,
40*6777b538SAndroid Build Coastguard Worker                 bool cert_is_issued_by_known_root,
41*6777b538SAndroid Build Coastguard Worker                 NextProto negotiated_protocol);
42*6777b538SAndroid Build Coastguard Worker   TransportInfo(const TransportInfo&);
43*6777b538SAndroid Build Coastguard Worker   ~TransportInfo();
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker   // Instances of this type are comparable for equality.
46*6777b538SAndroid Build Coastguard Worker   bool operator==(const TransportInfo& other) const;
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker   // Returns a string representation of this struct, suitable for debugging.
49*6777b538SAndroid Build Coastguard Worker   std::string ToString() const;
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker   // The type of the transport.
52*6777b538SAndroid Build Coastguard Worker   TransportType type = TransportType::kDirect;
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker   // If `type` is `kDirect`, then this identifies the peer endpoint.
55*6777b538SAndroid Build Coastguard Worker   // If `type` is `kProxied`, then this identifies the proxy endpoint.
56*6777b538SAndroid Build Coastguard Worker   // If `type` is `kCached`, then this identifies the peer endpoint from which
57*6777b538SAndroid Build Coastguard Worker   // the resource was originally loaded.
58*6777b538SAndroid Build Coastguard Worker   // If `type` is `kCachedFromProxy`, then this identifies the proxy endpoint
59*6777b538SAndroid Build Coastguard Worker   // from which the resource was originally loaded.
60*6777b538SAndroid Build Coastguard Worker   IPEndPoint endpoint;
61*6777b538SAndroid Build Coastguard Worker 
62*6777b538SAndroid Build Coastguard Worker   // The value of the ACCEPT_CH HTTP2/3 frame, as pulled in through ALPS.
63*6777b538SAndroid Build Coastguard Worker   //
64*6777b538SAndroid Build Coastguard Worker   // Invariant: if `type` is `kCached` or `kCachedFromProxy`, then this is
65*6777b538SAndroid Build Coastguard Worker   // empty.
66*6777b538SAndroid Build Coastguard Worker   std::string accept_ch_frame;
67*6777b538SAndroid Build Coastguard Worker 
68*6777b538SAndroid Build Coastguard Worker   // True if the transport layer was secure and the certificate was rooted at a
69*6777b538SAndroid Build Coastguard Worker   // standard CA root. (As opposed to a user-installed root.)
70*6777b538SAndroid Build Coastguard Worker   //
71*6777b538SAndroid Build Coastguard Worker   // Invariant: if `type` is `kCached` or `kCachedFromProxy`, then this is
72*6777b538SAndroid Build Coastguard Worker   // always false.
73*6777b538SAndroid Build Coastguard Worker   bool cert_is_issued_by_known_root = false;
74*6777b538SAndroid Build Coastguard Worker 
75*6777b538SAndroid Build Coastguard Worker   // The negotiated protocol info for the transport layer.
76*6777b538SAndroid Build Coastguard Worker   //
77*6777b538SAndroid Build Coastguard Worker   // Invariant: if `type` is `kCached` or `kCachedFromProxy`, then this is
78*6777b538SAndroid Build Coastguard Worker   // always kProtoUnknown.
79*6777b538SAndroid Build Coastguard Worker   NextProto negotiated_protocol = kProtoUnknown;
80*6777b538SAndroid Build Coastguard Worker };
81*6777b538SAndroid Build Coastguard Worker 
82*6777b538SAndroid Build Coastguard Worker // Instances of these types are streamable for easier debugging.
83*6777b538SAndroid Build Coastguard Worker NET_EXPORT std::ostream& operator<<(std::ostream& out, TransportType type);
84*6777b538SAndroid Build Coastguard Worker NET_EXPORT std::ostream& operator<<(std::ostream& out,
85*6777b538SAndroid Build Coastguard Worker                                     const TransportInfo& info);
86*6777b538SAndroid Build Coastguard Worker 
87*6777b538SAndroid Build Coastguard Worker }  // namespace net
88*6777b538SAndroid Build Coastguard Worker 
89*6777b538SAndroid Build Coastguard Worker #endif  // NET_BASE_TRANSPORT_INFO_H_
90