1 //
2 //
3 // Copyright 2020 gRPC authors.
4 //
5 // Licensed under the Apache License, Version 2.0 (the "License");
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 //
18 
19 #include <grpc/support/port_platform.h>
20 
21 #include "src/core/ext/transport/cronet/transport/cronet_status.h"
22 
cronet_net_error_as_string(cronet_net_error_code net_error)23 const char* cronet_net_error_as_string(cronet_net_error_code net_error) {
24   switch (net_error) {
25     case OK:
26       return "OK";
27     case CRONET_NET_ERROR_IO_PENDING:
28       return "CRONET_NET_ERROR_IO_PENDING";
29     case CRONET_NET_ERROR_FAILED:
30       return "CRONET_NET_ERROR_FAILED";
31     case CRONET_NET_ERROR_ABORTED:
32       return "CRONET_NET_ERROR_ABORTED";
33     case CRONET_NET_ERROR_INVALID_ARGUMENT:
34       return "CRONET_NET_ERROR_INVALID_ARGUMENT";
35     case CRONET_NET_ERROR_INVALID_HANDLE:
36       return "CRONET_NET_ERROR_INVALID_HANDLE";
37     case CRONET_NET_ERROR_FILE_NOT_FOUND:
38       return "CRONET_NET_ERROR_FILE_NOT_FOUND";
39     case CRONET_NET_ERROR_TIMED_OUT:
40       return "CRONET_NET_ERROR_TIMED_OUT";
41     case CRONET_NET_ERROR_FILE_TOO_BIG:
42       return "CRONET_NET_ERROR_FILE_TOO_BIG";
43     case CRONET_NET_ERROR_UNEXPECTED:
44       return "CRONET_NET_ERROR_UNEXPECTED";
45     case CRONET_NET_ERROR_ACCESS_DENIED:
46       return "CRONET_NET_ERROR_ACCESS_DENIED";
47     case CRONET_NET_ERROR_NOT_IMPLEMENTED:
48       return "CRONET_NET_ERROR_NOT_IMPLEMENTED";
49     case CRONET_NET_ERROR_INSUFFICIENT_RESOURCES:
50       return "CRONET_NET_ERROR_INSUFFICIENT_RESOURCES";
51     case CRONET_NET_ERROR_OUT_OF_MEMORY:
52       return "CRONET_NET_ERROR_OUT_OF_MEMORY";
53     case CRONET_NET_ERROR_UPLOAD_FILE_CHANGED:
54       return "CRONET_NET_ERROR_UPLOAD_FILE_CHANGED";
55     case CRONET_NET_ERROR_SOCKET_NOT_CONNECTED:
56       return "CRONET_NET_ERROR_SOCKET_NOT_CONNECTED";
57     case CRONET_NET_ERROR_FILE_EXISTS:
58       return "CRONET_NET_ERROR_FILE_EXISTS";
59     case CRONET_NET_ERROR_FILE_PATH_TOO_LONG:
60       return "CRONET_NET_ERROR_FILE_PATH_TOO_LONG";
61     case CRONET_NET_ERROR_FILE_NO_SPACE:
62       return "CRONET_NET_ERROR_FILE_NO_SPACE";
63     case CRONET_NET_ERROR_FILE_VIRUS_INFECTED:
64       return "CRONET_NET_ERROR_FILE_VIRUS_INFECTED";
65     case CRONET_NET_ERROR_BLOCKED_BY_CLIENT:
66       return "CRONET_NET_ERROR_BLOCKED_BY_CLIENT";
67     case CRONET_NET_ERROR_NETWORK_CHANGED:
68       return "CRONET_NET_ERROR_NETWORK_CHANGED";
69     case CRONET_NET_ERROR_BLOCKED_BY_ADMINISTRATOR:
70       return "CRONET_NET_ERROR_BLOCKED_BY_ADMINISTRATOR";
71     case CRONET_NET_ERROR_SOCKET_IS_CONNECTED:
72       return "CRONET_NET_ERROR_SOCKET_IS_CONNECTED";
73     case CRONET_NET_ERROR_BLOCKED_ENROLLMENT_CHECK_PENDING:
74       return "CRONET_NET_ERROR_BLOCKED_ENROLLMENT_CHECK_PENDING";
75     case CRONET_NET_ERROR_UPLOAD_STREAM_REWIND_NOT_SUPPORTED:
76       return "CRONET_NET_ERROR_UPLOAD_STREAM_REWIND_NOT_SUPPORTED";
77     case CRONET_NET_ERROR_CONTEXT_SHUT_DOWN:
78       return "CRONET_NET_ERROR_CONTEXT_SHUT_DOWN";
79     case CRONET_NET_ERROR_BLOCKED_BY_RESPONSE:
80       return "CRONET_NET_ERROR_BLOCKED_BY_RESPONSE";
81     case CRONET_NET_ERROR_CLEARTEXT_NOT_PERMITTED:
82       return "CRONET_NET_ERROR_CLEARTEXT_NOT_PERMITTED";
83     case CRONET_NET_ERROR_BLOCKED_BY_CSP:
84       return "CRONET_NET_ERROR_BLOCKED_BY_CSP";
85     case CRONET_NET_ERROR_H2_OR_QUIC_REQUIRED:
86       return "CRONET_NET_ERROR_H2_OR_QUIC_REQUIRED";
87     case CRONET_NET_ERROR_INSECURE_PRIVATE_NETWORK_REQUEST:
88       return "CRONET_NET_ERROR_INSECURE_PRIVATE_NETWORK_REQUEST";
89     case CRONET_NET_ERROR_CONNECTION_CLOSED:
90       return "CRONET_NET_ERROR_CONNECTION_CLOSED";
91     case CRONET_NET_ERROR_CONNECTION_RESET:
92       return "CRONET_NET_ERROR_CONNECTION_RESET";
93     case CRONET_NET_ERROR_CONNECTION_REFUSED:
94       return "CRONET_NET_ERROR_CONNECTION_REFUSED";
95     case CRONET_NET_ERROR_CONNECTION_ABORTED:
96       return "CRONET_NET_ERROR_CONNECTION_ABORTED";
97     case CRONET_NET_ERROR_CONNECTION_FAILED:
98       return "CRONET_NET_ERROR_CONNECTION_FAILED";
99     case CRONET_NET_ERROR_NAME_NOT_RESOLVED:
100       return "CRONET_NET_ERROR_NAME_NOT_RESOLVED";
101     case CRONET_NET_ERROR_INTERNET_DISCONNECTED:
102       return "CRONET_NET_ERROR_INTERNET_DISCONNECTED";
103     case CRONET_NET_ERROR_SSL_PROTOCOL_ERROR:
104       return "CRONET_NET_ERROR_SSL_PROTOCOL_ERROR";
105     case CRONET_NET_ERROR_ADDRESS_INVALID:
106       return "CRONET_NET_ERROR_ADDRESS_INVALID";
107     case CRONET_NET_ERROR_ADDRESS_UNREACHABLE:
108       return "CRONET_NET_ERROR_ADDRESS_UNREACHABLE";
109     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_NEEDED:
110       return "CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_NEEDED";
111     case CRONET_NET_ERROR_TUNNEL_CONNECTION_FAILED:
112       return "CRONET_NET_ERROR_TUNNEL_CONNECTION_FAILED";
113     case CRONET_NET_ERROR_NO_SSL_VERSIONS_ENABLED:
114       return "CRONET_NET_ERROR_NO_SSL_VERSIONS_ENABLED";
115     case CRONET_NET_ERROR_SSL_VERSION_OR_CIPHER_MISMATCH:
116       return "CRONET_NET_ERROR_SSL_VERSION_OR_CIPHER_MISMATCH";
117     case CRONET_NET_ERROR_SSL_RENEGOTIATION_REQUESTED:
118       return "CRONET_NET_ERROR_SSL_RENEGOTIATION_REQUESTED";
119     case CRONET_NET_ERROR_PROXY_AUTH_UNSUPPORTED:
120       return "CRONET_NET_ERROR_PROXY_AUTH_UNSUPPORTED";
121     case CRONET_NET_ERROR_CERT_ERROR_IN_SSL_RENEGOTIATION:
122       return "CRONET_NET_ERROR_CERT_ERROR_IN_SSL_RENEGOTIATION";
123     case CRONET_NET_ERROR_BAD_SSL_CLIENT_AUTH_CERT:
124       return "CRONET_NET_ERROR_BAD_SSL_CLIENT_AUTH_CERT";
125     case CRONET_NET_ERROR_CONNECTION_TIMED_OUT:
126       return "CRONET_NET_ERROR_CONNECTION_TIMED_OUT";
127     case CRONET_NET_ERROR_HOST_RESOLVER_QUEUE_TOO_LARGE:
128       return "CRONET_NET_ERROR_HOST_RESOLVER_QUEUE_TOO_LARGE";
129     case CRONET_NET_ERROR_SOCKS_CONNECTION_FAILED:
130       return "CRONET_NET_ERROR_SOCKS_CONNECTION_FAILED";
131     case CRONET_NET_ERROR_SOCKS_CONNECTION_HOST_UNREACHABLE:
132       return "CRONET_NET_ERROR_SOCKS_CONNECTION_HOST_UNREACHABLE";
133     case CRONET_NET_ERROR_ALPN_NEGOTIATION_FAILED:
134       return "CRONET_NET_ERROR_ALPN_NEGOTIATION_FAILED";
135     case CRONET_NET_ERROR_SSL_NO_RENEGOTIATION:
136       return "CRONET_NET_ERROR_SSL_NO_RENEGOTIATION";
137     case CRONET_NET_ERROR_WINSOCK_UNEXPECTED_WRITTEN_BYTES:
138       return "CRONET_NET_ERROR_WINSOCK_UNEXPECTED_WRITTEN_BYTES";
139     case CRONET_NET_ERROR_SSL_DECOMPRESSION_FAILURE_ALERT:
140       return "CRONET_NET_ERROR_SSL_DECOMPRESSION_FAILURE_ALERT";
141     case CRONET_NET_ERROR_SSL_BAD_RECORD_MAC_ALERT:
142       return "CRONET_NET_ERROR_SSL_BAD_RECORD_MAC_ALERT";
143     case CRONET_NET_ERROR_PROXY_AUTH_REQUESTED:
144       return "CRONET_NET_ERROR_PROXY_AUTH_REQUESTED";
145     case CRONET_NET_ERROR_PROXY_CONNECTION_FAILED:
146       return "CRONET_NET_ERROR_PROXY_CONNECTION_FAILED";
147     case CRONET_NET_ERROR_MANDATORY_PROXY_CONFIGURATION_FAILED:
148       return "CRONET_NET_ERROR_MANDATORY_PROXY_CONFIGURATION_FAILED";
149     case CRONET_NET_ERROR_PRECONNECT_MAX_SOCKET_LIMIT:
150       return "CRONET_NET_ERROR_PRECONNECT_MAX_SOCKET_LIMIT";
151     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED:
152       return "CRONET_NET_ERROR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED";
153     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY:
154       return "CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY";
155     case CRONET_NET_ERROR_PROXY_CERTIFICATE_INVALID:
156       return "CRONET_NET_ERROR_PROXY_CERTIFICATE_INVALID";
157     case CRONET_NET_ERROR_NAME_RESOLUTION_FAILED:
158       return "CRONET_NET_ERROR_NAME_RESOLUTION_FAILED";
159     case CRONET_NET_ERROR_NETWORK_ACCESS_DENIED:
160       return "CRONET_NET_ERROR_NETWORK_ACCESS_DENIED";
161     case CRONET_NET_ERROR_TEMPORARILY_THROTTLED:
162       return "CRONET_NET_ERROR_TEMPORARILY_THROTTLED";
163     case CRONET_NET_ERROR_HTTPS_PROXY_TUNNEL_RESPONSE_REDIRECT:
164       return "CRONET_NET_ERROR_HTTPS_PROXY_TUNNEL_RESPONSE_REDIRECT";
165     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_SIGNATURE_FAILED:
166       return "CRONET_NET_ERROR_SSL_CLIENT_AUTH_SIGNATURE_FAILED";
167     case CRONET_NET_ERROR_MSG_TOO_BIG:
168       return "CRONET_NET_ERROR_MSG_TOO_BIG";
169     case CRONET_NET_ERROR_WS_PROTOCOL_ERROR:
170       return "CRONET_NET_ERROR_WS_PROTOCOL_ERROR";
171     case CRONET_NET_ERROR_ADDRESS_IN_USE:
172       return "CRONET_NET_ERROR_ADDRESS_IN_USE";
173     case CRONET_NET_ERROR_SSL_HANDSHAKE_NOT_COMPLETED:
174       return "CRONET_NET_ERROR_SSL_HANDSHAKE_NOT_COMPLETED";
175     case CRONET_NET_ERROR_SSL_BAD_PEER_PUBLIC_KEY:
176       return "CRONET_NET_ERROR_SSL_BAD_PEER_PUBLIC_KEY";
177     case CRONET_NET_ERROR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN:
178       return "CRONET_NET_ERROR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN";
179     case CRONET_NET_ERROR_CLIENT_AUTH_CERT_TYPE_UNSUPPORTED:
180       return "CRONET_NET_ERROR_CLIENT_AUTH_CERT_TYPE_UNSUPPORTED";
181     case CRONET_NET_ERROR_SSL_DECRYPT_ERROR_ALERT:
182       return "CRONET_NET_ERROR_SSL_DECRYPT_ERROR_ALERT";
183     case CRONET_NET_ERROR_WS_THROTTLE_QUEUE_TOO_LARGE:
184       return "CRONET_NET_ERROR_WS_THROTTLE_QUEUE_TOO_LARGE";
185     case CRONET_NET_ERROR_SSL_SERVER_CERT_CHANGED:
186       return "CRONET_NET_ERROR_SSL_SERVER_CERT_CHANGED";
187     case CRONET_NET_ERROR_SSL_UNRECOGNIZED_NAME_ALERT:
188       return "CRONET_NET_ERROR_SSL_UNRECOGNIZED_NAME_ALERT";
189     case CRONET_NET_ERROR_SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR:
190       return "CRONET_NET_ERROR_SOCKET_SET_RECEIVE_BUFFER_SIZE_ERROR";
191     case CRONET_NET_ERROR_SOCKET_SET_SEND_BUFFER_SIZE_ERROR:
192       return "CRONET_NET_ERROR_SOCKET_SET_SEND_BUFFER_SIZE_ERROR";
193     case CRONET_NET_ERROR_SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE:
194       return "CRONET_NET_ERROR_SOCKET_RECEIVE_BUFFER_SIZE_UNCHANGEABLE";
195     case CRONET_NET_ERROR_SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE:
196       return "CRONET_NET_ERROR_SOCKET_SEND_BUFFER_SIZE_UNCHANGEABLE";
197     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_BAD_FORMAT:
198       return "CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_BAD_FORMAT";
199     case CRONET_NET_ERROR_ICANN_NAME_COLLISION:
200       return "CRONET_NET_ERROR_ICANN_NAME_COLLISION";
201     case CRONET_NET_ERROR_SSL_SERVER_CERT_BAD_FORMAT:
202       return "CRONET_NET_ERROR_SSL_SERVER_CERT_BAD_FORMAT";
203     case CRONET_NET_ERROR_CT_STH_PARSING_FAILED:
204       return "CRONET_NET_ERROR_CT_STH_PARSING_FAILED";
205     case CRONET_NET_ERROR_CT_STH_INCOMPLETE:
206       return "CRONET_NET_ERROR_CT_STH_INCOMPLETE";
207     case CRONET_NET_ERROR_UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH:
208       return "CRONET_NET_ERROR_UNABLE_TO_REUSE_CONNECTION_FOR_PROXY_AUTH";
209     case CRONET_NET_ERROR_CT_CONSISTENCY_PROOF_PARSING_FAILED:
210       return "CRONET_NET_ERROR_CT_CONSISTENCY_PROOF_PARSING_FAILED";
211     case CRONET_NET_ERROR_SSL_OBSOLETE_CIPHER:
212       return "CRONET_NET_ERROR_SSL_OBSOLETE_CIPHER";
213     case CRONET_NET_ERROR_WS_UPGRADE:
214       return "CRONET_NET_ERROR_WS_UPGRADE";
215     case CRONET_NET_ERROR_READ_IF_READY_NOT_IMPLEMENTED:
216       return "CRONET_NET_ERROR_READ_IF_READY_NOT_IMPLEMENTED";
217     case CRONET_NET_ERROR_NO_BUFFER_SPACE:
218       return "CRONET_NET_ERROR_NO_BUFFER_SPACE";
219     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS:
220       return "CRONET_NET_ERROR_SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS";
221     case CRONET_NET_ERROR_EARLY_DATA_REJECTED:
222       return "CRONET_NET_ERROR_EARLY_DATA_REJECTED";
223     case CRONET_NET_ERROR_WRONG_VERSION_ON_EARLY_DATA:
224       return "CRONET_NET_ERROR_WRONG_VERSION_ON_EARLY_DATA";
225     case CRONET_NET_ERROR_TLS13_DOWNGRADE_DETECTED:
226       return "CRONET_NET_ERROR_TLS13_DOWNGRADE_DETECTED";
227     case CRONET_NET_ERROR_SSL_KEY_USAGE_INCOMPATIBLE:
228       return "CRONET_NET_ERROR_SSL_KEY_USAGE_INCOMPATIBLE";
229     case CRONET_NET_ERROR_CERT_COMMON_NAME_INVALID:
230       return "CRONET_NET_ERROR_CERT_COMMON_NAME_INVALID";
231     case CRONET_NET_ERROR_CERT_DATE_INVALID:
232       return "CRONET_NET_ERROR_CERT_DATE_INVALID";
233     case CRONET_NET_ERROR_CERT_AUTHORITY_INVALID:
234       return "CRONET_NET_ERROR_CERT_AUTHORITY_INVALID";
235     case CRONET_NET_ERROR_CERT_CONTAINS_ERRORS:
236       return "CRONET_NET_ERROR_CERT_CONTAINS_ERRORS";
237     case CRONET_NET_ERROR_CERT_NO_REVOCATION_MECHANISM:
238       return "CRONET_NET_ERROR_CERT_NO_REVOCATION_MECHANISM";
239     case CRONET_NET_ERROR_CERT_UNABLE_TO_CHECK_REVOCATION:
240       return "CRONET_NET_ERROR_CERT_UNABLE_TO_CHECK_REVOCATION";
241     case CRONET_NET_ERROR_CERT_REVOKED:
242       return "CRONET_NET_ERROR_CERT_REVOKED";
243     case CRONET_NET_ERROR_CERT_INVALID:
244       return "CRONET_NET_ERROR_CERT_INVALID";
245     case CRONET_NET_ERROR_CERT_WEAK_SIGNATURE_ALGORITHM:
246       return "CRONET_NET_ERROR_CERT_WEAK_SIGNATURE_ALGORITHM";
247     case CRONET_NET_ERROR_CERT_NON_UNIQUE_NAME:
248       return "CRONET_NET_ERROR_CERT_NON_UNIQUE_NAME";
249     case CRONET_NET_ERROR_CERT_WEAK_KEY:
250       return "CRONET_NET_ERROR_CERT_WEAK_KEY";
251     case CRONET_NET_ERROR_CERT_NAME_CONSTRAINT_VIOLATION:
252       return "CRONET_NET_ERROR_CERT_NAME_CONSTRAINT_VIOLATION";
253     case CRONET_NET_ERROR_CERT_VALIDITY_TOO_LONG:
254       return "CRONET_NET_ERROR_CERT_VALIDITY_TOO_LONG";
255     case CRONET_NET_ERROR_CERTIFICATE_TRANSPARENCY_REQUIRED:
256       return "CRONET_NET_ERROR_CERTIFICATE_TRANSPARENCY_REQUIRED";
257     case CRONET_NET_ERROR_CERT_SYMANTEC_LEGACY:
258       return "CRONET_NET_ERROR_CERT_SYMANTEC_LEGACY";
259     case CRONET_NET_ERROR_CERT_KNOWN_INTERCEPTION_BLOCKED:
260       return "CRONET_NET_ERROR_CERT_KNOWN_INTERCEPTION_BLOCKED";
261     case CRONET_NET_ERROR_SSL_OBSOLETE_VERSION:
262       return "CRONET_NET_ERROR_SSL_OBSOLETE_VERSION";
263     case CRONET_NET_ERROR_CERT_END:
264       return "CRONET_NET_ERROR_CERT_END";
265     case CRONET_NET_ERROR_INVALID_URL:
266       return "CRONET_NET_ERROR_INVALID_URL";
267     case CRONET_NET_ERROR_DISALLOWED_URL_SCHEME:
268       return "CRONET_NET_ERROR_DISALLOWED_URL_SCHEME";
269     case CRONET_NET_ERROR_UNKNOWN_URL_SCHEME:
270       return "CRONET_NET_ERROR_UNKNOWN_URL_SCHEME";
271     case CRONET_NET_ERROR_INVALID_REDIRECT:
272       return "CRONET_NET_ERROR_INVALID_REDIRECT";
273     case CRONET_NET_ERROR_TOO_MANY_REDIRECTS:
274       return "CRONET_NET_ERROR_TOO_MANY_REDIRECTS";
275     case CRONET_NET_ERROR_UNSAFE_REDIRECT:
276       return "CRONET_NET_ERROR_UNSAFE_REDIRECT";
277     case CRONET_NET_ERROR_UNSAFE_PORT:
278       return "CRONET_NET_ERROR_UNSAFE_PORT";
279     case CRONET_NET_ERROR_INVALID_RESPONSE:
280       return "CRONET_NET_ERROR_INVALID_RESPONSE";
281     case CRONET_NET_ERROR_INVALID_CHUNKED_ENCODING:
282       return "CRONET_NET_ERROR_INVALID_CHUNKED_ENCODING";
283     case CRONET_NET_ERROR_METHOD_NOT_SUPPORTED:
284       return "CRONET_NET_ERROR_METHOD_NOT_SUPPORTED";
285     case CRONET_NET_ERROR_UNEXPECTED_PROXY_AUTH:
286       return "CRONET_NET_ERROR_UNEXPECTED_PROXY_AUTH";
287     case CRONET_NET_ERROR_EMPTY_RESPONSE:
288       return "CRONET_NET_ERROR_EMPTY_RESPONSE";
289     case CRONET_NET_ERROR_RESPONSE_HEADERS_TOO_BIG:
290       return "CRONET_NET_ERROR_RESPONSE_HEADERS_TOO_BIG";
291     case CRONET_NET_ERROR_PAC_SCRIPT_FAILED:
292       return "CRONET_NET_ERROR_PAC_SCRIPT_FAILED";
293     case CRONET_NET_ERROR_REQUEST_RANGE_NOT_SATISFIABLE:
294       return "CRONET_NET_ERROR_REQUEST_RANGE_NOT_SATISFIABLE";
295     case CRONET_NET_ERROR_MALFORMED_IDENTITY:
296       return "CRONET_NET_ERROR_MALFORMED_IDENTITY";
297     case CRONET_NET_ERROR_CONTENT_DECODING_FAILED:
298       return "CRONET_NET_ERROR_CONTENT_DECODING_FAILED";
299     case CRONET_NET_ERROR_NETWORK_IO_SUSPENDED:
300       return "CRONET_NET_ERROR_NETWORK_IO_SUSPENDED";
301     case CRONET_NET_ERROR_SYN_REPLY_NOT_RECEIVED:
302       return "CRONET_NET_ERROR_SYN_REPLY_NOT_RECEIVED";
303     case CRONET_NET_ERROR_ENCODING_CONVERSION_FAILED:
304       return "CRONET_NET_ERROR_ENCODING_CONVERSION_FAILED";
305     case CRONET_NET_ERROR_UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT:
306       return "CRONET_NET_ERROR_UNRECOGNIZED_FTP_DIRECTORY_LISTING_FORMAT";
307     case CRONET_NET_ERROR_NO_SUPPORTED_PROXIES:
308       return "CRONET_NET_ERROR_NO_SUPPORTED_PROXIES";
309     case CRONET_NET_ERROR_HTTP2_PROTOCOL_ERROR:
310       return "CRONET_NET_ERROR_HTTP2_PROTOCOL_ERROR";
311     case CRONET_NET_ERROR_INVALID_AUTH_CREDENTIALS:
312       return "CRONET_NET_ERROR_INVALID_AUTH_CREDENTIALS";
313     case CRONET_NET_ERROR_UNSUPPORTED_AUTH_SCHEME:
314       return "CRONET_NET_ERROR_UNSUPPORTED_AUTH_SCHEME";
315     case CRONET_NET_ERROR_ENCODING_DETECTION_FAILED:
316       return "CRONET_NET_ERROR_ENCODING_DETECTION_FAILED";
317     case CRONET_NET_ERROR_MISSING_AUTH_CREDENTIALS:
318       return "CRONET_NET_ERROR_MISSING_AUTH_CREDENTIALS";
319     case CRONET_NET_ERROR_UNEXPECTED_SECURITY_LIBRARY_STATUS:
320       return "CRONET_NET_ERROR_UNEXPECTED_SECURITY_LIBRARY_STATUS";
321     case CRONET_NET_ERROR_MISCONFIGURED_AUTH_ENVIRONMENT:
322       return "CRONET_NET_ERROR_MISCONFIGURED_AUTH_ENVIRONMENT";
323     case CRONET_NET_ERROR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS:
324       return "CRONET_NET_ERROR_UNDOCUMENTED_SECURITY_LIBRARY_STATUS";
325     case CRONET_NET_ERROR_RESPONSE_BODY_TOO_BIG_TO_DRAIN:
326       return "CRONET_NET_ERROR_RESPONSE_BODY_TOO_BIG_TO_DRAIN";
327     case CRONET_NET_ERROR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH:
328       return "CRONET_NET_ERROR_RESPONSE_HEADERS_MULTIPLE_CONTENT_LENGTH";
329     case CRONET_NET_ERROR_INCOMPLETE_HTTP2_HEADERS:
330       return "CRONET_NET_ERROR_INCOMPLETE_HTTP2_HEADERS";
331     case CRONET_NET_ERROR_PAC_NOT_IN_DHCP:
332       return "CRONET_NET_ERROR_PAC_NOT_IN_DHCP";
333     case CRONET_NET_ERROR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION:
334       return "CRONET_NET_ERROR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION";
335     case CRONET_NET_ERROR_RESPONSE_HEADERS_MULTIPLE_LOCATION:
336       return "CRONET_NET_ERROR_RESPONSE_HEADERS_MULTIPLE_LOCATION";
337     case CRONET_NET_ERROR_HTTP2_SERVER_REFUSED_STREAM:
338       return "CRONET_NET_ERROR_HTTP2_SERVER_REFUSED_STREAM";
339     case CRONET_NET_ERROR_HTTP2_PING_FAILED:
340       return "CRONET_NET_ERROR_HTTP2_PING_FAILED";
341     case CRONET_NET_ERROR_CONTENT_LENGTH_MISMATCH:
342       return "CRONET_NET_ERROR_CONTENT_LENGTH_MISMATCH";
343     case CRONET_NET_ERROR_INCOMPLETE_CHUNKED_ENCODING:
344       return "CRONET_NET_ERROR_INCOMPLETE_CHUNKED_ENCODING";
345     case CRONET_NET_ERROR_QUIC_PROTOCOL_ERROR:
346       return "CRONET_NET_ERROR_QUIC_PROTOCOL_ERROR";
347     case CRONET_NET_ERROR_RESPONSE_HEADERS_TRUNCATED:
348       return "CRONET_NET_ERROR_RESPONSE_HEADERS_TRUNCATED";
349     case CRONET_NET_ERROR_QUIC_HANDSHAKE_FAILED:
350       return "CRONET_NET_ERROR_QUIC_HANDSHAKE_FAILED";
351     case CRONET_NET_ERROR_HTTP2_INADEQUATE_TRANSPORT_SECURITY:
352       return "CRONET_NET_ERROR_HTTP2_INADEQUATE_TRANSPORT_SECURITY";
353     case CRONET_NET_ERROR_HTTP2_FLOW_CONTROL_ERROR:
354       return "CRONET_NET_ERROR_HTTP2_FLOW_CONTROL_ERROR";
355     case CRONET_NET_ERROR_HTTP2_FRAME_SIZE_ERROR:
356       return "CRONET_NET_ERROR_HTTP2_FRAME_SIZE_ERROR";
357     case CRONET_NET_ERROR_HTTP2_COMPRESSION_ERROR:
358       return "CRONET_NET_ERROR_HTTP2_COMPRESSION_ERROR";
359     case CRONET_NET_ERROR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION:
360       return "CRONET_NET_ERROR_PROXY_AUTH_REQUESTED_WITH_NO_CONNECTION";
361     case CRONET_NET_ERROR_HTTP_1_1_REQUIRED:
362       return "CRONET_NET_ERROR_HTTP_1_1_REQUIRED";
363     case CRONET_NET_ERROR_PROXY_HTTP_1_1_REQUIRED:
364       return "CRONET_NET_ERROR_PROXY_HTTP_1_1_REQUIRED";
365     case CRONET_NET_ERROR_PAC_SCRIPT_TERMINATED:
366       return "CRONET_NET_ERROR_PAC_SCRIPT_TERMINATED";
367     case CRONET_NET_ERROR_INVALID_HTTP_RESPONSE:
368       return "CRONET_NET_ERROR_INVALID_HTTP_RESPONSE";
369     case CRONET_NET_ERROR_CONTENT_DECODING_INIT_FAILED:
370       return "CRONET_NET_ERROR_CONTENT_DECODING_INIT_FAILED";
371     case CRONET_NET_ERROR_HTTP2_RST_STREAM_NO_ERROR_RECEIVED:
372       return "CRONET_NET_ERROR_HTTP2_RST_STREAM_NO_ERROR_RECEIVED";
373     case CRONET_NET_ERROR_HTTP2_PUSHED_STREAM_NOT_AVAILABLE:
374       return "CRONET_NET_ERROR_HTTP2_PUSHED_STREAM_NOT_AVAILABLE";
375     case CRONET_NET_ERROR_HTTP2_CLAIMED_PUSHED_STREAM_RESET_BY_SERVER:
376       return "CRONET_NET_ERROR_HTTP2_CLAIMED_PUSHED_STREAM_RESET_BY_SERVER";
377     case CRONET_NET_ERROR_TOO_MANY_RETRIES:
378       return "CRONET_NET_ERROR_TOO_MANY_RETRIES";
379     case CRONET_NET_ERROR_HTTP2_STREAM_CLOSED:
380       return "CRONET_NET_ERROR_HTTP2_STREAM_CLOSED";
381     case CRONET_NET_ERROR_HTTP2_CLIENT_REFUSED_STREAM:
382       return "CRONET_NET_ERROR_HTTP2_CLIENT_REFUSED_STREAM";
383     case CRONET_NET_ERROR_HTTP2_PUSHED_RESPONSE_DOES_NOT_MATCH:
384       return "CRONET_NET_ERROR_HTTP2_PUSHED_RESPONSE_DOES_NOT_MATCH";
385     case CRONET_NET_ERROR_HTTP_RESPONSE_CODE_FAILURE:
386       return "CRONET_NET_ERROR_HTTP_RESPONSE_CODE_FAILURE";
387     case CRONET_NET_ERROR_QUIC_CERT_ROOT_NOT_KNOWN:
388       return "CRONET_NET_ERROR_QUIC_CERT_ROOT_NOT_KNOWN";
389     case CRONET_NET_ERROR_CACHE_MISS:
390       return "CRONET_NET_ERROR_CACHE_MISS";
391     case CRONET_NET_ERROR_CACHE_READ_FAILURE:
392       return "CRONET_NET_ERROR_CACHE_READ_FAILURE";
393     case CRONET_NET_ERROR_CACHE_WRITE_FAILURE:
394       return "CRONET_NET_ERROR_CACHE_WRITE_FAILURE";
395     case CRONET_NET_ERROR_CACHE_OPERATION_NOT_SUPPORTED:
396       return "CRONET_NET_ERROR_CACHE_OPERATION_NOT_SUPPORTED";
397     case CRONET_NET_ERROR_CACHE_OPEN_FAILURE:
398       return "CRONET_NET_ERROR_CACHE_OPEN_FAILURE";
399     case CRONET_NET_ERROR_CACHE_CREATE_FAILURE:
400       return "CRONET_NET_ERROR_CACHE_CREATE_FAILURE";
401     case CRONET_NET_ERROR_CACHE_RACE:
402       return "CRONET_NET_ERROR_CACHE_RACE";
403     case CRONET_NET_ERROR_CACHE_CHECKSUM_READ_FAILURE:
404       return "CRONET_NET_ERROR_CACHE_CHECKSUM_READ_FAILURE";
405     case CRONET_NET_ERROR_CACHE_CHECKSUM_MISMATCH:
406       return "CRONET_NET_ERROR_CACHE_CHECKSUM_MISMATCH";
407     case CRONET_NET_ERROR_CACHE_LOCK_TIMEOUT:
408       return "CRONET_NET_ERROR_CACHE_LOCK_TIMEOUT";
409     case CRONET_NET_ERROR_CACHE_AUTH_FAILURE_AFTER_READ:
410       return "CRONET_NET_ERROR_CACHE_AUTH_FAILURE_AFTER_READ";
411     case CRONET_NET_ERROR_CACHE_ENTRY_NOT_SUITABLE:
412       return "CRONET_NET_ERROR_CACHE_ENTRY_NOT_SUITABLE";
413     case CRONET_NET_ERROR_CACHE_DOOM_FAILURE:
414       return "CRONET_NET_ERROR_CACHE_DOOM_FAILURE";
415     case CRONET_NET_ERROR_CACHE_OPEN_OR_CREATE_FAILURE:
416       return "CRONET_NET_ERROR_CACHE_OPEN_OR_CREATE_FAILURE";
417     case CRONET_NET_ERROR_INSECURE_RESPONSE:
418       return "CRONET_NET_ERROR_INSECURE_RESPONSE";
419     case CRONET_NET_ERROR_NO_PRIVATE_KEY_FOR_CERT:
420       return "CRONET_NET_ERROR_NO_PRIVATE_KEY_FOR_CERT";
421     case CRONET_NET_ERROR_ADD_USER_CERT_FAILED:
422       return "CRONET_NET_ERROR_ADD_USER_CERT_FAILED";
423     case CRONET_NET_ERROR_INVALID_SIGNED_EXCHANGE:
424       return "CRONET_NET_ERROR_INVALID_SIGNED_EXCHANGE";
425     case CRONET_NET_ERROR_INVALID_WEB_BUNDLE:
426       return "CRONET_NET_ERROR_INVALID_WEB_BUNDLE";
427     case CRONET_NET_ERROR_TRUST_TOKEN_OPERATION_FAILED:
428       return "CRONET_NET_ERROR_TRUST_TOKEN_OPERATION_FAILED";
429     case CRONET_NET_ERROR_TRUST_TOKEN_OPERATION_CACHE_HIT:
430       return "CRONET_NET_ERROR_TRUST_TOKEN_OPERATION_CACHE_HIT";
431     case CRONET_NET_ERROR_FTP_FAILED:
432       return "CRONET_NET_ERROR_FTP_FAILED";
433     case CRONET_NET_ERROR_FTP_SERVICE_UNAVAILABLE:
434       return "CRONET_NET_ERROR_FTP_SERVICE_UNAVAILABLE";
435     case CRONET_NET_ERROR_FTP_TRANSFER_ABORTED:
436       return "CRONET_NET_ERROR_FTP_TRANSFER_ABORTED";
437     case CRONET_NET_ERROR_FTP_FILE_BUSY:
438       return "CRONET_NET_ERROR_FTP_FILE_BUSY";
439     case CRONET_NET_ERROR_FTP_SYNTAX_ERROR:
440       return "CRONET_NET_ERROR_FTP_SYNTAX_ERROR";
441     case CRONET_NET_ERROR_FTP_COMMAND_NOT_SUPPORTED:
442       return "CRONET_NET_ERROR_FTP_COMMAND_NOT_SUPPORTED";
443     case CRONET_NET_ERROR_FTP_BAD_COMMAND_SEQUENCE:
444       return "CRONET_NET_ERROR_FTP_BAD_COMMAND_SEQUENCE";
445     case CRONET_NET_ERROR_PKCS12_IMPORT_BAD_PASSWORD:
446       return "CRONET_NET_ERROR_PKCS12_IMPORT_BAD_PASSWORD";
447     case CRONET_NET_ERROR_PKCS12_IMPORT_FAILED:
448       return "CRONET_NET_ERROR_PKCS12_IMPORT_FAILED";
449     case CRONET_NET_ERROR_IMPORT_CA_CERT_NOT_CA:
450       return "CRONET_NET_ERROR_IMPORT_CA_CERT_NOT_CA";
451     case CRONET_NET_ERROR_IMPORT_CERT_ALREADY_EXISTS:
452       return "CRONET_NET_ERROR_IMPORT_CERT_ALREADY_EXISTS";
453     case CRONET_NET_ERROR_IMPORT_CA_CERT_FAILED:
454       return "CRONET_NET_ERROR_IMPORT_CA_CERT_FAILED";
455     case CRONET_NET_ERROR_IMPORT_SERVER_CERT_FAILED:
456       return "CRONET_NET_ERROR_IMPORT_SERVER_CERT_FAILED";
457     case CRONET_NET_ERROR_PKCS12_IMPORT_INVALID_MAC:
458       return "CRONET_NET_ERROR_PKCS12_IMPORT_INVALID_MAC";
459     case CRONET_NET_ERROR_PKCS12_IMPORT_INVALID_FILE:
460       return "CRONET_NET_ERROR_PKCS12_IMPORT_INVALID_FILE";
461     case CRONET_NET_ERROR_PKCS12_IMPORT_UNSUPPORTED:
462       return "CRONET_NET_ERROR_PKCS12_IMPORT_UNSUPPORTED";
463     case CRONET_NET_ERROR_KEY_GENERATION_FAILED:
464       return "CRONET_NET_ERROR_KEY_GENERATION_FAILED";
465     case CRONET_NET_ERROR_PRIVATE_KEY_EXPORT_FAILED:
466       return "CRONET_NET_ERROR_PRIVATE_KEY_EXPORT_FAILED";
467     case CRONET_NET_ERROR_SELF_SIGNED_CERT_GENERATION_FAILED:
468       return "CRONET_NET_ERROR_SELF_SIGNED_CERT_GENERATION_FAILED";
469     case CRONET_NET_ERROR_CERT_DATABASE_CHANGED:
470       return "CRONET_NET_ERROR_CERT_DATABASE_CHANGED";
471     case CRONET_NET_ERROR_DNS_MALFORMED_RESPONSE:
472       return "CRONET_NET_ERROR_DNS_MALFORMED_RESPONSE";
473     case CRONET_NET_ERROR_DNS_SERVER_REQUIRES_TCP:
474       return "CRONET_NET_ERROR_DNS_SERVER_REQUIRES_TCP";
475     case CRONET_NET_ERROR_DNS_SERVER_FAILED:
476       return "CRONET_NET_ERROR_DNS_SERVER_FAILED";
477     case CRONET_NET_ERROR_DNS_TIMED_OUT:
478       return "CRONET_NET_ERROR_DNS_TIMED_OUT";
479     case CRONET_NET_ERROR_DNS_CACHE_MISS:
480       return "CRONET_NET_ERROR_DNS_CACHE_MISS";
481     case CRONET_NET_ERROR_DNS_SEARCH_EMPTY:
482       return "CRONET_NET_ERROR_DNS_SEARCH_EMPTY";
483     case CRONET_NET_ERROR_DNS_SORT_ERROR:
484       return "CRONET_NET_ERROR_DNS_SORT_ERROR";
485     case CRONET_NET_ERROR_DNS_SECURE_RESOLVER_HOSTNAME_RESOLUTION_FAILED:
486       return "CRONET_NET_ERROR_DNS_SECURE_RESOLVER_HOSTNAME_RESOLUTION_FAILED";
487   }
488   return "UNAVAILABLE.";
489 }
490 
cronet_net_error_to_grpc_error(cronet_net_error_code net_error)491 grpc_status_code cronet_net_error_to_grpc_error(
492     cronet_net_error_code net_error) {
493   switch (net_error) {
494     case OK:
495       return GRPC_STATUS_OK;
496     case CRONET_NET_ERROR_ABORTED:
497       return GRPC_STATUS_ABORTED;
498     case CRONET_NET_ERROR_ACCESS_DENIED:
499     case CRONET_NET_ERROR_NETWORK_ACCESS_DENIED:
500       return GRPC_STATUS_PERMISSION_DENIED;
501     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_NEEDED:
502     case CRONET_NET_ERROR_PROXY_AUTH_UNSUPPORTED:
503     case CRONET_NET_ERROR_BAD_SSL_CLIENT_AUTH_CERT:
504     case CRONET_NET_ERROR_PROXY_AUTH_REQUESTED:
505     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_PRIVATE_KEY_ACCESS_DENIED:
506     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_NO_PRIVATE_KEY:
507     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_SIGNATURE_FAILED:
508     case CRONET_NET_ERROR_CLIENT_AUTH_CERT_TYPE_UNSUPPORTED:
509     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_CERT_BAD_FORMAT:
510     case CRONET_NET_ERROR_SSL_CLIENT_AUTH_NO_COMMON_ALGORITHMS:
511     case CRONET_NET_ERROR_CERT_AUTHORITY_INVALID:
512     case CRONET_NET_ERROR_UNEXPECTED_PROXY_AUTH:
513     case CRONET_NET_ERROR_MALFORMED_IDENTITY:
514     case CRONET_NET_ERROR_INVALID_AUTH_CREDENTIALS:
515     case CRONET_NET_ERROR_UNSUPPORTED_AUTH_SCHEME:
516     case CRONET_NET_ERROR_MISSING_AUTH_CREDENTIALS:
517       return GRPC_STATUS_UNAUTHENTICATED;
518     default:
519       return GRPC_STATUS_UNAVAILABLE;
520   }
521 }
522