xref: /aosp_15_r20/external/cronet/net/http/http_connection_info.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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       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)106 std::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)122 HttpConnectionInfoCoarse 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