• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)11 std::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)105 std::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)121 HttpConnectionInfoCoarse 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