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