1 // Copyright 2023 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/http/http_connection_info.h" 6 7 #include "base/notreached.h" 8 9 namespace net { 10 HttpConnectionInfoToString(HttpConnectionInfo connection_info)11std::string_view HttpConnectionInfoToString( 12 HttpConnectionInfo connection_info) { 13 switch (connection_info) { 14 case HttpConnectionInfo::kUNKNOWN: 15 return "unknown"; 16 case HttpConnectionInfo::kHTTP1_1: 17 return "http/1.1"; 18 case HttpConnectionInfo::kDEPRECATED_SPDY2: 19 NOTREACHED(); 20 return ""; 21 case HttpConnectionInfo::kDEPRECATED_SPDY3: 22 return "spdy/3"; 23 // Since ConnectionInfo is persisted to disk, deprecated values have to be 24 // handled. Note that h2-14 and h2-15 are essentially wire compatible with 25 // h2. 26 // Intentional fallthrough. 27 case HttpConnectionInfo::kDEPRECATED_HTTP2_14: 28 case HttpConnectionInfo::kDEPRECATED_HTTP2_15: 29 case HttpConnectionInfo::kHTTP2: 30 return "h2"; 31 case HttpConnectionInfo::kQUIC_UNKNOWN_VERSION: 32 return "http/2+quic"; 33 case HttpConnectionInfo::kQUIC_32: 34 return "http/2+quic/32"; 35 case HttpConnectionInfo::kQUIC_33: 36 return "http/2+quic/33"; 37 case HttpConnectionInfo::kQUIC_34: 38 return "http/2+quic/34"; 39 case HttpConnectionInfo::kQUIC_35: 40 return "http/2+quic/35"; 41 case HttpConnectionInfo::kQUIC_36: 42 return "http/2+quic/36"; 43 case HttpConnectionInfo::kQUIC_37: 44 return "http/2+quic/37"; 45 case HttpConnectionInfo::kQUIC_38: 46 return "http/2+quic/38"; 47 case HttpConnectionInfo::kQUIC_39: 48 return "http/2+quic/39"; 49 case HttpConnectionInfo::kQUIC_40: 50 return "http/2+quic/40"; 51 case HttpConnectionInfo::kQUIC_41: 52 return "http/2+quic/41"; 53 case HttpConnectionInfo::kQUIC_42: 54 return "http/2+quic/42"; 55 case HttpConnectionInfo::kQUIC_43: 56 return "http/2+quic/43"; 57 case HttpConnectionInfo::kQUIC_44: 58 return "http/2+quic/44"; 59 case HttpConnectionInfo::kQUIC_45: 60 return "http/2+quic/45"; 61 case HttpConnectionInfo::kQUIC_46: 62 return "http/2+quic/46"; 63 case HttpConnectionInfo::kQUIC_47: 64 return "http/2+quic/47"; 65 case HttpConnectionInfo::kQUIC_Q048: 66 return "h3-Q048"; 67 case HttpConnectionInfo::kQUIC_T048: 68 return "h3-T048"; 69 case HttpConnectionInfo::kQUIC_Q049: 70 return "h3-Q049"; 71 case HttpConnectionInfo::kQUIC_T049: 72 return "h3-T049"; 73 case HttpConnectionInfo::kQUIC_Q050: 74 return "h3-Q050"; 75 case HttpConnectionInfo::kQUIC_T050: 76 return "h3-T050"; 77 case HttpConnectionInfo::kQUIC_Q099: 78 return "h3-Q099"; 79 case HttpConnectionInfo::kQUIC_DRAFT_25: 80 return "h3-25"; 81 case HttpConnectionInfo::kQUIC_DRAFT_27: 82 return "h3-27"; 83 case HttpConnectionInfo::kQUIC_DRAFT_28: 84 return "h3-28"; 85 case HttpConnectionInfo::kQUIC_DRAFT_29: 86 return "h3-29"; 87 case HttpConnectionInfo::kQUIC_T099: 88 return "h3-T099"; 89 case HttpConnectionInfo::kHTTP0_9: 90 return "http/0.9"; 91 case HttpConnectionInfo::kHTTP1_0: 92 return "http/1.0"; 93 case HttpConnectionInfo::kQUIC_999: 94 return "http2+quic/999"; 95 case HttpConnectionInfo::kQUIC_T051: 96 return "h3-T051"; 97 case HttpConnectionInfo::kQUIC_RFC_V1: 98 return "h3"; 99 case HttpConnectionInfo::kDEPRECATED_QUIC_2_DRAFT_1: 100 return "h3/quic2draft01"; 101 case HttpConnectionInfo::kQUIC_2_DRAFT_8: 102 return "h3/quic2draft08"; 103 } 104 } 105 HttpConnectionInfoCoarseToString(HttpConnectionInfoCoarse connection_info_coarse)106std::string_view HttpConnectionInfoCoarseToString( 107 HttpConnectionInfoCoarse connection_info_coarse) { 108 switch (connection_info_coarse) { 109 case HttpConnectionInfoCoarse::kHTTP1: 110 return "Http1"; 111 case HttpConnectionInfoCoarse::kHTTP2: 112 return "Http2"; 113 case HttpConnectionInfoCoarse::kQUIC: 114 return "Http3"; 115 case HttpConnectionInfoCoarse::kOTHER: 116 return "Other"; 117 } 118 } 119 120 // Returns a more coarse-grained description of the protocol used to fetch the 121 // response. HttpConnectionInfoToCoarse(HttpConnectionInfo info)122HttpConnectionInfoCoarse HttpConnectionInfoToCoarse(HttpConnectionInfo info) { 123 switch (info) { 124 case HttpConnectionInfo::kHTTP0_9: 125 case HttpConnectionInfo::kHTTP1_0: 126 case HttpConnectionInfo::kHTTP1_1: 127 return HttpConnectionInfoCoarse::kHTTP1; 128 129 case HttpConnectionInfo::kHTTP2: 130 case HttpConnectionInfo::kDEPRECATED_SPDY2: 131 case HttpConnectionInfo::kDEPRECATED_SPDY3: 132 case HttpConnectionInfo::kDEPRECATED_HTTP2_14: 133 case HttpConnectionInfo::kDEPRECATED_HTTP2_15: 134 return HttpConnectionInfoCoarse::kHTTP2; 135 136 case HttpConnectionInfo::kQUIC_UNKNOWN_VERSION: 137 case HttpConnectionInfo::kQUIC_32: 138 case HttpConnectionInfo::kQUIC_33: 139 case HttpConnectionInfo::kQUIC_34: 140 case HttpConnectionInfo::kQUIC_35: 141 case HttpConnectionInfo::kQUIC_36: 142 case HttpConnectionInfo::kQUIC_37: 143 case HttpConnectionInfo::kQUIC_38: 144 case HttpConnectionInfo::kQUIC_39: 145 case HttpConnectionInfo::kQUIC_40: 146 case HttpConnectionInfo::kQUIC_41: 147 case HttpConnectionInfo::kQUIC_42: 148 case HttpConnectionInfo::kQUIC_43: 149 case HttpConnectionInfo::kQUIC_44: 150 case HttpConnectionInfo::kQUIC_45: 151 case HttpConnectionInfo::kQUIC_46: 152 case HttpConnectionInfo::kQUIC_47: 153 case HttpConnectionInfo::kQUIC_Q048: 154 case HttpConnectionInfo::kQUIC_T048: 155 case HttpConnectionInfo::kQUIC_Q049: 156 case HttpConnectionInfo::kQUIC_T049: 157 case HttpConnectionInfo::kQUIC_Q050: 158 case HttpConnectionInfo::kQUIC_T050: 159 case HttpConnectionInfo::kQUIC_Q099: 160 case HttpConnectionInfo::kQUIC_T099: 161 case HttpConnectionInfo::kQUIC_999: 162 case HttpConnectionInfo::kQUIC_DRAFT_25: 163 case HttpConnectionInfo::kQUIC_DRAFT_27: 164 case HttpConnectionInfo::kQUIC_DRAFT_28: 165 case HttpConnectionInfo::kQUIC_DRAFT_29: 166 case HttpConnectionInfo::kQUIC_T051: 167 case HttpConnectionInfo::kQUIC_RFC_V1: 168 case HttpConnectionInfo::kDEPRECATED_QUIC_2_DRAFT_1: 169 case HttpConnectionInfo::kQUIC_2_DRAFT_8: 170 return HttpConnectionInfoCoarse::kQUIC; 171 172 case HttpConnectionInfo::kUNKNOWN: 173 return HttpConnectionInfoCoarse::kOTHER; 174 } 175 } 176 177 } // namespace net 178