• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * ngtcp2
3  *
4  * Copyright (c) 2017 ngtcp2 contributors
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining
7  * a copy of this software and associated documentation files (the
8  * "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sublicense, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be
15  * included in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24  */
25 #include "ngtcp2_err.h"
26 
ngtcp2_strerror(int liberr)27 const char *ngtcp2_strerror(int liberr) {
28   switch (liberr) {
29   case 0:
30     return "NO_ERROR";
31   case NGTCP2_ERR_INVALID_ARGUMENT:
32     return "ERR_INVALID_ARGUMENT";
33   case NGTCP2_ERR_NOBUF:
34     return "ERR_NOBUF";
35   case NGTCP2_ERR_PROTO:
36     return "ERR_PROTO";
37   case NGTCP2_ERR_INVALID_STATE:
38     return "ERR_INVALID_STATE";
39   case NGTCP2_ERR_ACK_FRAME:
40     return "ERR_ACK_FRAME";
41   case NGTCP2_ERR_STREAM_ID_BLOCKED:
42     return "ERR_STREAM_ID_BLOCKED";
43   case NGTCP2_ERR_STREAM_IN_USE:
44     return "ERR_STREAM_IN_USE";
45   case NGTCP2_ERR_STREAM_DATA_BLOCKED:
46     return "ERR_STREAM_DATA_BLOCKED";
47   case NGTCP2_ERR_FLOW_CONTROL:
48     return "ERR_FLOW_CONTROL";
49   case NGTCP2_ERR_CONNECTION_ID_LIMIT:
50     return "ERR_CONNECTION_ID_LIMIT";
51   case NGTCP2_ERR_STREAM_LIMIT:
52     return "ERR_STREAM_LIMIT";
53   case NGTCP2_ERR_FINAL_SIZE:
54     return "ERR_FINAL_SIZE";
55   case NGTCP2_ERR_CRYPTO:
56     return "ERR_CRYPTO";
57   case NGTCP2_ERR_PKT_NUM_EXHAUSTED:
58     return "ERR_PKT_NUM_EXHAUSTED";
59   case NGTCP2_ERR_NOMEM:
60     return "ERR_NOMEM";
61   case NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM:
62     return "ERR_REQUIRED_TRANSPORT_PARAM";
63   case NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM:
64     return "ERR_MALFORMED_TRANSPORT_PARAM";
65   case NGTCP2_ERR_FRAME_ENCODING:
66     return "ERR_FRAME_ENCODING";
67   case NGTCP2_ERR_DECRYPT:
68     return "ERR_DECRYPT";
69   case NGTCP2_ERR_STREAM_SHUT_WR:
70     return "ERR_STREAM_SHUT_WR";
71   case NGTCP2_ERR_STREAM_NOT_FOUND:
72     return "ERR_STREAM_NOT_FOUND";
73   case NGTCP2_ERR_STREAM_STATE:
74     return "ERR_STREAM_STATE";
75   case NGTCP2_ERR_RECV_VERSION_NEGOTIATION:
76     return "ERR_RECV_VERSION_NEGOTIATION";
77   case NGTCP2_ERR_CLOSING:
78     return "ERR_CLOSING";
79   case NGTCP2_ERR_DRAINING:
80     return "ERR_DRAINING";
81   case NGTCP2_ERR_TRANSPORT_PARAM:
82     return "ERR_TRANSPORT_PARAM";
83   case NGTCP2_ERR_DISCARD_PKT:
84     return "ERR_DISCARD_PKT";
85   case NGTCP2_ERR_CONN_ID_BLOCKED:
86     return "ERR_CONN_ID_BLOCKED";
87   case NGTCP2_ERR_CALLBACK_FAILURE:
88     return "ERR_CALLBACK_FAILURE";
89   case NGTCP2_ERR_INTERNAL:
90     return "ERR_INTERNAL";
91   case NGTCP2_ERR_CRYPTO_BUFFER_EXCEEDED:
92     return "ERR_CRYPTO_BUFFER_EXCEEDED";
93   case NGTCP2_ERR_WRITE_MORE:
94     return "ERR_WRITE_MORE";
95   case NGTCP2_ERR_RETRY:
96     return "ERR_RETRY";
97   case NGTCP2_ERR_DROP_CONN:
98     return "ERR_DROP_CONN";
99   case NGTCP2_ERR_AEAD_LIMIT_REACHED:
100     return "ERR_AEAD_LIMIT_REACHED";
101   case NGTCP2_ERR_NO_VIABLE_PATH:
102     return "ERR_NO_VIABLE_PATH";
103   case NGTCP2_ERR_VERSION_NEGOTIATION:
104     return "ERR_VERSION_NEGOTIATION";
105   case NGTCP2_ERR_HANDSHAKE_TIMEOUT:
106     return "ERR_HANDSHAKE_TIMEOUT";
107   case NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE:
108     return "ERR_VERSION_NEGOTIATION_FAILURE";
109   case NGTCP2_ERR_IDLE_CLOSE:
110     return "ERR_IDLE_CLOSE";
111   default:
112     return "(unknown)";
113   }
114 }
115 
ngtcp2_err_is_fatal(int liberr)116 int ngtcp2_err_is_fatal(int liberr) { return liberr < NGTCP2_ERR_FATAL; }
117 
ngtcp2_err_infer_quic_transport_error_code(int liberr)118 uint64_t ngtcp2_err_infer_quic_transport_error_code(int liberr) {
119   switch (liberr) {
120   case 0:
121     return NGTCP2_NO_ERROR;
122   case NGTCP2_ERR_ACK_FRAME:
123   case NGTCP2_ERR_FRAME_ENCODING:
124     return NGTCP2_FRAME_ENCODING_ERROR;
125   case NGTCP2_ERR_FLOW_CONTROL:
126     return NGTCP2_FLOW_CONTROL_ERROR;
127   case NGTCP2_ERR_CONNECTION_ID_LIMIT:
128     return NGTCP2_CONNECTION_ID_LIMIT_ERROR;
129   case NGTCP2_ERR_STREAM_LIMIT:
130     return NGTCP2_STREAM_LIMIT_ERROR;
131   case NGTCP2_ERR_FINAL_SIZE:
132     return NGTCP2_FINAL_SIZE_ERROR;
133   case NGTCP2_ERR_REQUIRED_TRANSPORT_PARAM:
134   case NGTCP2_ERR_MALFORMED_TRANSPORT_PARAM:
135   case NGTCP2_ERR_TRANSPORT_PARAM:
136     return NGTCP2_TRANSPORT_PARAMETER_ERROR;
137   case NGTCP2_ERR_INVALID_ARGUMENT:
138   case NGTCP2_ERR_NOMEM:
139   case NGTCP2_ERR_CALLBACK_FAILURE:
140     return NGTCP2_INTERNAL_ERROR;
141   case NGTCP2_ERR_STREAM_STATE:
142     return NGTCP2_STREAM_STATE_ERROR;
143   case NGTCP2_ERR_CRYPTO_BUFFER_EXCEEDED:
144     return NGTCP2_CRYPTO_BUFFER_EXCEEDED;
145   case NGTCP2_ERR_AEAD_LIMIT_REACHED:
146     return NGTCP2_AEAD_LIMIT_REACHED;
147   case NGTCP2_ERR_NO_VIABLE_PATH:
148     return NGTCP2_NO_VIABLE_PATH;
149   case NGTCP2_ERR_VERSION_NEGOTIATION_FAILURE:
150     return NGTCP2_VERSION_NEGOTIATION_ERROR_DRAFT;
151   default:
152     return NGTCP2_PROTOCOL_VIOLATION;
153   }
154 }
155