xref: /aosp_15_r20/external/cronet/net/base/transport_info.cc (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 #include "net/base/transport_info.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <ostream>
8*6777b538SAndroid Build Coastguard Worker #include <utility>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/check.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/notreached.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/strings/strcat.h"
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker namespace net {
15*6777b538SAndroid Build Coastguard Worker 
TransportTypeToString(TransportType type)16*6777b538SAndroid Build Coastguard Worker std::string_view TransportTypeToString(TransportType type) {
17*6777b538SAndroid Build Coastguard Worker   switch (type) {
18*6777b538SAndroid Build Coastguard Worker     case TransportType::kDirect:
19*6777b538SAndroid Build Coastguard Worker       return "TransportType::kDirect";
20*6777b538SAndroid Build Coastguard Worker     case TransportType::kProxied:
21*6777b538SAndroid Build Coastguard Worker       return "TransportType::kProxied";
22*6777b538SAndroid Build Coastguard Worker     case TransportType::kCached:
23*6777b538SAndroid Build Coastguard Worker       return "TransportType::kCached";
24*6777b538SAndroid Build Coastguard Worker     case TransportType::kCachedFromProxy:
25*6777b538SAndroid Build Coastguard Worker       return "TransportType::kCachedFromProxy";
26*6777b538SAndroid Build Coastguard Worker   }
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker   // We define this here instead of as a `default` clause above so as to force
29*6777b538SAndroid Build Coastguard Worker   // a compiler error if a new value is added to the enum and this method is
30*6777b538SAndroid Build Coastguard Worker   // not updated to reflect it.
31*6777b538SAndroid Build Coastguard Worker   NOTREACHED();
32*6777b538SAndroid Build Coastguard Worker   return "<invalid transport type>";
33*6777b538SAndroid Build Coastguard Worker }
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker TransportInfo::TransportInfo() = default;
36*6777b538SAndroid Build Coastguard Worker 
TransportInfo(TransportType type_arg,IPEndPoint endpoint_arg,std::string accept_ch_frame_arg,bool cert_is_issued_by_known_root,NextProto negotiated_protocol)37*6777b538SAndroid Build Coastguard Worker TransportInfo::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     : type(type_arg),
43*6777b538SAndroid Build Coastguard Worker       endpoint(std::move(endpoint_arg)),
44*6777b538SAndroid Build Coastguard Worker       accept_ch_frame(std::move(accept_ch_frame_arg)),
45*6777b538SAndroid Build Coastguard Worker       cert_is_issued_by_known_root(cert_is_issued_by_known_root),
46*6777b538SAndroid Build Coastguard Worker       negotiated_protocol(negotiated_protocol) {
47*6777b538SAndroid Build Coastguard Worker   switch (type) {
48*6777b538SAndroid Build Coastguard Worker     case TransportType::kCached:
49*6777b538SAndroid Build Coastguard Worker     case TransportType::kCachedFromProxy:
50*6777b538SAndroid Build Coastguard Worker       DCHECK_EQ(accept_ch_frame, "");
51*6777b538SAndroid Build Coastguard Worker       break;
52*6777b538SAndroid Build Coastguard Worker     case TransportType::kDirect:
53*6777b538SAndroid Build Coastguard Worker     case TransportType::kProxied:
54*6777b538SAndroid Build Coastguard Worker       // `accept_ch_frame` can be empty or not. We use an exhaustive switch
55*6777b538SAndroid Build Coastguard Worker       // statement to force this check to account for changes in the definition
56*6777b538SAndroid Build Coastguard Worker       // of `TransportType`.
57*6777b538SAndroid Build Coastguard Worker       break;
58*6777b538SAndroid Build Coastguard Worker   }
59*6777b538SAndroid Build Coastguard Worker }
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker TransportInfo::TransportInfo(const TransportInfo&) = default;
62*6777b538SAndroid Build Coastguard Worker 
63*6777b538SAndroid Build Coastguard Worker TransportInfo::~TransportInfo() = default;
64*6777b538SAndroid Build Coastguard Worker 
65*6777b538SAndroid Build Coastguard Worker bool TransportInfo::operator==(const TransportInfo& other) const = default;
66*6777b538SAndroid Build Coastguard Worker 
ToString() const67*6777b538SAndroid Build Coastguard Worker std::string TransportInfo::ToString() const {
68*6777b538SAndroid Build Coastguard Worker   return base::StrCat({
69*6777b538SAndroid Build Coastguard Worker       "TransportInfo{ type = ",
70*6777b538SAndroid Build Coastguard Worker       TransportTypeToString(type),
71*6777b538SAndroid Build Coastguard Worker       ", endpoint = ",
72*6777b538SAndroid Build Coastguard Worker       endpoint.ToString(),
73*6777b538SAndroid Build Coastguard Worker       ", accept_ch_frame = ",
74*6777b538SAndroid Build Coastguard Worker       accept_ch_frame,
75*6777b538SAndroid Build Coastguard Worker       ", cert_is_issued_by_known_root = ",
76*6777b538SAndroid Build Coastguard Worker       cert_is_issued_by_known_root ? "true" : "false",
77*6777b538SAndroid Build Coastguard Worker       ", negotiated_protocol = ",
78*6777b538SAndroid Build Coastguard Worker       NextProtoToString(negotiated_protocol),
79*6777b538SAndroid Build Coastguard Worker       " }",
80*6777b538SAndroid Build Coastguard Worker   });
81*6777b538SAndroid Build Coastguard Worker }
82*6777b538SAndroid Build Coastguard Worker 
operator <<(std::ostream & out,TransportType type)83*6777b538SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& out, TransportType type) {
84*6777b538SAndroid Build Coastguard Worker   return out << TransportTypeToString(type);
85*6777b538SAndroid Build Coastguard Worker }
86*6777b538SAndroid Build Coastguard Worker 
operator <<(std::ostream & out,const TransportInfo & info)87*6777b538SAndroid Build Coastguard Worker std::ostream& operator<<(std::ostream& out, const TransportInfo& info) {
88*6777b538SAndroid Build Coastguard Worker   return out << info.ToString();
89*6777b538SAndroid Build Coastguard Worker }
90*6777b538SAndroid Build Coastguard Worker 
91*6777b538SAndroid Build Coastguard Worker }  // namespace net
92