1 /*
2 * Copyright 2020 The Netty Project
3 *
4 * The Netty Project licenses this file to you under the Apache License,
5 * version 2.0 (the "License"); you may not use this file except in compliance
6 * with the License. You may obtain a copy of the License at:
7 *
8 * https://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations
14 * under the License.
15 */
16 package io.netty.handler.codec.http3;
17
18 /**
19 * Different <a href="https://tools.ietf.org/html/draft-ietf-quic-http-32#section-8.1">HTTP3 error codes</a>.
20 */
21 public enum Http3ErrorCode {
22
23 /**
24 * No error. This is used when the connection or stream needs to be closed, but there is no error to signal.
25 */
26 H3_NO_ERROR(0x100),
27
28 /**
29 * Peer violated protocol requirements in a way that does not match a more specific error code,
30 * or endpoint declines to use the more specific error code.
31 */
32 H3_GENERAL_PROTOCOL_ERROR(0x101),
33
34 /**
35 * An internal error has occurred in the HTTP stack.
36 */
37 H3_INTERNAL_ERROR(0x102),
38
39 /**
40 * The endpoint detected that its peer created a stream that it will not accept.
41 */
42 H3_STREAM_CREATION_ERROR(0x103),
43
44 /**
45 * A stream required by the HTTP/3 connection was closed or reset.
46 */
47 H3_CLOSED_CRITICAL_STREAM(0x104),
48
49 /**
50 * A frame was received that was not permitted in the current state or on the current stream.
51 */
52 H3_FRAME_UNEXPECTED(0x105),
53
54 /**
55 * A frame that fails to satisfy layout requirements or with an invalid size was received.
56 */
57 H3_FRAME_ERROR(0x106),
58
59 /**
60 * The endpoint detected that its peer is exhibiting a behavior that might be generating excessive load.
61 */
62 H3_EXCESSIVE_LOAD(0x107),
63
64 /**
65 * A Stream ID or Push ID was used incorrectly, such as exceeding a limit, reducing a limit, or being reused.
66 */
67 H3_ID_ERROR(0x108),
68
69 /**
70 * An endpoint detected an error in the payload of a SETTINGS frame.
71 */
72 H3_SETTINGS_ERROR(0x109),
73
74 /**
75 * No SETTINGS frame was received at the beginning of the control stream.
76 */
77 H3_MISSING_SETTINGS(0x10a),
78
79 /**
80 * A server rejected a request without performing any application processing.
81 */
82 H3_REQUEST_REJECTED(0x10b),
83
84 /**
85 * The request or its response (including pushed response) is cancelled.
86 */
87 H3_REQUEST_CANCELLED(0x10c),
88
89 /**
90 * The client's stream terminated without containing a fully-formed request.
91 */
92 H3_REQUEST_INCOMPLETE(0x10d),
93
94 /**
95 * An HTTP message was malformed and cannot be processed.
96 */
97 H3_MESSAGE_ERROR(0x10e),
98
99 /**
100 * The TCP connection established in response to a CONNECT request was reset or abnormally closed.
101 */
102 H3_CONNECT_ERROR(0x10f),
103
104 /**
105 * The requested operation cannot be served over HTTP/3. The peer should retry over HTTP/1.1.
106 */
107 H3_VERSION_FALLBACK(0x110),
108
109 /**
110 * The decoder failed to interpret an encoded field section and is not able to continue decoding that field section.
111 */
112 QPACK_DECOMPRESSION_FAILED(0x200),
113
114 /**
115 * The decoder failed to interpret an encoder instruction received on the encoder stream.
116 */
117 QPACK_ENCODER_STREAM_ERROR(0x201),
118
119 /**
120 * The encoder failed to interpret a decoder instruction received on the decoder stream.
121 */
122 QPACK_DECODER_STREAM_ERROR(0x202);
123
124 final int code;
125
126 Http3ErrorCode(int code) {
127 this.code = code;
128 }
129
130 public int code() {
131 return code;
132 }
133 }