blob: e82e7cb2eabf4b3239344d7da673422ac7aa5fcc [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
bnc65322142021-04-07 14:24:11 -07005#include "quic/core/quic_error_codes.h"
6
renjietang360aa082020-04-24 13:53:56 -07007#include <cstdint>
vasilvv0a09b8f2020-04-27 08:08:55 -07008#include <cstring>
9
vasilvv9edb31e2020-12-03 19:32:58 -080010#include "absl/strings/str_cat.h"
bnc0ed49eb2020-04-09 12:06:21 -070011#include "third_party/boringssl/src/include/openssl/ssl.h"
QUICHE team5be974e2020-12-29 18:35:24 -050012#include "quic/platform/api/quic_logging.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050013
14namespace quic {
15
16#define RETURN_STRING_LITERAL(x) \
17 case x: \
18 return #x;
19
20const char* QuicRstStreamErrorCodeToString(QuicRstStreamErrorCode error) {
21 switch (error) {
22 RETURN_STRING_LITERAL(QUIC_STREAM_NO_ERROR);
QUICHE teama6ef0a62019-03-07 20:34:33 -050023 RETURN_STRING_LITERAL(QUIC_ERROR_PROCESSING_STREAM);
24 RETURN_STRING_LITERAL(QUIC_MULTIPLE_TERMINATION_OFFSETS);
25 RETURN_STRING_LITERAL(QUIC_BAD_APPLICATION_PAYLOAD);
bnccb0ffbc2020-04-13 10:53:11 -070026 RETURN_STRING_LITERAL(QUIC_STREAM_CONNECTION_ERROR);
QUICHE teama6ef0a62019-03-07 20:34:33 -050027 RETURN_STRING_LITERAL(QUIC_STREAM_PEER_GOING_AWAY);
28 RETURN_STRING_LITERAL(QUIC_STREAM_CANCELLED);
29 RETURN_STRING_LITERAL(QUIC_RST_ACKNOWLEDGEMENT);
30 RETURN_STRING_LITERAL(QUIC_REFUSED_STREAM);
QUICHE teama6ef0a62019-03-07 20:34:33 -050031 RETURN_STRING_LITERAL(QUIC_INVALID_PROMISE_URL);
32 RETURN_STRING_LITERAL(QUIC_UNAUTHORIZED_PROMISE_URL);
33 RETURN_STRING_LITERAL(QUIC_DUPLICATE_PROMISE_URL);
34 RETURN_STRING_LITERAL(QUIC_PROMISE_VARY_MISMATCH);
35 RETURN_STRING_LITERAL(QUIC_INVALID_PROMISE_METHOD);
36 RETURN_STRING_LITERAL(QUIC_PUSH_STREAM_TIMED_OUT);
37 RETURN_STRING_LITERAL(QUIC_HEADERS_TOO_LARGE);
38 RETURN_STRING_LITERAL(QUIC_STREAM_TTL_EXPIRED);
bnccb0ffbc2020-04-13 10:53:11 -070039 RETURN_STRING_LITERAL(QUIC_DATA_AFTER_CLOSE_OFFSET);
40 RETURN_STRING_LITERAL(QUIC_STREAM_GENERAL_PROTOCOL_ERROR);
41 RETURN_STRING_LITERAL(QUIC_STREAM_INTERNAL_ERROR);
42 RETURN_STRING_LITERAL(QUIC_STREAM_STREAM_CREATION_ERROR);
43 RETURN_STRING_LITERAL(QUIC_STREAM_CLOSED_CRITICAL_STREAM);
44 RETURN_STRING_LITERAL(QUIC_STREAM_FRAME_UNEXPECTED);
45 RETURN_STRING_LITERAL(QUIC_STREAM_FRAME_ERROR);
46 RETURN_STRING_LITERAL(QUIC_STREAM_EXCESSIVE_LOAD);
47 RETURN_STRING_LITERAL(QUIC_STREAM_ID_ERROR);
48 RETURN_STRING_LITERAL(QUIC_STREAM_SETTINGS_ERROR);
49 RETURN_STRING_LITERAL(QUIC_STREAM_MISSING_SETTINGS);
50 RETURN_STRING_LITERAL(QUIC_STREAM_REQUEST_REJECTED);
51 RETURN_STRING_LITERAL(QUIC_STREAM_REQUEST_INCOMPLETE);
52 RETURN_STRING_LITERAL(QUIC_STREAM_CONNECT_ERROR);
53 RETURN_STRING_LITERAL(QUIC_STREAM_VERSION_FALLBACK);
54 RETURN_STRING_LITERAL(QUIC_STREAM_DECOMPRESSION_FAILED);
55 RETURN_STRING_LITERAL(QUIC_STREAM_ENCODER_STREAM_ERROR);
56 RETURN_STRING_LITERAL(QUIC_STREAM_DECODER_STREAM_ERROR);
bnc12add152020-04-20 08:05:29 -070057 RETURN_STRING_LITERAL(QUIC_STREAM_UNKNOWN_APPLICATION_ERROR_CODE);
vasilvv316f3762021-03-31 13:49:30 -070058 RETURN_STRING_LITERAL(QUIC_STREAM_WEBTRANSPORT_SESSION_GONE);
59 RETURN_STRING_LITERAL(
60 QUIC_STREAM_WEBTRANSPORT_BUFFERED_STREAMS_LIMIT_EXCEEDED);
bnccb0ffbc2020-04-13 10:53:11 -070061 RETURN_STRING_LITERAL(QUIC_STREAM_LAST_ERROR);
QUICHE teama6ef0a62019-03-07 20:34:33 -050062 }
63 // Return a default value so that we return this when |error| doesn't match
64 // any of the QuicRstStreamErrorCodes. This can happen when the RstStream
65 // frame sent by the peer (attacker) has invalid error code.
66 return "INVALID_RST_STREAM_ERROR_CODE";
67}
68
69const char* QuicErrorCodeToString(QuicErrorCode error) {
70 switch (error) {
71 RETURN_STRING_LITERAL(QUIC_NO_ERROR);
72 RETURN_STRING_LITERAL(QUIC_INTERNAL_ERROR);
73 RETURN_STRING_LITERAL(QUIC_STREAM_DATA_AFTER_TERMINATION);
74 RETURN_STRING_LITERAL(QUIC_INVALID_PACKET_HEADER);
75 RETURN_STRING_LITERAL(QUIC_INVALID_FRAME_DATA);
76 RETURN_STRING_LITERAL(QUIC_MISSING_PAYLOAD);
77 RETURN_STRING_LITERAL(QUIC_INVALID_FEC_DATA);
78 RETURN_STRING_LITERAL(QUIC_INVALID_STREAM_DATA);
79 RETURN_STRING_LITERAL(QUIC_OVERLAPPING_STREAM_DATA);
80 RETURN_STRING_LITERAL(QUIC_UNENCRYPTED_STREAM_DATA);
81 RETURN_STRING_LITERAL(QUIC_INVALID_RST_STREAM_DATA);
82 RETURN_STRING_LITERAL(QUIC_INVALID_CONNECTION_CLOSE_DATA);
83 RETURN_STRING_LITERAL(QUIC_INVALID_GOAWAY_DATA);
84 RETURN_STRING_LITERAL(QUIC_INVALID_WINDOW_UPDATE_DATA);
85 RETURN_STRING_LITERAL(QUIC_INVALID_BLOCKED_DATA);
86 RETURN_STRING_LITERAL(QUIC_INVALID_STOP_WAITING_DATA);
87 RETURN_STRING_LITERAL(QUIC_INVALID_PATH_CLOSE_DATA);
88 RETURN_STRING_LITERAL(QUIC_INVALID_ACK_DATA);
89 RETURN_STRING_LITERAL(QUIC_INVALID_VERSION_NEGOTIATION_PACKET);
90 RETURN_STRING_LITERAL(QUIC_INVALID_PUBLIC_RST_PACKET);
91 RETURN_STRING_LITERAL(QUIC_DECRYPTION_FAILURE);
92 RETURN_STRING_LITERAL(QUIC_ENCRYPTION_FAILURE);
93 RETURN_STRING_LITERAL(QUIC_PACKET_TOO_LARGE);
94 RETURN_STRING_LITERAL(QUIC_PEER_GOING_AWAY);
95 RETURN_STRING_LITERAL(QUIC_HANDSHAKE_FAILED);
96 RETURN_STRING_LITERAL(QUIC_CRYPTO_TAGS_OUT_OF_ORDER);
97 RETURN_STRING_LITERAL(QUIC_CRYPTO_TOO_MANY_ENTRIES);
98 RETURN_STRING_LITERAL(QUIC_CRYPTO_TOO_MANY_REJECTS);
99 RETURN_STRING_LITERAL(QUIC_CRYPTO_INVALID_VALUE_LENGTH)
100 RETURN_STRING_LITERAL(QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE);
101 RETURN_STRING_LITERAL(QUIC_CRYPTO_INTERNAL_ERROR);
102 RETURN_STRING_LITERAL(QUIC_CRYPTO_VERSION_NOT_SUPPORTED);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500103 RETURN_STRING_LITERAL(QUIC_CRYPTO_NO_SUPPORT);
104 RETURN_STRING_LITERAL(QUIC_INVALID_CRYPTO_MESSAGE_TYPE);
105 RETURN_STRING_LITERAL(QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER);
106 RETURN_STRING_LITERAL(QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND);
107 RETURN_STRING_LITERAL(QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP);
108 RETURN_STRING_LITERAL(QUIC_CRYPTO_MESSAGE_INDEX_NOT_FOUND);
109 RETURN_STRING_LITERAL(QUIC_UNSUPPORTED_PROOF_DEMAND);
110 RETURN_STRING_LITERAL(QUIC_INVALID_STREAM_ID);
111 RETURN_STRING_LITERAL(QUIC_INVALID_PRIORITY);
112 RETURN_STRING_LITERAL(QUIC_TOO_MANY_OPEN_STREAMS);
113 RETURN_STRING_LITERAL(QUIC_PUBLIC_RESET);
114 RETURN_STRING_LITERAL(QUIC_INVALID_VERSION);
mattm73455ed2020-12-08 12:30:46 -0800115 RETURN_STRING_LITERAL(QUIC_INVALID_0RTT_PACKET_NUMBER_OUT_OF_ORDER);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500116 RETURN_STRING_LITERAL(QUIC_INVALID_HEADER_ID);
117 RETURN_STRING_LITERAL(QUIC_INVALID_NEGOTIATED_VALUE);
118 RETURN_STRING_LITERAL(QUIC_DECOMPRESSION_FAILURE);
119 RETURN_STRING_LITERAL(QUIC_NETWORK_IDLE_TIMEOUT);
120 RETURN_STRING_LITERAL(QUIC_HANDSHAKE_TIMEOUT);
121 RETURN_STRING_LITERAL(QUIC_ERROR_MIGRATING_ADDRESS);
122 RETURN_STRING_LITERAL(QUIC_ERROR_MIGRATING_PORT);
123 RETURN_STRING_LITERAL(QUIC_PACKET_WRITE_ERROR);
124 RETURN_STRING_LITERAL(QUIC_PACKET_READ_ERROR);
125 RETURN_STRING_LITERAL(QUIC_EMPTY_STREAM_FRAME_NO_FIN);
126 RETURN_STRING_LITERAL(QUIC_INVALID_HEADERS_STREAM_DATA);
127 RETURN_STRING_LITERAL(QUIC_HEADERS_STREAM_DATA_DECOMPRESS_FAILURE);
128 RETURN_STRING_LITERAL(QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA);
129 RETURN_STRING_LITERAL(QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA);
130 RETURN_STRING_LITERAL(QUIC_FLOW_CONTROL_INVALID_WINDOW);
131 RETURN_STRING_LITERAL(QUIC_CONNECTION_IP_POOLED);
132 RETURN_STRING_LITERAL(QUIC_PROOF_INVALID);
133 RETURN_STRING_LITERAL(QUIC_CRYPTO_DUPLICATE_TAG);
134 RETURN_STRING_LITERAL(QUIC_CRYPTO_ENCRYPTION_LEVEL_INCORRECT);
135 RETURN_STRING_LITERAL(QUIC_CRYPTO_SERVER_CONFIG_EXPIRED);
136 RETURN_STRING_LITERAL(QUIC_INVALID_CHANNEL_ID_SIGNATURE);
137 RETURN_STRING_LITERAL(QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED);
138 RETURN_STRING_LITERAL(QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO);
139 RETURN_STRING_LITERAL(QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE);
140 RETURN_STRING_LITERAL(QUIC_VERSION_NEGOTIATION_MISMATCH);
141 RETURN_STRING_LITERAL(QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS);
142 RETURN_STRING_LITERAL(QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS);
143 RETURN_STRING_LITERAL(QUIC_CONNECTION_CANCELLED);
144 RETURN_STRING_LITERAL(QUIC_BAD_PACKET_LOSS_RATE);
145 RETURN_STRING_LITERAL(QUIC_PUBLIC_RESETS_POST_HANDSHAKE);
146 RETURN_STRING_LITERAL(QUIC_FAILED_TO_SERIALIZE_PACKET);
147 RETURN_STRING_LITERAL(QUIC_TOO_MANY_AVAILABLE_STREAMS);
148 RETURN_STRING_LITERAL(QUIC_UNENCRYPTED_FEC_DATA);
149 RETURN_STRING_LITERAL(QUIC_BAD_MULTIPATH_FLAG);
150 RETURN_STRING_LITERAL(QUIC_IP_ADDRESS_CHANGED);
151 RETURN_STRING_LITERAL(QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS);
152 RETURN_STRING_LITERAL(QUIC_CONNECTION_MIGRATION_TOO_MANY_CHANGES);
153 RETURN_STRING_LITERAL(QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK);
154 RETURN_STRING_LITERAL(QUIC_CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM);
155 RETURN_STRING_LITERAL(QUIC_TOO_MANY_RTOS);
156 RETURN_STRING_LITERAL(QUIC_ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA);
157 RETURN_STRING_LITERAL(QUIC_MAYBE_CORRUPTED_MEMORY);
158 RETURN_STRING_LITERAL(QUIC_CRYPTO_CHLO_TOO_LARGE);
159 RETURN_STRING_LITERAL(QUIC_MULTIPATH_PATH_DOES_NOT_EXIST);
160 RETURN_STRING_LITERAL(QUIC_MULTIPATH_PATH_NOT_ACTIVE);
161 RETURN_STRING_LITERAL(QUIC_TOO_MANY_STREAM_DATA_INTERVALS);
162 RETURN_STRING_LITERAL(QUIC_STREAM_SEQUENCER_INVALID_STATE);
163 RETURN_STRING_LITERAL(QUIC_TOO_MANY_SESSIONS_ON_SERVER);
164 RETURN_STRING_LITERAL(QUIC_STREAM_LENGTH_OVERFLOW);
165 RETURN_STRING_LITERAL(QUIC_CONNECTION_MIGRATION_DISABLED_BY_CONFIG);
166 RETURN_STRING_LITERAL(QUIC_CONNECTION_MIGRATION_INTERNAL_ERROR);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500167 RETURN_STRING_LITERAL(QUIC_INVALID_MAX_DATA_FRAME_DATA);
168 RETURN_STRING_LITERAL(QUIC_INVALID_MAX_STREAM_DATA_FRAME_DATA);
169 RETURN_STRING_LITERAL(QUIC_INVALID_STREAM_BLOCKED_DATA);
fkastenholz3c4eabf2019-04-22 07:49:59 -0700170 RETURN_STRING_LITERAL(QUIC_MAX_STREAMS_DATA);
171 RETURN_STRING_LITERAL(QUIC_STREAMS_BLOCKED_DATA);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500172 RETURN_STRING_LITERAL(QUIC_INVALID_NEW_CONNECTION_ID_DATA);
173 RETURN_STRING_LITERAL(QUIC_INVALID_RETIRE_CONNECTION_ID_DATA);
haoyuewang47d67c32021-01-21 07:58:52 -0800174 RETURN_STRING_LITERAL(QUIC_CONNECTION_ID_LIMIT_ERROR);
haoyuewangd0b353c2021-01-26 07:17:20 -0800175 RETURN_STRING_LITERAL(QUIC_TOO_MANY_CONNECTION_ID_WAITING_TO_RETIRE);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500176 RETURN_STRING_LITERAL(QUIC_INVALID_STOP_SENDING_FRAME_DATA);
177 RETURN_STRING_LITERAL(QUIC_INVALID_PATH_CHALLENGE_DATA);
178 RETURN_STRING_LITERAL(QUIC_INVALID_PATH_RESPONSE_DATA);
179 RETURN_STRING_LITERAL(QUIC_CONNECTION_MIGRATION_HANDSHAKE_UNCONFIRMED);
QUICHE team5be974e2020-12-29 18:35:24 -0500180 RETURN_STRING_LITERAL(QUIC_PEER_PORT_CHANGE_HANDSHAKE_UNCONFIRMED);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500181 RETURN_STRING_LITERAL(QUIC_INVALID_MESSAGE_DATA);
182 RETURN_STRING_LITERAL(IETF_QUIC_PROTOCOL_VIOLATION);
183 RETURN_STRING_LITERAL(QUIC_INVALID_NEW_TOKEN);
184 RETURN_STRING_LITERAL(QUIC_DATA_RECEIVED_ON_WRITE_UNIDIRECTIONAL_STREAM);
185 RETURN_STRING_LITERAL(QUIC_TRY_TO_WRITE_DATA_ON_READ_UNIDIRECTIONAL_STREAM);
fkastenholz3c4eabf2019-04-22 07:49:59 -0700186 RETURN_STRING_LITERAL(QUIC_STREAMS_BLOCKED_ERROR);
187 RETURN_STRING_LITERAL(QUIC_MAX_STREAMS_ERROR);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500188 RETURN_STRING_LITERAL(QUIC_HTTP_DECODER_ERROR);
189 RETURN_STRING_LITERAL(QUIC_STALE_CONNECTION_CANCELLED);
fkastenholze9d71a82019-04-09 05:12:13 -0700190 RETURN_STRING_LITERAL(QUIC_IETF_GQUIC_ERROR_MISSING);
renjietang28c04b72019-07-01 15:08:09 -0700191 RETURN_STRING_LITERAL(
192 QUIC_WINDOW_UPDATE_RECEIVED_ON_READ_UNIDIRECTIONAL_STREAM);
fayang83d7e3e2019-07-31 14:45:19 -0700193 RETURN_STRING_LITERAL(QUIC_TOO_MANY_BUFFERED_CONTROL_FRAMES);
vasilvvefc6af82019-10-11 12:46:56 -0700194 RETURN_STRING_LITERAL(QUIC_TRANSPORT_INVALID_CLIENT_INDICATION);
bnc13753e62019-10-17 04:40:09 -0700195 RETURN_STRING_LITERAL(QUIC_QPACK_DECOMPRESSION_FAILED);
196 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_ERROR);
197 RETURN_STRING_LITERAL(QUIC_QPACK_DECODER_STREAM_ERROR);
bnc4e440102020-10-20 17:32:29 -0700198 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_INTEGER_TOO_LARGE);
199 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_STRING_LITERAL_TOO_LONG);
200 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_HUFFMAN_ENCODING_ERROR);
201 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_INVALID_STATIC_ENTRY);
202 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_ERROR_INSERTING_STATIC);
203 RETURN_STRING_LITERAL(
204 QUIC_QPACK_ENCODER_STREAM_INSERTION_INVALID_RELATIVE_INDEX);
205 RETURN_STRING_LITERAL(
206 QUIC_QPACK_ENCODER_STREAM_INSERTION_DYNAMIC_ENTRY_NOT_FOUND);
207 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_ERROR_INSERTING_DYNAMIC);
208 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_ERROR_INSERTING_LITERAL);
209 RETURN_STRING_LITERAL(
210 QUIC_QPACK_ENCODER_STREAM_DUPLICATE_INVALID_RELATIVE_INDEX);
211 RETURN_STRING_LITERAL(
212 QUIC_QPACK_ENCODER_STREAM_DUPLICATE_DYNAMIC_ENTRY_NOT_FOUND);
213 RETURN_STRING_LITERAL(QUIC_QPACK_ENCODER_STREAM_SET_DYNAMIC_TABLE_CAPACITY);
214 RETURN_STRING_LITERAL(QUIC_QPACK_DECODER_STREAM_INTEGER_TOO_LARGE);
215 RETURN_STRING_LITERAL(QUIC_QPACK_DECODER_STREAM_INVALID_ZERO_INCREMENT);
216 RETURN_STRING_LITERAL(QUIC_QPACK_DECODER_STREAM_INCREMENT_OVERFLOW);
217 RETURN_STRING_LITERAL(QUIC_QPACK_DECODER_STREAM_IMPOSSIBLE_INSERT_COUNT);
218 RETURN_STRING_LITERAL(QUIC_QPACK_DECODER_STREAM_INCORRECT_ACKNOWLEDGEMENT);
renjietang15afba32019-10-23 14:32:35 -0700219 RETURN_STRING_LITERAL(QUIC_STREAM_DATA_BEYOND_CLOSE_OFFSET);
220 RETURN_STRING_LITERAL(QUIC_STREAM_MULTIPLE_OFFSET);
bncdfabdfb2020-01-17 17:46:40 -0800221 RETURN_STRING_LITERAL(QUIC_HTTP_FRAME_TOO_LARGE);
222 RETURN_STRING_LITERAL(QUIC_HTTP_FRAME_ERROR);
223 RETURN_STRING_LITERAL(QUIC_HTTP_FRAME_UNEXPECTED_ON_SPDY_STREAM);
224 RETURN_STRING_LITERAL(QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM);
bnc3e8fe7c2020-03-10 17:44:58 -0700225 RETURN_STRING_LITERAL(QUIC_HTTP_INVALID_FRAME_SEQUENCE_ON_SPDY_STREAM);
226 RETURN_STRING_LITERAL(QUIC_HTTP_INVALID_FRAME_SEQUENCE_ON_CONTROL_STREAM);
bncec3602c2020-03-12 17:57:59 -0700227 RETURN_STRING_LITERAL(QUIC_HTTP_DUPLICATE_UNIDIRECTIONAL_STREAM);
228 RETURN_STRING_LITERAL(QUIC_HTTP_SERVER_INITIATED_BIDIRECTIONAL_STREAM);
229 RETURN_STRING_LITERAL(QUIC_HTTP_STREAM_WRONG_DIRECTION);
bnc09c1eda2020-03-13 04:52:38 -0700230 RETURN_STRING_LITERAL(QUIC_HTTP_CLOSED_CRITICAL_STREAM);
bncf72ef0b2020-04-02 06:59:32 -0700231 RETURN_STRING_LITERAL(QUIC_HTTP_MISSING_SETTINGS_FRAME);
232 RETURN_STRING_LITERAL(QUIC_HTTP_DUPLICATE_SETTING_IDENTIFIER);
bnc9a7a6732020-04-14 06:08:02 -0700233 RETURN_STRING_LITERAL(QUIC_HTTP_INVALID_MAX_PUSH_ID);
renjietang360aa082020-04-24 13:53:56 -0700234 RETURN_STRING_LITERAL(QUIC_HTTP_STREAM_LIMIT_TOO_LOW);
renjietangd7afab22020-06-19 16:30:00 -0700235 RETURN_STRING_LITERAL(QUIC_HTTP_ZERO_RTT_RESUMPTION_SETTINGS_MISMATCH);
236 RETURN_STRING_LITERAL(QUIC_HTTP_ZERO_RTT_REJECTION_SETTINGS_MISMATCH);
bncaf8e3302020-07-27 07:42:59 -0700237 RETURN_STRING_LITERAL(QUIC_HTTP_GOAWAY_INVALID_STREAM_ID);
238 RETURN_STRING_LITERAL(QUIC_HTTP_GOAWAY_ID_LARGER_THAN_PREVIOUS);
renjietang21fc64c2020-09-22 10:59:50 -0700239 RETURN_STRING_LITERAL(QUIC_HTTP_RECEIVE_SPDY_SETTING);
renjietang0c9148a2020-09-30 12:59:14 -0700240 RETURN_STRING_LITERAL(QUIC_HTTP_RECEIVE_SPDY_FRAME);
bnc77b46412020-02-21 08:09:09 -0800241 RETURN_STRING_LITERAL(QUIC_HPACK_INDEX_VARINT_ERROR);
242 RETURN_STRING_LITERAL(QUIC_HPACK_NAME_LENGTH_VARINT_ERROR);
243 RETURN_STRING_LITERAL(QUIC_HPACK_VALUE_LENGTH_VARINT_ERROR);
244 RETURN_STRING_LITERAL(QUIC_HPACK_NAME_TOO_LONG);
245 RETURN_STRING_LITERAL(QUIC_HPACK_VALUE_TOO_LONG);
246 RETURN_STRING_LITERAL(QUIC_HPACK_NAME_HUFFMAN_ERROR);
247 RETURN_STRING_LITERAL(QUIC_HPACK_VALUE_HUFFMAN_ERROR);
248 RETURN_STRING_LITERAL(QUIC_HPACK_MISSING_DYNAMIC_TABLE_SIZE_UPDATE);
249 RETURN_STRING_LITERAL(QUIC_HPACK_INVALID_INDEX);
250 RETURN_STRING_LITERAL(QUIC_HPACK_INVALID_NAME_INDEX);
251 RETURN_STRING_LITERAL(QUIC_HPACK_DYNAMIC_TABLE_SIZE_UPDATE_NOT_ALLOWED);
252 RETURN_STRING_LITERAL(
253 QUIC_HPACK_INITIAL_TABLE_SIZE_UPDATE_IS_ABOVE_LOW_WATER_MARK);
254 RETURN_STRING_LITERAL(
255 QUIC_HPACK_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING);
256 RETURN_STRING_LITERAL(QUIC_HPACK_TRUNCATED_BLOCK);
257 RETURN_STRING_LITERAL(QUIC_HPACK_FRAGMENT_TOO_LONG);
258 RETURN_STRING_LITERAL(QUIC_HPACK_COMPRESSED_HEADER_SIZE_EXCEEDS_LIMIT);
renjietanga5a2ca92020-06-15 13:19:36 -0700259 RETURN_STRING_LITERAL(QUIC_ZERO_RTT_UNRETRANSMITTABLE);
260 RETURN_STRING_LITERAL(QUIC_ZERO_RTT_REJECTION_LIMIT_REDUCED);
261 RETURN_STRING_LITERAL(QUIC_ZERO_RTT_RESUMPTION_LIMIT_REDUCED);
fayang8bff33c2020-08-06 07:37:22 -0700262 RETURN_STRING_LITERAL(QUIC_SILENT_IDLE_TIMEOUT);
fayangd01e9962020-09-24 11:29:31 -0700263 RETURN_STRING_LITERAL(QUIC_MISSING_WRITE_KEYS);
mattmd0744852020-10-16 14:42:01 -0700264 RETURN_STRING_LITERAL(QUIC_KEY_UPDATE_ERROR);
265 RETURN_STRING_LITERAL(QUIC_AEAD_LIMIT_REACHED);
bnc3913be72020-11-11 10:07:17 -0800266 RETURN_STRING_LITERAL(QUIC_MAX_AGE_TIMEOUT);
bnc53a96232020-12-21 08:49:50 -0800267 RETURN_STRING_LITERAL(QUIC_INVALID_PRIORITY_UPDATE);
mattm55006b02021-01-14 15:09:54 -0800268 RETURN_STRING_LITERAL(QUIC_TLS_BAD_CERTIFICATE);
269 RETURN_STRING_LITERAL(QUIC_TLS_UNSUPPORTED_CERTIFICATE);
270 RETURN_STRING_LITERAL(QUIC_TLS_CERTIFICATE_REVOKED);
271 RETURN_STRING_LITERAL(QUIC_TLS_CERTIFICATE_EXPIRED);
272 RETURN_STRING_LITERAL(QUIC_TLS_CERTIFICATE_UNKNOWN);
273 RETURN_STRING_LITERAL(QUIC_TLS_INTERNAL_ERROR);
274 RETURN_STRING_LITERAL(QUIC_TLS_UNRECOGNIZED_NAME);
275 RETURN_STRING_LITERAL(QUIC_TLS_CERTIFICATE_REQUIRED);
QUICHE teama6ef0a62019-03-07 20:34:33 -0500276
277 RETURN_STRING_LITERAL(QUIC_LAST_ERROR);
278 // Intentionally have no default case, so we'll break the build
279 // if we add errors and don't put them here.
280 }
281 // Return a default value so that we return this when |error| doesn't match
282 // any of the QuicErrorCodes. This can happen when the ConnectionClose
283 // frame sent by the peer (attacker) has invalid error code.
284 return "INVALID_ERROR_CODE";
285}
286
bnc0ed49eb2020-04-09 12:06:21 -0700287std::string QuicIetfTransportErrorCodeString(QuicIetfTransportErrorCodes c) {
288 if (static_cast<uint64_t>(c) >= 0xff00u) {
vasilvv9edb31e2020-12-03 19:32:58 -0800289 return absl::StrCat("Private(", static_cast<uint64_t>(c), ")");
bnc0ed49eb2020-04-09 12:06:21 -0700290 }
291 if (c >= CRYPTO_ERROR_FIRST && c <= CRYPTO_ERROR_LAST) {
292 const int tls_error = static_cast<int>(c - CRYPTO_ERROR_FIRST);
293 const char* tls_error_description = SSL_alert_desc_string_long(tls_error);
294 if (strcmp("unknown", tls_error_description) != 0) {
vasilvv9edb31e2020-12-03 19:32:58 -0800295 return absl::StrCat("CRYPTO_ERROR(", tls_error_description, ")");
bnc0ed49eb2020-04-09 12:06:21 -0700296 }
vasilvv9edb31e2020-12-03 19:32:58 -0800297 return absl::StrCat("CRYPTO_ERROR(unknown(", tls_error, "))");
bnc0ed49eb2020-04-09 12:06:21 -0700298 }
299
300 switch (c) {
301 RETURN_STRING_LITERAL(NO_IETF_QUIC_ERROR);
302 RETURN_STRING_LITERAL(INTERNAL_ERROR);
303 RETURN_STRING_LITERAL(SERVER_BUSY_ERROR);
304 RETURN_STRING_LITERAL(FLOW_CONTROL_ERROR);
305 RETURN_STRING_LITERAL(STREAM_LIMIT_ERROR);
306 RETURN_STRING_LITERAL(STREAM_STATE_ERROR);
307 RETURN_STRING_LITERAL(FINAL_SIZE_ERROR);
308 RETURN_STRING_LITERAL(FRAME_ENCODING_ERROR);
309 RETURN_STRING_LITERAL(TRANSPORT_PARAMETER_ERROR);
310 RETURN_STRING_LITERAL(CONNECTION_ID_LIMIT_ERROR);
311 RETURN_STRING_LITERAL(PROTOCOL_VIOLATION);
312 RETURN_STRING_LITERAL(INVALID_TOKEN);
313 RETURN_STRING_LITERAL(CRYPTO_BUFFER_EXCEEDED);
mattmd0744852020-10-16 14:42:01 -0700314 RETURN_STRING_LITERAL(KEY_UPDATE_ERROR);
315 RETURN_STRING_LITERAL(AEAD_LIMIT_REACHED);
bnc0ed49eb2020-04-09 12:06:21 -0700316 // CRYPTO_ERROR is handled in the if before this switch, these cases do not
317 // change behavior and are only here to make the compiler happy.
318 case CRYPTO_ERROR_FIRST:
319 case CRYPTO_ERROR_LAST:
vasilvvf8035162021-02-01 14:49:14 -0800320 QUICHE_DCHECK(false) << "Unexpected error " << static_cast<uint64_t>(c);
bnc0ed49eb2020-04-09 12:06:21 -0700321 break;
322 }
323
vasilvv9edb31e2020-12-03 19:32:58 -0800324 return absl::StrCat("Unknown(", static_cast<uint64_t>(c), ")");
bnc0ed49eb2020-04-09 12:06:21 -0700325}
326
327std::ostream& operator<<(std::ostream& os,
328 const QuicIetfTransportErrorCodes& c) {
329 os << QuicIetfTransportErrorCodeString(c);
330 return os;
331}
332
333QuicErrorCodeToIetfMapping QuicErrorCodeToTransportErrorCode(
334 QuicErrorCode error) {
335 switch (error) {
336 case QUIC_NO_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700337 return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700338 case QUIC_INTERNAL_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700339 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700340 case QUIC_STREAM_DATA_AFTER_TERMINATION:
bnc0054cc62020-04-09 18:22:57 -0700341 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700342 case QUIC_INVALID_PACKET_HEADER:
bnc0054cc62020-04-09 18:22:57 -0700343 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700344 case QUIC_INVALID_FRAME_DATA:
bnc0054cc62020-04-09 18:22:57 -0700345 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700346 case QUIC_MISSING_PAYLOAD:
bnc0054cc62020-04-09 18:22:57 -0700347 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700348 case QUIC_INVALID_FEC_DATA:
bnc0054cc62020-04-09 18:22:57 -0700349 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700350 case QUIC_INVALID_STREAM_DATA:
bnc0054cc62020-04-09 18:22:57 -0700351 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700352 case QUIC_OVERLAPPING_STREAM_DATA:
bnc0054cc62020-04-09 18:22:57 -0700353 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700354 case QUIC_UNENCRYPTED_STREAM_DATA:
bnc0054cc62020-04-09 18:22:57 -0700355 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700356 case QUIC_ATTEMPT_TO_SEND_UNENCRYPTED_STREAM_DATA:
bnc0054cc62020-04-09 18:22:57 -0700357 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700358 case QUIC_MAYBE_CORRUPTED_MEMORY:
bnc0054cc62020-04-09 18:22:57 -0700359 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700360 case QUIC_UNENCRYPTED_FEC_DATA:
bnc0054cc62020-04-09 18:22:57 -0700361 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700362 case QUIC_INVALID_RST_STREAM_DATA:
bnc0054cc62020-04-09 18:22:57 -0700363 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700364 case QUIC_INVALID_CONNECTION_CLOSE_DATA:
bnc0054cc62020-04-09 18:22:57 -0700365 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700366 case QUIC_INVALID_GOAWAY_DATA:
bnc0054cc62020-04-09 18:22:57 -0700367 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700368 case QUIC_INVALID_WINDOW_UPDATE_DATA:
bnc0054cc62020-04-09 18:22:57 -0700369 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700370 case QUIC_INVALID_BLOCKED_DATA:
bnc0054cc62020-04-09 18:22:57 -0700371 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700372 case QUIC_INVALID_STOP_WAITING_DATA:
bnc0054cc62020-04-09 18:22:57 -0700373 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700374 case QUIC_INVALID_PATH_CLOSE_DATA:
bnc0054cc62020-04-09 18:22:57 -0700375 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700376 case QUIC_INVALID_ACK_DATA:
bnc0054cc62020-04-09 18:22:57 -0700377 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700378 case QUIC_INVALID_MESSAGE_DATA:
bnc0054cc62020-04-09 18:22:57 -0700379 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700380 case QUIC_INVALID_VERSION_NEGOTIATION_PACKET:
bnc0054cc62020-04-09 18:22:57 -0700381 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700382 case QUIC_INVALID_PUBLIC_RST_PACKET:
bnc0054cc62020-04-09 18:22:57 -0700383 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700384 case QUIC_DECRYPTION_FAILURE:
bnc0054cc62020-04-09 18:22:57 -0700385 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700386 case QUIC_ENCRYPTION_FAILURE:
bnc0054cc62020-04-09 18:22:57 -0700387 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700388 case QUIC_PACKET_TOO_LARGE:
bnc0054cc62020-04-09 18:22:57 -0700389 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700390 case QUIC_PEER_GOING_AWAY:
bnc0054cc62020-04-09 18:22:57 -0700391 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700392 case QUIC_INVALID_STREAM_ID:
bnc0054cc62020-04-09 18:22:57 -0700393 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700394 case QUIC_INVALID_PRIORITY:
bnc0054cc62020-04-09 18:22:57 -0700395 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700396 case QUIC_TOO_MANY_OPEN_STREAMS:
bnc0054cc62020-04-09 18:22:57 -0700397 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700398 case QUIC_TOO_MANY_AVAILABLE_STREAMS:
bnc0054cc62020-04-09 18:22:57 -0700399 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700400 case QUIC_PUBLIC_RESET:
bnc0054cc62020-04-09 18:22:57 -0700401 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700402 case QUIC_INVALID_VERSION:
bnc0054cc62020-04-09 18:22:57 -0700403 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
mattm73455ed2020-12-08 12:30:46 -0800404 case QUIC_INVALID_0RTT_PACKET_NUMBER_OUT_OF_ORDER:
405 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700406 case QUIC_INVALID_HEADER_ID:
bnc0054cc62020-04-09 18:22:57 -0700407 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700408 case QUIC_INVALID_NEGOTIATED_VALUE:
bnc0054cc62020-04-09 18:22:57 -0700409 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700410 case QUIC_DECOMPRESSION_FAILURE:
bnc0054cc62020-04-09 18:22:57 -0700411 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700412 case QUIC_NETWORK_IDLE_TIMEOUT:
bnc0054cc62020-04-09 18:22:57 -0700413 return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
fayang8bff33c2020-08-06 07:37:22 -0700414 case QUIC_SILENT_IDLE_TIMEOUT:
415 return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700416 case QUIC_HANDSHAKE_TIMEOUT:
bnc0054cc62020-04-09 18:22:57 -0700417 return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700418 case QUIC_ERROR_MIGRATING_ADDRESS:
bnc0054cc62020-04-09 18:22:57 -0700419 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700420 case QUIC_ERROR_MIGRATING_PORT:
bnc0054cc62020-04-09 18:22:57 -0700421 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700422 case QUIC_PACKET_WRITE_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700423 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700424 case QUIC_PACKET_READ_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700425 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700426 case QUIC_EMPTY_STREAM_FRAME_NO_FIN:
bnc0054cc62020-04-09 18:22:57 -0700427 return {true, static_cast<uint64_t>(FRAME_ENCODING_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700428 case QUIC_INVALID_HEADERS_STREAM_DATA:
bnc0054cc62020-04-09 18:22:57 -0700429 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700430 case QUIC_HEADERS_STREAM_DATA_DECOMPRESS_FAILURE:
bnc0054cc62020-04-09 18:22:57 -0700431 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700432 case QUIC_FLOW_CONTROL_RECEIVED_TOO_MUCH_DATA:
bnc0054cc62020-04-09 18:22:57 -0700433 return {true, static_cast<uint64_t>(FLOW_CONTROL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700434 case QUIC_FLOW_CONTROL_SENT_TOO_MUCH_DATA:
bnc0054cc62020-04-09 18:22:57 -0700435 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700436 case QUIC_FLOW_CONTROL_INVALID_WINDOW:
bnc0054cc62020-04-09 18:22:57 -0700437 return {true, static_cast<uint64_t>(FLOW_CONTROL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700438 case QUIC_CONNECTION_IP_POOLED:
bnc0054cc62020-04-09 18:22:57 -0700439 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700440 case QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS:
bnc0054cc62020-04-09 18:22:57 -0700441 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700442 case QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS:
bnc0054cc62020-04-09 18:22:57 -0700443 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700444 case QUIC_CONNECTION_CANCELLED:
bnc0054cc62020-04-09 18:22:57 -0700445 return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700446 case QUIC_BAD_PACKET_LOSS_RATE:
bnc0054cc62020-04-09 18:22:57 -0700447 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700448 case QUIC_PUBLIC_RESETS_POST_HANDSHAKE:
bnc0054cc62020-04-09 18:22:57 -0700449 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700450 case QUIC_FAILED_TO_SERIALIZE_PACKET:
bnc0054cc62020-04-09 18:22:57 -0700451 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700452 case QUIC_TOO_MANY_RTOS:
bnc0054cc62020-04-09 18:22:57 -0700453 return {true, static_cast<uint64_t>(NO_IETF_QUIC_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700454 case QUIC_HANDSHAKE_FAILED:
bnc0054cc62020-04-09 18:22:57 -0700455 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700456 case QUIC_CRYPTO_TAGS_OUT_OF_ORDER:
bnc0054cc62020-04-09 18:22:57 -0700457 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700458 case QUIC_CRYPTO_TOO_MANY_ENTRIES:
bnc0054cc62020-04-09 18:22:57 -0700459 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700460 case QUIC_CRYPTO_INVALID_VALUE_LENGTH:
bnc0054cc62020-04-09 18:22:57 -0700461 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700462 case QUIC_CRYPTO_MESSAGE_AFTER_HANDSHAKE_COMPLETE:
bnc0054cc62020-04-09 18:22:57 -0700463 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700464 case QUIC_INVALID_CRYPTO_MESSAGE_TYPE:
bnc0054cc62020-04-09 18:22:57 -0700465 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700466 case QUIC_INVALID_CRYPTO_MESSAGE_PARAMETER:
bnc0054cc62020-04-09 18:22:57 -0700467 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700468 case QUIC_INVALID_CHANNEL_ID_SIGNATURE:
bnc0054cc62020-04-09 18:22:57 -0700469 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700470 case QUIC_CRYPTO_MESSAGE_PARAMETER_NOT_FOUND:
bnc0054cc62020-04-09 18:22:57 -0700471 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700472 case QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP:
bnc0054cc62020-04-09 18:22:57 -0700473 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700474 case QUIC_CRYPTO_MESSAGE_INDEX_NOT_FOUND:
bnc0054cc62020-04-09 18:22:57 -0700475 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700476 case QUIC_UNSUPPORTED_PROOF_DEMAND:
bnc0054cc62020-04-09 18:22:57 -0700477 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700478 case QUIC_CRYPTO_INTERNAL_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700479 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700480 case QUIC_CRYPTO_VERSION_NOT_SUPPORTED:
bnc0054cc62020-04-09 18:22:57 -0700481 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700482 case QUIC_CRYPTO_NO_SUPPORT:
bnc0054cc62020-04-09 18:22:57 -0700483 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700484 case QUIC_CRYPTO_TOO_MANY_REJECTS:
bnc0054cc62020-04-09 18:22:57 -0700485 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700486 case QUIC_PROOF_INVALID:
bnc0054cc62020-04-09 18:22:57 -0700487 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700488 case QUIC_CRYPTO_DUPLICATE_TAG:
bnc0054cc62020-04-09 18:22:57 -0700489 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700490 case QUIC_CRYPTO_ENCRYPTION_LEVEL_INCORRECT:
bnc0054cc62020-04-09 18:22:57 -0700491 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700492 case QUIC_CRYPTO_SERVER_CONFIG_EXPIRED:
bnc0054cc62020-04-09 18:22:57 -0700493 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700494 case QUIC_CRYPTO_SYMMETRIC_KEY_SETUP_FAILED:
bnc0054cc62020-04-09 18:22:57 -0700495 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700496 case QUIC_CRYPTO_MESSAGE_WHILE_VALIDATING_CLIENT_HELLO:
bnc0054cc62020-04-09 18:22:57 -0700497 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700498 case QUIC_CRYPTO_UPDATE_BEFORE_HANDSHAKE_COMPLETE:
bnc0054cc62020-04-09 18:22:57 -0700499 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700500 case QUIC_CRYPTO_CHLO_TOO_LARGE:
bnc0054cc62020-04-09 18:22:57 -0700501 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700502 case QUIC_VERSION_NEGOTIATION_MISMATCH:
bnc0054cc62020-04-09 18:22:57 -0700503 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700504 case QUIC_BAD_MULTIPATH_FLAG:
bnc0054cc62020-04-09 18:22:57 -0700505 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700506 case QUIC_MULTIPATH_PATH_DOES_NOT_EXIST:
bnc0054cc62020-04-09 18:22:57 -0700507 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700508 case QUIC_MULTIPATH_PATH_NOT_ACTIVE:
bnc0054cc62020-04-09 18:22:57 -0700509 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700510 case QUIC_IP_ADDRESS_CHANGED:
bnc0054cc62020-04-09 18:22:57 -0700511 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700512 case QUIC_CONNECTION_MIGRATION_NO_MIGRATABLE_STREAMS:
bnc0054cc62020-04-09 18:22:57 -0700513 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700514 case QUIC_CONNECTION_MIGRATION_TOO_MANY_CHANGES:
bnc0054cc62020-04-09 18:22:57 -0700515 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700516 case QUIC_CONNECTION_MIGRATION_NO_NEW_NETWORK:
bnc0054cc62020-04-09 18:22:57 -0700517 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700518 case QUIC_CONNECTION_MIGRATION_NON_MIGRATABLE_STREAM:
bnc0054cc62020-04-09 18:22:57 -0700519 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700520 case QUIC_CONNECTION_MIGRATION_DISABLED_BY_CONFIG:
bnc0054cc62020-04-09 18:22:57 -0700521 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700522 case QUIC_CONNECTION_MIGRATION_INTERNAL_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700523 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700524 case QUIC_CONNECTION_MIGRATION_HANDSHAKE_UNCONFIRMED:
bnc0054cc62020-04-09 18:22:57 -0700525 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
QUICHE team5be974e2020-12-29 18:35:24 -0500526 case QUIC_PEER_PORT_CHANGE_HANDSHAKE_UNCONFIRMED:
527 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700528 case QUIC_TOO_MANY_STREAM_DATA_INTERVALS:
bnc0054cc62020-04-09 18:22:57 -0700529 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700530 case QUIC_STREAM_SEQUENCER_INVALID_STATE:
bnc0054cc62020-04-09 18:22:57 -0700531 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700532 case QUIC_TOO_MANY_SESSIONS_ON_SERVER:
bnc0054cc62020-04-09 18:22:57 -0700533 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700534 case QUIC_STREAM_LENGTH_OVERFLOW:
bnc0054cc62020-04-09 18:22:57 -0700535 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700536 case QUIC_INVALID_MAX_DATA_FRAME_DATA:
bnc0054cc62020-04-09 18:22:57 -0700537 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700538 case QUIC_INVALID_MAX_STREAM_DATA_FRAME_DATA:
bnc0054cc62020-04-09 18:22:57 -0700539 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700540 case QUIC_MAX_STREAMS_DATA:
bnc0054cc62020-04-09 18:22:57 -0700541 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700542 case QUIC_STREAMS_BLOCKED_DATA:
bnc0054cc62020-04-09 18:22:57 -0700543 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700544 case QUIC_INVALID_STREAM_BLOCKED_DATA:
bnc0054cc62020-04-09 18:22:57 -0700545 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700546 case QUIC_INVALID_NEW_CONNECTION_ID_DATA:
bnc0054cc62020-04-09 18:22:57 -0700547 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700548 case QUIC_INVALID_STOP_SENDING_FRAME_DATA:
bnc0054cc62020-04-09 18:22:57 -0700549 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700550 case QUIC_INVALID_PATH_CHALLENGE_DATA:
bnc0054cc62020-04-09 18:22:57 -0700551 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700552 case QUIC_INVALID_PATH_RESPONSE_DATA:
bnc0054cc62020-04-09 18:22:57 -0700553 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700554 case IETF_QUIC_PROTOCOL_VIOLATION:
bnc0054cc62020-04-09 18:22:57 -0700555 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700556 case QUIC_INVALID_NEW_TOKEN:
bnc0054cc62020-04-09 18:22:57 -0700557 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700558 case QUIC_DATA_RECEIVED_ON_WRITE_UNIDIRECTIONAL_STREAM:
bnc0054cc62020-04-09 18:22:57 -0700559 return {true, static_cast<uint64_t>(STREAM_STATE_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700560 case QUIC_TRY_TO_WRITE_DATA_ON_READ_UNIDIRECTIONAL_STREAM:
bnc0054cc62020-04-09 18:22:57 -0700561 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700562 case QUIC_INVALID_RETIRE_CONNECTION_ID_DATA:
bnc0054cc62020-04-09 18:22:57 -0700563 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700564 case QUIC_STREAMS_BLOCKED_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700565 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700566 case QUIC_MAX_STREAMS_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700567 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700568 case QUIC_HTTP_DECODER_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700569 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700570 case QUIC_STALE_CONNECTION_CANCELLED:
bnc0054cc62020-04-09 18:22:57 -0700571 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700572 case QUIC_IETF_GQUIC_ERROR_MISSING:
bnc0054cc62020-04-09 18:22:57 -0700573 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700574 case QUIC_WINDOW_UPDATE_RECEIVED_ON_READ_UNIDIRECTIONAL_STREAM:
bnc0054cc62020-04-09 18:22:57 -0700575 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700576 case QUIC_TOO_MANY_BUFFERED_CONTROL_FRAMES:
bnc0054cc62020-04-09 18:22:57 -0700577 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700578 case QUIC_TRANSPORT_INVALID_CLIENT_INDICATION:
bnc0054cc62020-04-09 18:22:57 -0700579 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700580 case QUIC_QPACK_DECOMPRESSION_FAILED:
bnc0054cc62020-04-09 18:22:57 -0700581 return {false, static_cast<uint64_t>(
582 QuicHttpQpackErrorCode::DECOMPRESSION_FAILED)};
bnc0ed49eb2020-04-09 12:06:21 -0700583 case QUIC_QPACK_ENCODER_STREAM_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700584 return {false, static_cast<uint64_t>(
585 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700586 case QUIC_QPACK_DECODER_STREAM_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700587 return {false, static_cast<uint64_t>(
588 QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)};
bnc4e440102020-10-20 17:32:29 -0700589 case QUIC_QPACK_ENCODER_STREAM_INTEGER_TOO_LARGE:
590 return {false, static_cast<uint64_t>(
591 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
592 case QUIC_QPACK_ENCODER_STREAM_STRING_LITERAL_TOO_LONG:
593 return {false, static_cast<uint64_t>(
594 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
595 case QUIC_QPACK_ENCODER_STREAM_HUFFMAN_ENCODING_ERROR:
596 return {false, static_cast<uint64_t>(
597 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
598 case QUIC_QPACK_ENCODER_STREAM_INVALID_STATIC_ENTRY:
599 return {false, static_cast<uint64_t>(
600 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
601 case QUIC_QPACK_ENCODER_STREAM_ERROR_INSERTING_STATIC:
602 return {false, static_cast<uint64_t>(
603 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
604 case QUIC_QPACK_ENCODER_STREAM_INSERTION_INVALID_RELATIVE_INDEX:
605 return {false, static_cast<uint64_t>(
606 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
607 case QUIC_QPACK_ENCODER_STREAM_INSERTION_DYNAMIC_ENTRY_NOT_FOUND:
608 return {false, static_cast<uint64_t>(
609 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
610 case QUIC_QPACK_ENCODER_STREAM_ERROR_INSERTING_DYNAMIC:
611 return {false, static_cast<uint64_t>(
612 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
613 case QUIC_QPACK_ENCODER_STREAM_ERROR_INSERTING_LITERAL:
614 return {false, static_cast<uint64_t>(
615 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
616 case QUIC_QPACK_ENCODER_STREAM_DUPLICATE_INVALID_RELATIVE_INDEX:
617 return {false, static_cast<uint64_t>(
618 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
619 case QUIC_QPACK_ENCODER_STREAM_DUPLICATE_DYNAMIC_ENTRY_NOT_FOUND:
620 return {false, static_cast<uint64_t>(
621 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
622 case QUIC_QPACK_ENCODER_STREAM_SET_DYNAMIC_TABLE_CAPACITY:
623 return {false, static_cast<uint64_t>(
624 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR)};
625 case QUIC_QPACK_DECODER_STREAM_INTEGER_TOO_LARGE:
626 return {false, static_cast<uint64_t>(
627 QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)};
628 case QUIC_QPACK_DECODER_STREAM_INVALID_ZERO_INCREMENT:
629 return {false, static_cast<uint64_t>(
630 QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)};
631 case QUIC_QPACK_DECODER_STREAM_INCREMENT_OVERFLOW:
632 return {false, static_cast<uint64_t>(
633 QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)};
634 case QUIC_QPACK_DECODER_STREAM_IMPOSSIBLE_INSERT_COUNT:
635 return {false, static_cast<uint64_t>(
636 QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)};
637 case QUIC_QPACK_DECODER_STREAM_INCORRECT_ACKNOWLEDGEMENT:
638 return {false, static_cast<uint64_t>(
639 QuicHttpQpackErrorCode::DECODER_STREAM_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700640 case QUIC_STREAM_DATA_BEYOND_CLOSE_OFFSET:
bnc0054cc62020-04-09 18:22:57 -0700641 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700642 case QUIC_STREAM_MULTIPLE_OFFSET:
bnc0054cc62020-04-09 18:22:57 -0700643 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
bnc0ed49eb2020-04-09 12:06:21 -0700644 case QUIC_HTTP_FRAME_TOO_LARGE:
bnc0054cc62020-04-09 18:22:57 -0700645 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::EXCESSIVE_LOAD)};
bnc0ed49eb2020-04-09 12:06:21 -0700646 case QUIC_HTTP_FRAME_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700647 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700648 case QUIC_HTTP_FRAME_UNEXPECTED_ON_SPDY_STREAM:
649 return {false,
bnc0054cc62020-04-09 18:22:57 -0700650 static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
bnc0ed49eb2020-04-09 12:06:21 -0700651 case QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM:
652 return {false,
bnc0054cc62020-04-09 18:22:57 -0700653 static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
bnc0ed49eb2020-04-09 12:06:21 -0700654 case QUIC_HTTP_INVALID_FRAME_SEQUENCE_ON_SPDY_STREAM:
655 return {false,
bnc0054cc62020-04-09 18:22:57 -0700656 static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
bnc0ed49eb2020-04-09 12:06:21 -0700657 case QUIC_HTTP_INVALID_FRAME_SEQUENCE_ON_CONTROL_STREAM:
658 return {false,
bnc0054cc62020-04-09 18:22:57 -0700659 static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
bnc0ed49eb2020-04-09 12:06:21 -0700660 case QUIC_HTTP_DUPLICATE_UNIDIRECTIONAL_STREAM:
bnc0054cc62020-04-09 18:22:57 -0700661 return {false,
662 static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700663 case QUIC_HTTP_SERVER_INITIATED_BIDIRECTIONAL_STREAM:
bnc0054cc62020-04-09 18:22:57 -0700664 return {false,
665 static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700666 case QUIC_HTTP_STREAM_WRONG_DIRECTION:
bnc0054cc62020-04-09 18:22:57 -0700667 return {true, static_cast<uint64_t>(STREAM_STATE_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700668 case QUIC_HTTP_CLOSED_CRITICAL_STREAM:
bnc0054cc62020-04-09 18:22:57 -0700669 return {false, static_cast<uint64_t>(
670 QuicHttp3ErrorCode::CLOSED_CRITICAL_STREAM)};
bnc0ed49eb2020-04-09 12:06:21 -0700671 case QUIC_HTTP_MISSING_SETTINGS_FRAME:
672 return {false,
bnc0054cc62020-04-09 18:22:57 -0700673 static_cast<uint64_t>(QuicHttp3ErrorCode::MISSING_SETTINGS)};
bnc0ed49eb2020-04-09 12:06:21 -0700674 case QUIC_HTTP_DUPLICATE_SETTING_IDENTIFIER:
bnc0054cc62020-04-09 18:22:57 -0700675 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::SETTINGS_ERROR)};
bnc9a7a6732020-04-14 06:08:02 -0700676 case QUIC_HTTP_INVALID_MAX_PUSH_ID:
677 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::ID_ERROR)};
renjietang360aa082020-04-24 13:53:56 -0700678 case QUIC_HTTP_STREAM_LIMIT_TOO_LOW:
679 return {false, static_cast<uint64_t>(
680 QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR)};
renjietangd7afab22020-06-19 16:30:00 -0700681 case QUIC_HTTP_ZERO_RTT_RESUMPTION_SETTINGS_MISMATCH:
renjietangc0dc4ce2020-06-16 16:35:45 -0700682 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::SETTINGS_ERROR)};
renjietangd7afab22020-06-19 16:30:00 -0700683 case QUIC_HTTP_ZERO_RTT_REJECTION_SETTINGS_MISMATCH:
684 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bncaf8e3302020-07-27 07:42:59 -0700685 case QUIC_HTTP_GOAWAY_INVALID_STREAM_ID:
686 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::ID_ERROR)};
687 case QUIC_HTTP_GOAWAY_ID_LARGER_THAN_PREVIOUS:
688 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::ID_ERROR)};
renjietang21fc64c2020-09-22 10:59:50 -0700689 case QUIC_HTTP_RECEIVE_SPDY_SETTING:
690 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::SETTINGS_ERROR)};
renjietang0c9148a2020-09-30 12:59:14 -0700691 case QUIC_HTTP_RECEIVE_SPDY_FRAME:
692 return {false,
693 static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED)};
bnc0ed49eb2020-04-09 12:06:21 -0700694 case QUIC_HPACK_INDEX_VARINT_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700695 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700696 case QUIC_HPACK_NAME_LENGTH_VARINT_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700697 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700698 case QUIC_HPACK_VALUE_LENGTH_VARINT_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700699 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700700 case QUIC_HPACK_NAME_TOO_LONG:
bnc0054cc62020-04-09 18:22:57 -0700701 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700702 case QUIC_HPACK_VALUE_TOO_LONG:
bnc0054cc62020-04-09 18:22:57 -0700703 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700704 case QUIC_HPACK_NAME_HUFFMAN_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700705 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700706 case QUIC_HPACK_VALUE_HUFFMAN_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700707 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700708 case QUIC_HPACK_MISSING_DYNAMIC_TABLE_SIZE_UPDATE:
bnc0054cc62020-04-09 18:22:57 -0700709 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700710 case QUIC_HPACK_INVALID_INDEX:
bnc0054cc62020-04-09 18:22:57 -0700711 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700712 case QUIC_HPACK_INVALID_NAME_INDEX:
bnc0054cc62020-04-09 18:22:57 -0700713 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700714 case QUIC_HPACK_DYNAMIC_TABLE_SIZE_UPDATE_NOT_ALLOWED:
bnc0054cc62020-04-09 18:22:57 -0700715 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700716 case QUIC_HPACK_INITIAL_TABLE_SIZE_UPDATE_IS_ABOVE_LOW_WATER_MARK:
bnc0054cc62020-04-09 18:22:57 -0700717 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700718 case QUIC_HPACK_TABLE_SIZE_UPDATE_IS_ABOVE_ACKNOWLEDGED_SETTING:
bnc0054cc62020-04-09 18:22:57 -0700719 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700720 case QUIC_HPACK_TRUNCATED_BLOCK:
bnc0054cc62020-04-09 18:22:57 -0700721 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700722 case QUIC_HPACK_FRAGMENT_TOO_LONG:
bnc0054cc62020-04-09 18:22:57 -0700723 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700724 case QUIC_HPACK_COMPRESSED_HEADER_SIZE_EXCEEDS_LIMIT:
bnc0054cc62020-04-09 18:22:57 -0700725 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
renjietanga5a2ca92020-06-15 13:19:36 -0700726 case QUIC_ZERO_RTT_UNRETRANSMITTABLE:
727 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
728 case QUIC_ZERO_RTT_REJECTION_LIMIT_REDUCED:
729 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
730 case QUIC_ZERO_RTT_RESUMPTION_LIMIT_REDUCED:
731 return {true, static_cast<uint64_t>(PROTOCOL_VIOLATION)};
fayangd01e9962020-09-24 11:29:31 -0700732 case QUIC_MISSING_WRITE_KEYS:
733 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
mattmd0744852020-10-16 14:42:01 -0700734 case QUIC_KEY_UPDATE_ERROR:
735 return {true, static_cast<uint64_t>(KEY_UPDATE_ERROR)};
736 case QUIC_AEAD_LIMIT_REACHED:
737 return {true, static_cast<uint64_t>(AEAD_LIMIT_REACHED)};
bnc3913be72020-11-11 10:07:17 -0800738 case QUIC_MAX_AGE_TIMEOUT:
739 return {false, static_cast<uint64_t>(QuicHttp3ErrorCode::INTERNAL_ERROR)};
bnc53a96232020-12-21 08:49:50 -0800740 case QUIC_INVALID_PRIORITY_UPDATE:
741 return {false, static_cast<uint64_t>(
742 QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR)};
mattm55006b02021-01-14 15:09:54 -0800743 case QUIC_TLS_BAD_CERTIFICATE:
744 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
745 SSL_AD_BAD_CERTIFICATE)};
746 case QUIC_TLS_UNSUPPORTED_CERTIFICATE:
747 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
748 SSL_AD_UNSUPPORTED_CERTIFICATE)};
749 case QUIC_TLS_CERTIFICATE_REVOKED:
750 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
751 SSL_AD_CERTIFICATE_REVOKED)};
752 case QUIC_TLS_CERTIFICATE_EXPIRED:
753 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
754 SSL_AD_CERTIFICATE_EXPIRED)};
755 case QUIC_TLS_CERTIFICATE_UNKNOWN:
756 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
757 SSL_AD_CERTIFICATE_UNKNOWN)};
758 case QUIC_TLS_INTERNAL_ERROR:
759 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
760 SSL_AD_INTERNAL_ERROR)};
761 case QUIC_TLS_UNRECOGNIZED_NAME:
762 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
763 SSL_AD_UNRECOGNIZED_NAME)};
764 case QUIC_TLS_CERTIFICATE_REQUIRED:
765 return {true, static_cast<uint64_t>(CRYPTO_ERROR_FIRST +
766 SSL_AD_CERTIFICATE_REQUIRED)};
haoyuewang47d67c32021-01-21 07:58:52 -0800767 case QUIC_CONNECTION_ID_LIMIT_ERROR:
768 return {true, static_cast<uint64_t>(CONNECTION_ID_LIMIT_ERROR)};
haoyuewangd0b353c2021-01-26 07:17:20 -0800769 case QUIC_TOO_MANY_CONNECTION_ID_WAITING_TO_RETIRE:
770 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700771 case QUIC_LAST_ERROR:
bnc0054cc62020-04-09 18:22:57 -0700772 return {false, static_cast<uint64_t>(QUIC_LAST_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700773 }
bncefc38d42020-04-10 07:10:11 -0700774 // This function should not be called with unknown error code.
775 return {true, static_cast<uint64_t>(INTERNAL_ERROR)};
bnc0ed49eb2020-04-09 12:06:21 -0700776}
777
mattm55006b02021-01-14 15:09:54 -0800778QuicErrorCode TlsAlertToQuicErrorCode(uint8_t desc) {
779 switch (desc) {
780 case SSL_AD_BAD_CERTIFICATE:
781 return QUIC_TLS_BAD_CERTIFICATE;
782 case SSL_AD_UNSUPPORTED_CERTIFICATE:
783 return QUIC_TLS_UNSUPPORTED_CERTIFICATE;
784 case SSL_AD_CERTIFICATE_REVOKED:
785 return QUIC_TLS_CERTIFICATE_REVOKED;
786 case SSL_AD_CERTIFICATE_EXPIRED:
787 return QUIC_TLS_CERTIFICATE_EXPIRED;
788 case SSL_AD_CERTIFICATE_UNKNOWN:
789 return QUIC_TLS_CERTIFICATE_UNKNOWN;
790 case SSL_AD_INTERNAL_ERROR:
791 return QUIC_TLS_INTERNAL_ERROR;
792 case SSL_AD_UNRECOGNIZED_NAME:
793 return QUIC_TLS_UNRECOGNIZED_NAME;
794 case SSL_AD_CERTIFICATE_REQUIRED:
795 return QUIC_TLS_CERTIFICATE_REQUIRED;
796 default:
797 return QUIC_HANDSHAKE_FAILED;
798 }
799}
800
bnccb0ffbc2020-04-13 10:53:11 -0700801// Convert a QuicRstStreamErrorCode to an application error code to be used in
802// an IETF QUIC RESET_STREAM frame
803uint64_t RstStreamErrorCodeToIetfResetStreamErrorCode(
804 QuicRstStreamErrorCode rst_stream_error_code) {
805 switch (rst_stream_error_code) {
806 case QUIC_STREAM_NO_ERROR:
ianswett5abb89b2020-04-13 14:48:51 -0700807 return static_cast<uint64_t>(QuicHttp3ErrorCode::HTTP3_NO_ERROR);
bnccb0ffbc2020-04-13 10:53:11 -0700808 case QUIC_ERROR_PROCESSING_STREAM:
809 return static_cast<uint64_t>(QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR);
810 case QUIC_MULTIPLE_TERMINATION_OFFSETS:
811 return static_cast<uint64_t>(QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR);
812 case QUIC_BAD_APPLICATION_PAYLOAD:
813 return static_cast<uint64_t>(QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR);
814 case QUIC_STREAM_CONNECTION_ERROR:
815 return static_cast<uint64_t>(QuicHttp3ErrorCode::INTERNAL_ERROR);
816 case QUIC_STREAM_PEER_GOING_AWAY:
817 return static_cast<uint64_t>(QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR);
818 case QUIC_STREAM_CANCELLED:
819 return static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_CANCELLED);
820 case QUIC_RST_ACKNOWLEDGEMENT:
ianswett5abb89b2020-04-13 14:48:51 -0700821 return static_cast<uint64_t>(QuicHttp3ErrorCode::HTTP3_NO_ERROR);
bnccb0ffbc2020-04-13 10:53:11 -0700822 case QUIC_REFUSED_STREAM:
823 return static_cast<uint64_t>(QuicHttp3ErrorCode::ID_ERROR);
824 case QUIC_INVALID_PROMISE_URL:
825 return static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR);
826 case QUIC_UNAUTHORIZED_PROMISE_URL:
827 return static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR);
828 case QUIC_DUPLICATE_PROMISE_URL:
829 return static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR);
830 case QUIC_PROMISE_VARY_MISMATCH:
831 return static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_CANCELLED);
832 case QUIC_INVALID_PROMISE_METHOD:
833 return static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR);
834 case QUIC_PUSH_STREAM_TIMED_OUT:
835 return static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_CANCELLED);
836 case QUIC_HEADERS_TOO_LARGE:
837 return static_cast<uint64_t>(QuicHttp3ErrorCode::EXCESSIVE_LOAD);
838 case QUIC_STREAM_TTL_EXPIRED:
839 return static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_CANCELLED);
840 case QUIC_DATA_AFTER_CLOSE_OFFSET:
841 return static_cast<uint64_t>(QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR);
842 case QUIC_STREAM_GENERAL_PROTOCOL_ERROR:
843 return static_cast<uint64_t>(QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR);
844 case QUIC_STREAM_INTERNAL_ERROR:
845 return static_cast<uint64_t>(QuicHttp3ErrorCode::INTERNAL_ERROR);
846 case QUIC_STREAM_STREAM_CREATION_ERROR:
847 return static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR);
848 case QUIC_STREAM_CLOSED_CRITICAL_STREAM:
849 return static_cast<uint64_t>(QuicHttp3ErrorCode::CLOSED_CRITICAL_STREAM);
850 case QUIC_STREAM_FRAME_UNEXPECTED:
851 return static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED);
852 case QUIC_STREAM_FRAME_ERROR:
853 return static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_ERROR);
854 case QUIC_STREAM_EXCESSIVE_LOAD:
855 return static_cast<uint64_t>(QuicHttp3ErrorCode::EXCESSIVE_LOAD);
856 case QUIC_STREAM_ID_ERROR:
857 return static_cast<uint64_t>(QuicHttp3ErrorCode::ID_ERROR);
858 case QUIC_STREAM_SETTINGS_ERROR:
859 return static_cast<uint64_t>(QuicHttp3ErrorCode::SETTINGS_ERROR);
860 case QUIC_STREAM_MISSING_SETTINGS:
861 return static_cast<uint64_t>(QuicHttp3ErrorCode::MISSING_SETTINGS);
862 case QUIC_STREAM_REQUEST_REJECTED:
863 return static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_REJECTED);
864 case QUIC_STREAM_REQUEST_INCOMPLETE:
865 return static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_INCOMPLETE);
866 case QUIC_STREAM_CONNECT_ERROR:
867 return static_cast<uint64_t>(QuicHttp3ErrorCode::CONNECT_ERROR);
868 case QUIC_STREAM_VERSION_FALLBACK:
869 return static_cast<uint64_t>(QuicHttp3ErrorCode::VERSION_FALLBACK);
870 case QUIC_STREAM_DECOMPRESSION_FAILED:
871 return static_cast<uint64_t>(
872 QuicHttpQpackErrorCode::DECOMPRESSION_FAILED);
873 case QUIC_STREAM_ENCODER_STREAM_ERROR:
874 return static_cast<uint64_t>(
875 QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR);
876 case QUIC_STREAM_DECODER_STREAM_ERROR:
877 return static_cast<uint64_t>(
878 QuicHttpQpackErrorCode::DECODER_STREAM_ERROR);
bnc12add152020-04-20 08:05:29 -0700879 case QUIC_STREAM_UNKNOWN_APPLICATION_ERROR_CODE:
bnccb0ffbc2020-04-13 10:53:11 -0700880 return static_cast<uint64_t>(QuicHttp3ErrorCode::INTERNAL_ERROR);
vasilvv316f3762021-03-31 13:49:30 -0700881 case QUIC_STREAM_WEBTRANSPORT_SESSION_GONE:
882 return static_cast<uint64_t>(QuicHttp3ErrorCode::CONNECT_ERROR);
883 case QUIC_STREAM_WEBTRANSPORT_BUFFERED_STREAMS_LIMIT_EXCEEDED:
884 return static_cast<uint64_t>(QuicHttp3ErrorCode::CONNECT_ERROR);
bnccb0ffbc2020-04-13 10:53:11 -0700885 case QUIC_STREAM_LAST_ERROR:
886 return static_cast<uint64_t>(QuicHttp3ErrorCode::INTERNAL_ERROR);
887 }
888 return static_cast<uint64_t>(QuicHttp3ErrorCode::INTERNAL_ERROR);
889}
890
891// Convert the application error code of an IETF QUIC RESET_STREAM frame
892// to QuicRstStreamErrorCode.
893QuicRstStreamErrorCode IetfResetStreamErrorCodeToRstStreamErrorCode(
894 uint64_t ietf_error_code) {
895 switch (ietf_error_code) {
ianswett5abb89b2020-04-13 14:48:51 -0700896 case static_cast<uint64_t>(QuicHttp3ErrorCode::HTTP3_NO_ERROR):
bnccb0ffbc2020-04-13 10:53:11 -0700897 return QUIC_STREAM_NO_ERROR;
898 case static_cast<uint64_t>(QuicHttp3ErrorCode::GENERAL_PROTOCOL_ERROR):
899 return QUIC_STREAM_GENERAL_PROTOCOL_ERROR;
900 case static_cast<uint64_t>(QuicHttp3ErrorCode::INTERNAL_ERROR):
901 return QUIC_STREAM_INTERNAL_ERROR;
902 case static_cast<uint64_t>(QuicHttp3ErrorCode::STREAM_CREATION_ERROR):
903 return QUIC_STREAM_STREAM_CREATION_ERROR;
904 case static_cast<uint64_t>(QuicHttp3ErrorCode::CLOSED_CRITICAL_STREAM):
905 return QUIC_STREAM_CLOSED_CRITICAL_STREAM;
906 case static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_UNEXPECTED):
907 return QUIC_STREAM_FRAME_UNEXPECTED;
908 case static_cast<uint64_t>(QuicHttp3ErrorCode::FRAME_ERROR):
909 return QUIC_STREAM_FRAME_ERROR;
910 case static_cast<uint64_t>(QuicHttp3ErrorCode::EXCESSIVE_LOAD):
911 return QUIC_STREAM_EXCESSIVE_LOAD;
912 case static_cast<uint64_t>(QuicHttp3ErrorCode::ID_ERROR):
913 return QUIC_STREAM_ID_ERROR;
914 case static_cast<uint64_t>(QuicHttp3ErrorCode::SETTINGS_ERROR):
915 return QUIC_STREAM_SETTINGS_ERROR;
916 case static_cast<uint64_t>(QuicHttp3ErrorCode::MISSING_SETTINGS):
917 return QUIC_STREAM_MISSING_SETTINGS;
918 case static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_REJECTED):
919 return QUIC_STREAM_REQUEST_REJECTED;
920 case static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_CANCELLED):
921 return QUIC_STREAM_CANCELLED;
922 case static_cast<uint64_t>(QuicHttp3ErrorCode::REQUEST_INCOMPLETE):
923 return QUIC_STREAM_REQUEST_INCOMPLETE;
924 case static_cast<uint64_t>(QuicHttp3ErrorCode::CONNECT_ERROR):
925 return QUIC_STREAM_CONNECT_ERROR;
926 case static_cast<uint64_t>(QuicHttp3ErrorCode::VERSION_FALLBACK):
927 return QUIC_STREAM_VERSION_FALLBACK;
928 case static_cast<uint64_t>(QuicHttpQpackErrorCode::DECOMPRESSION_FAILED):
929 return QUIC_STREAM_DECOMPRESSION_FAILED;
930 case static_cast<uint64_t>(QuicHttpQpackErrorCode::ENCODER_STREAM_ERROR):
931 return QUIC_STREAM_ENCODER_STREAM_ERROR;
932 case static_cast<uint64_t>(QuicHttpQpackErrorCode::DECODER_STREAM_ERROR):
933 return QUIC_STREAM_DECODER_STREAM_ERROR;
934 }
bnc12add152020-04-20 08:05:29 -0700935 return QUIC_STREAM_UNKNOWN_APPLICATION_ERROR_CODE;
bnccb0ffbc2020-04-13 10:53:11 -0700936}
937
QUICHE teama6ef0a62019-03-07 20:34:33 -0500938#undef RETURN_STRING_LITERAL // undef for jumbo builds
bnc0ed49eb2020-04-09 12:06:21 -0700939
QUICHE teama6ef0a62019-03-07 20:34:33 -0500940} // namespace quic