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