quic: cleanup and refactorisation
[vpp.git] / src / plugins / quic / error.c
1 /*
2  * Copyright (c) 2019 Cisco and/or its affiliates.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at:
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15
16 #include <quic/quic.h>
17
18 #include <quicly.h>
19
20 u8 *
21 quic_format_err (u8 * s, va_list * args)
22 {
23   u64 code = va_arg (*args, u64);
24   switch (code)
25     {
26     case 0:
27       s = format (s, "no error");
28       break;
29       /* app errors */
30     case QUIC_ERROR_FULL_FIFO:
31       s = format (s, "full fifo");
32       break;
33     case QUIC_APP_ERROR_CLOSE_NOTIFY:
34       s = format (s, "QUIC_APP_ERROR_CLOSE_NOTIFY");
35       break;
36     case QUIC_APP_ALLOCATION_ERROR:
37       s = format (s, "QUIC_APP_ALLOCATION_ERROR");
38       break;
39     case QUIC_APP_ACCEPT_NOTIFY_ERROR:
40       s = format (s, "QUIC_APP_ACCEPT_NOTIFY_ERROR");
41       break;
42     case QUIC_APP_CONNECT_NOTIFY_ERROR:
43       s = format (s, "QUIC_APP_CONNECT_NOTIFY_ERROR");
44       break;
45       /* quicly errors */
46     case QUICLY_ERROR_PACKET_IGNORED:
47       s = format (s, "QUICLY_ERROR_PACKET_IGNORED");
48       break;
49     case QUICLY_ERROR_SENDBUF_FULL:
50       s = format (s, "QUICLY_ERROR_SENDBUF_FULL");
51       break;
52     case QUICLY_ERROR_FREE_CONNECTION:
53       s = format (s, "QUICLY_ERROR_FREE_CONNECTION");
54       break;
55     case QUICLY_ERROR_RECEIVED_STATELESS_RESET:
56       s = format (s, "QUICLY_ERROR_RECEIVED_STATELESS_RESET");
57       break;
58     case QUICLY_TRANSPORT_ERROR_NONE:
59       s = format (s, "QUICLY_TRANSPORT_ERROR_NONE");
60       break;
61     case QUICLY_TRANSPORT_ERROR_INTERNAL:
62       s = format (s, "QUICLY_TRANSPORT_ERROR_INTERNAL");
63       break;
64     case QUICLY_TRANSPORT_ERROR_SERVER_BUSY:
65       s = format (s, "QUICLY_TRANSPORT_ERROR_SERVER_BUSY");
66       break;
67     case QUICLY_TRANSPORT_ERROR_FLOW_CONTROL:
68       s = format (s, "QUICLY_TRANSPORT_ERROR_FLOW_CONTROL");
69       break;
70     case QUICLY_TRANSPORT_ERROR_STREAM_LIMIT:
71       s = format (s, "QUICLY_TRANSPORT_ERROR_STREAM_LIMIT");
72       break;
73     case QUICLY_TRANSPORT_ERROR_STREAM_STATE:
74       s = format (s, "QUICLY_TRANSPORT_ERROR_STREAM_STATE");
75       break;
76     case QUICLY_TRANSPORT_ERROR_FINAL_OFFSET:
77       s = format (s, "QUICLY_TRANSPORT_ERROR_FINAL_OFFSET");
78       break;
79     case QUICLY_TRANSPORT_ERROR_FRAME_ENCODING:
80       s = format (s, "QUICLY_TRANSPORT_ERROR_FRAME_ENCODING");
81       break;
82     case QUICLY_TRANSPORT_ERROR_TRANSPORT_PARAMETER:
83       s = format (s, "QUICLY_TRANSPORT_ERROR_TRANSPORT_PARAMETER");
84       break;
85     case QUICLY_TRANSPORT_ERROR_VERSION_NEGOTIATION:
86       s = format (s, "QUICLY_TRANSPORT_ERROR_VERSION_NEGOTIATION");
87       break;
88     case QUICLY_TRANSPORT_ERROR_PROTOCOL_VIOLATION:
89       s = format (s, "QUICLY_TRANSPORT_ERROR_PROTOCOL_VIOLATION");
90       break;
91     case QUICLY_TRANSPORT_ERROR_INVALID_MIGRATION:
92       s = format (s, "QUICLY_TRANSPORT_ERROR_INVALID_MIGRATION");
93       break;
94       /* picotls errors */
95     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_CLOSE_NOTIFY):
96       s =
97         format (s, "PTLS_ALERT_CLOSE_NOTIFY");
98       break;
99     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_UNEXPECTED_MESSAGE):
100       s =
101         format (s, "PTLS_ALERT_UNEXPECTED_MESSAGE");
102       break;
103     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_BAD_RECORD_MAC):
104       s =
105         format (s, "PTLS_ALERT_BAD_RECORD_MAC");
106       break;
107     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_HANDSHAKE_FAILURE):
108       s =
109         format (s, "PTLS_ALERT_HANDSHAKE_FAILURE");
110       break;
111     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_BAD_CERTIFICATE):
112       s =
113         format (s, "PTLS_ALERT_BAD_CERTIFICATE");
114       break;
115     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_CERTIFICATE_REVOKED):
116       s =
117         format (s, "PTLS_ALERT_CERTIFICATE_REVOKED");
118       break;
119     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_CERTIFICATE_EXPIRED):
120       s =
121         format (s, "PTLS_ALERT_CERTIFICATE_EXPIRED");
122       break;
123     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_CERTIFICATE_UNKNOWN):
124       s =
125         format (s, "PTLS_ALERT_CERTIFICATE_UNKNOWN");
126       break;
127     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_ILLEGAL_PARAMETER):
128       s =
129         format (s, "PTLS_ALERT_ILLEGAL_PARAMETER");
130       break;
131     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_UNKNOWN_CA):
132       s =
133         format (s, "PTLS_ALERT_UNKNOWN_CA");
134       break;
135     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_DECODE_ERROR):
136       s =
137         format (s, "PTLS_ALERT_DECODE_ERROR");
138       break;
139     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_DECRYPT_ERROR):
140       s =
141         format (s, "PTLS_ALERT_DECRYPT_ERROR");
142       break;
143     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_PROTOCOL_VERSION):
144       s =
145         format (s, "PTLS_ALERT_PROTOCOL_VERSION");
146       break;
147     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_INTERNAL_ERROR):
148       s =
149         format (s, "PTLS_ALERT_INTERNAL_ERROR");
150       break;
151     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_USER_CANCELED):
152       s =
153         format (s, "PTLS_ALERT_USER_CANCELED");
154       break;
155     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_MISSING_EXTENSION):
156       s =
157         format (s, "PTLS_ALERT_MISSING_EXTENSION");
158       break;
159     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_UNRECOGNIZED_NAME):
160       s =
161         format (s, "PTLS_ALERT_UNRECOGNIZED_NAME");
162       break;
163     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_CERTIFICATE_REQUIRED):
164       s =
165         format (s, "PTLS_ALERT_CERTIFICATE_REQUIRED");
166       break;
167     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ALERT_NO_APPLICATION_PROTOCOL):
168       s =
169         format (s, "PTLS_ALERT_NO_APPLICATION_PROTOCOL");
170       break;
171     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_NO_MEMORY):
172       s =
173         format (s, "PTLS_ERROR_NO_MEMORY");
174       break;
175     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_IN_PROGRESS):
176       s =
177         format (s, "PTLS_ERROR_IN_PROGRESS");
178       break;
179     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_LIBRARY):
180       s =
181         format (s, "PTLS_ERROR_LIBRARY");
182       break;
183     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_INCOMPATIBLE_KEY):
184       s =
185         format (s, "PTLS_ERROR_INCOMPATIBLE_KEY");
186       break;
187     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_SESSION_NOT_FOUND):
188       s =
189         format (s, "PTLS_ERROR_SESSION_NOT_FOUND");
190       break;
191     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_STATELESS_RETRY):
192       s =
193         format (s, "PTLS_ERROR_STATELESS_RETRY");
194       break;
195     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_NOT_AVAILABLE):
196       s =
197         format (s, "PTLS_ERROR_NOT_AVAILABLE");
198       break;
199     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_COMPRESSION_FAILURE):
200       s =
201         format (s, "PTLS_ERROR_COMPRESSION_FAILURE");
202       break;
203     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_BER_INCORRECT_ENCODING):
204       s =
205         format (s, "PTLS_ERROR_BER_INCORRECT_ENCODING");
206       break;
207     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_BER_MALFORMED_TYPE):
208       s =
209         format (s, "PTLS_ERROR_BER_MALFORMED_TYPE");
210       break;
211     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_BER_MALFORMED_LENGTH):
212       s =
213         format (s, "PTLS_ERROR_BER_MALFORMED_LENGTH");
214       break;
215     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_BER_EXCESSIVE_LENGTH):
216       s =
217         format (s, "PTLS_ERROR_BER_EXCESSIVE_LENGTH");
218       break;
219     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_BER_ELEMENT_TOO_SHORT):
220       s =
221         format (s, "PTLS_ERROR_BER_ELEMENT_TOO_SHORT");
222       break;
223     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_BER_UNEXPECTED_EOC):
224       s =
225         format (s, "PTLS_ERROR_BER_UNEXPECTED_EOC");
226       break;
227     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_DER_INDEFINITE_LENGTH):
228       s =
229         format (s, "PTLS_ERROR_DER_INDEFINITE_LENGTH");
230       break;
231     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_INCORRECT_ASN1_SYNTAX):
232       s =
233         format (s, "PTLS_ERROR_INCORRECT_ASN1_SYNTAX");
234       break;
235     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_INCORRECT_PEM_KEY_VERSION):
236       s =
237         format (s, "PTLS_ERROR_INCORRECT_PEM_KEY_VERSION");
238       break;
239     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_INCORRECT_PEM_ECDSA_KEY_VERSION):
240       s =
241         format (s, "PTLS_ERROR_INCORRECT_PEM_ECDSA_KEY_VERSION");
242       break;
243     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_INCORRECT_PEM_ECDSA_CURVE):
244       s =
245         format (s, "PTLS_ERROR_INCORRECT_PEM_ECDSA_CURVE");
246       break;
247     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_INCORRECT_PEM_ECDSA_KEYSIZE):
248       s =
249         format (s, "PTLS_ERROR_INCORRECT_PEM_ECDSA_KEYSIZE");
250       break;
251     case QUICLY_TRANSPORT_ERROR_TLS_ALERT_BASE + PTLS_ERROR_TO_ALERT (PTLS_ERROR_INCORRECT_ASN1_ECDSA_KEY_SYNTAX):
252       s =
253         format (s, "PTLS_ERROR_INCORRECT_ASN1_ECDSA_KEY_SYNTAX");
254       break;
255     default:
256       s = format (s, "unknown error 0x%lx", code);
257       break;
258     }
259   return s;
260 }