1 //--------------------------------------------------------------------------
2 // Copyright (C) 2014-2021 Cisco and/or its affiliates. All rights reserved.
3 //
4 // This program is free software; you can redistribute it and/or modify it
5 // under the terms of the GNU General Public License Version 2 as published
6 // by the Free Software Foundation.  You may not use, modify or distribute
7 // this program under any other version of the GNU General Public License.
8 //
9 // This program is distributed in the hope that it will be useful, but
10 // WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 // General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License along
15 // with this program; if not, write to the Free Software Foundation, Inc.,
16 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
17 //--------------------------------------------------------------------------
18 // http_enum.h author Tom Peters <thopeter@cisco.com>
19 
20 #ifndef HTTP_ENUM_H
21 #define HTTP_ENUM_H
22 
23 #include <cstdint>
24 
25 enum
26 {
27     TRACE_JS_PROC = 0,
28     TRACE_JS_DUMP
29 };
30 
31 namespace HttpEnums
32 {
33 static const int MAX_OCTETS = 63780;
34 static const int GZIP_BLOCK_SIZE = 2048;
35 static const int MAX_SECTION_STRETCH = 1460;
36 static const int REQUEST_PUBLISH_DEPTH = 2000;
37 
38 static const uint32_t HTTP_GID = 119;
39 static const int GZIP_WINDOW_BITS = 31;
40 static const int DEFLATE_WINDOW_BITS = 15;
41 static const int MAX_FIELD_NAME_LENGTH = 100;
42 // Plan to support max 8 xff headers
43 static const uint8_t MAX_XFF_HEADERS = 8;
44 static const uint8_t MAX_CUSTOM_HEADERS = MAX_XFF_HEADERS;
45 
46 // This can grow into a bitmap for the get_buf() form parameter
47 static const uint64_t FORM_REQUEST = 0x1;
48 
49 // Type of message section
50 enum SectionType { SEC_DISCARD = -19, SEC_ABORT = -18, SEC__NOT_COMPUTE=-14, SEC__NOT_PRESENT=-11,
51     SEC_REQUEST = 2, SEC_STATUS, SEC_HEADER, SEC_BODY_CL, SEC_BODY_CHUNK, SEC_TRAILER,
52     SEC_BODY_OLD, SEC_BODY_H2 };
53 
54 enum DetectionStatus { DET_REACTIVATING = 1, DET_ON, DET_DEACTIVATING, DET_OFF };
55 
56 // HTTP rule options.
57 // Lower portion is message buffers available to clients.
58 // That part must remain synchronized with HttpApi::classic_buffer_names[]
59 enum HTTP_RULE_OPT { HTTP_BUFFER_CLIENT_BODY = 1, HTTP_BUFFER_COOKIE, HTTP_BUFFER_HEADER,
60     HTTP_BUFFER_METHOD, HTTP_BUFFER_PARAM, HTTP_BUFFER_RAW_BODY, HTTP_BUFFER_RAW_COOKIE,
61     HTTP_BUFFER_RAW_HEADER, HTTP_BUFFER_RAW_REQUEST, HTTP_BUFFER_RAW_STATUS,
62     HTTP_BUFFER_RAW_TRAILER, HTTP_BUFFER_RAW_URI, HTTP_BUFFER_STAT_CODE, HTTP_BUFFER_STAT_MSG,
63     HTTP_BUFFER_TRAILER, HTTP_BUFFER_TRUE_IP, HTTP_BUFFER_URI, HTTP_BUFFER_VERSION,
64     BUFFER_JS_DATA, BUFFER_VBA_DATA , HTTP_BUFFER_MAX = BUFFER_VBA_DATA,
65     HTTP_RANGE_NUM_HDRS, HTTP_RANGE_NUM_TRAILERS, HTTP_MAX_RULE_OPTION };
66 
67 // Peg counts
68 // This enum must remain synchronized with HttpModule::peg_names[] in http_tables.cc
69 enum PEG_COUNT { PEG_FLOW = 0, PEG_SCAN, PEG_REASSEMBLE, PEG_INSPECT, PEG_REQUEST, PEG_RESPONSE,
70     PEG_GET, PEG_HEAD, PEG_POST, PEG_PUT, PEG_DELETE, PEG_CONNECT, PEG_OPTIONS, PEG_TRACE,
71     PEG_OTHER_METHOD, PEG_REQUEST_BODY, PEG_CHUNKED, PEG_URI_NORM, PEG_URI_PATH, PEG_URI_CODING,
72     PEG_CONCURRENT_SESSIONS, PEG_MAX_CONCURRENT_SESSIONS, PEG_SCRIPT_DETECTION,
73     PEG_PARTIAL_INSPECT, PEG_EXCESS_PARAMS, PEG_PARAMS, PEG_CUTOVERS, PEG_SSL_SEARCH_ABND_EARLY,
74     PEG_PIPELINED_FLOWS, PEG_PIPELINED_REQUESTS, PEG_TOTAL_BYTES, PEG_JS_INLINE, PEG_JS_EXTERNAL,
75     PEG_JS_BYTES, PEG_JS_IDENTIFIER, PEG_JS_IDENTIFIER_OVERFLOW, PEG_COUNT_MAX };
76 
77 // Result of scanning by splitter
78 enum ScanResult { SCAN_NOT_FOUND, SCAN_NOT_FOUND_ACCELERATE, SCAN_FOUND, SCAN_FOUND_PIECE,
79     SCAN_DISCARD, SCAN_DISCARD_PIECE, SCAN_ABORT };
80 
81 // State machine for chunk parsing
82 enum ChunkState { CHUNK_NEWLINES, CHUNK_ZEROS, CHUNK_LEADING_WS, CHUNK_NUMBER, CHUNK_TRAILING_WS,
83     CHUNK_OPTIONS, CHUNK_HCRLF, CHUNK_DATA, CHUNK_DCRLF1, CHUNK_DCRLF2, CHUNK_BAD };
84 
85 // List of possible HTTP versions.
86 enum VersionId { VERS__NO_SOURCE=-16, VERS__NOT_COMPUTE=-14, VERS__PROBLEMATIC=-12,
87     VERS__NOT_PRESENT=-11, VERS__OTHER=1, VERS_1_0, VERS_1_1, VERS_2_0, VERS_0_9 };
88 
89 // Every request method we have ever heard of
90 enum MethodId {
91     METH__NO_SOURCE=-16, METH__NOT_COMPUTE=-14, METH__PROBLEMATIC=-12,
92     METH__NOT_PRESENT=-11, METH__OTHER=1, METH_OPTIONS, METH_GET,
93     METH_HEAD, METH_POST, METH_PUT, METH_DELETE, METH_TRACE, METH_CONNECT,
94     METH_VERSION_CONTROL, METH_REPORT, METH_CHECKOUT, METH_CHECKIN,
95     METH_UNCHECKOUT, METH_MKWORKSPACE, METH_UPDATE, METH_LABEL, METH_MERGE,
96     METH_BASELINE_CONTROL, METH_MKACTIVITY, METH_ORDERPATCH, METH_ACL,
97     METH_PATCH, METH_BIND, METH_LINK, METH_MKCALENDAR, METH_MKREDIRECTREF,
98     METH_REBIND, METH_UNBIND, METH_UNLINK, METH_UPDATEREDIRECTREF,
99 
100     METH__WEBDAV_LOW=1000,  // All WebDAV related methods go after this.
101     METH_PROPFIND, METH_PROPPATCH, METH_MKCOL, METH_COPY, METH_MOVE,
102     METH_LOCK, METH_UNLOCK, METH_SEARCH, METH_BCOPY, METH_BDELETE,
103     METH_BMOVE, METH_BPROPFIND, METH_BPROPPATCH, METH_NOTIFY, METH_POLL,
104     METH_SUBSCRIBE, METH_UNSUBSCRIBE, METH_X_MS_ENUMATTS,
105     METH__WEBDAV_HIGH       // All WebDAV related methods go before this.
106 };
107 
108 // URI formats
109 enum UriType { URI__NOT_COMPUTE=-14, URI__PROBLEMATIC=-12, URI_ASTERISK = 2, URI_AUTHORITY,
110     URI_ORIGIN, URI_ABSOLUTE };
111 
112 // Body compression types
113 enum CompressId { CMP_NONE=2, CMP_GZIP, CMP_DEFLATE };
114 
115 // Message section in which an IPS option provides the buffer
116 enum InspectSection { IS_NONE, IS_HEADER, IS_FLEX_HEADER, IS_FIRST_BODY, IS_BODY, IS_TRAILER };
117 
118 // Part of the URI to be provided
119 enum UriComponent { UC_SCHEME = 1, UC_HOST, UC_PORT, UC_PATH, UC_QUERY, UC_FRAGMENT };
120 
121 // Types of character for URI scanning
122 enum CharAction { CHAR_NORMAL=2, CHAR_PERCENT, CHAR_PATH, CHAR_EIGHTBIT, CHAR_SUBSTIT };
123 
124 // Content codings
125 enum Contentcoding { CONTENTCODE__OTHER=1, CONTENTCODE_GZIP, CONTENTCODE_DEFLATE,
126     CONTENTCODE_COMPRESS, CONTENTCODE_EXI, CONTENTCODE_PACK200_GZIP, CONTENTCODE_X_GZIP,
127     CONTENTCODE_X_COMPRESS, CONTENTCODE_IDENTITY, CONTENTCODE_CHUNKED, CONTENTCODE_BR,
128     CONTENTCODE_BZIP2, CONTENTCODE_LZMA, CONTENTCODE_PEERDIST, CONTENTCODE_SDCH,
129     CONTENTCODE_XPRESS, CONTENTCODE_XZ };
130 
131 // Transfer-Encoding header values
132 enum TransferEncoding { TE__OTHER=1, TE_CHUNKED, TE_IDENTITY };
133 
134 // Upgrade header values
135 enum Upgrade { UP__OTHER=1, UP_H2C, UP_H2, UP_HTTP20 };
136 
137 // Every header we have ever heard of
138 enum HeaderId { HEAD__NOT_COMPUTE=-14, HEAD__PROBLEMATIC=-12, HEAD__NOT_PRESENT=-11, HEAD__OTHER=1,
139     HEAD_CACHE_CONTROL, HEAD_CONNECTION, HEAD_DATE, HEAD_PRAGMA, HEAD_TRAILER, HEAD_COOKIE,
140     HEAD_SET_COOKIE, HEAD_TRANSFER_ENCODING, HEAD_UPGRADE, HEAD_VIA, HEAD_WARNING, HEAD_ACCEPT,
141     HEAD_ACCEPT_CHARSET, HEAD_ACCEPT_ENCODING, HEAD_ACCEPT_LANGUAGE, HEAD_AUTHORIZATION,
142     HEAD_EXPECT, HEAD_FROM, HEAD_HOST, HEAD_IF_MATCH, HEAD_IF_MODIFIED_SINCE, HEAD_IF_NONE_MATCH,
143     HEAD_IF_RANGE, HEAD_IF_UNMODIFIED_SINCE, HEAD_MAX_FORWARDS, HEAD_PROXY_AUTHORIZATION,
144     HEAD_RANGE, HEAD_REFERER, HEAD_TE, HEAD_USER_AGENT, HEAD_ACCEPT_RANGES, HEAD_AGE, HEAD_ETAG,
145     HEAD_LOCATION, HEAD_PROXY_AUTHENTICATE, HEAD_RETRY_AFTER, HEAD_SERVER, HEAD_VARY,
146     HEAD_WWW_AUTHENTICATE, HEAD_ALLOW, HEAD_CONTENT_ENCODING, HEAD_CONTENT_LANGUAGE,
147     HEAD_CONTENT_LENGTH, HEAD_CONTENT_LOCATION, HEAD_CONTENT_MD5, HEAD_CONTENT_RANGE,
148     HEAD_CONTENT_TYPE, HEAD_EXPIRES, HEAD_LAST_MODIFIED, HEAD_X_FORWARDED_FOR, HEAD_TRUE_CLIENT_IP,
149     HEAD_X_WORKING_WITH, HEAD_CONTENT_TRANSFER_ENCODING, HEAD_MIME_VERSION, HEAD_PROXY_AGENT,
150     HEAD_CONTENT_DISPOSITION, HEAD_HTTP2_SETTINGS, HEAD__MAX_VALUE };
151 
152 // All the infractions we might find while parsing and analyzing a message
153 enum Infraction
154 {
155     INF__NONE = -1,
156     INF_BARE_BYTE = 0,
157     INF_HEAD_TOO_LONG = 1,
158     INF_BAD_REQ_LINE = 2,
159     INF_BAD_STAT_LINE = 3,
160     INF_TOO_MANY_HEADERS = 4,
161     INF_BAD_HEADER = 5,
162     INF_BAD_STAT_CODE = 6,
163     INF_UNKNOWN_VERSION = 7,
164     INF_BAD_VERSION = 8,
165     INF_ZERO_NINE_NOT_FIRST = 9,
166     INF_CODE_POINT_IN_URI = 10,
167     INF_BAD_CONTENT_LENGTH = 11,
168     INF_PIPELINE_OVERFLOW = 12,
169     INF_BAD_CHUNK_SIZE = 13,
170     INF_BAD_PHRASE = 14,
171     INF_BAD_URI = 15,
172     INF_ZERO_NINE_REQ = 16,
173     INF_ZERO_NINE_CONTINUE = 17,
174     INF_URI_PERCENT_UTF8_3B = 18,
175     INF_URI_PERCENT_UNRESERVED = 19,
176     INF_URI_PERCENT_UTF8_2B = 20,
177     INF_URI_NEED_NORM_SCHEME = 21,
178     INF_URI_PERCENT_OTHER = 22,
179     INF_URI_BAD_CHAR = 23,
180     INF_URI_8BIT_CHAR = 24,
181     INF_URI_MULTISLASH = 25,
182     INF_BACKSLASH_IN_URI = 26,
183     INF_URI_SLASH_DOT = 27,
184     INF_URI_SLASH_DOT_DOT = 28,
185     INF_URI_ROOT_TRAV = 29,
186     INF_TOO_MUCH_LEADING_WS = 30,
187     INF_WS_BETWEEN_MSGS = 31,
188     INF_ENDLESS_HEADER = 32,
189     INF_LF_WITHOUT_CR = 33,
190     INF_NOT_HTTP = 34,
191     INF_NO_URI = 35,
192     INF_REQUEST_WS = 36,
193     INF_REQUEST_TAB = 37,
194     INF_STATUS_WS = 38,
195     INF_STATUS_TAB = 39,
196     INF_URI_SPACE = 40,
197     INF_TOO_LONG_HEADER = 41,
198     INF_CR_WITHOUT_LF = 42,
199     INF_CHUNK_ZEROS = 43,
200     INF_CHUNK_OPTIONS = 44,
201     INF_CHUNK_BAD_CHAR = 45,
202     INF_CHUNK_TOO_LARGE = 46,
203     INF_CHUNK_BARE_LF = 47,
204     INF_CHUNK_LONE_CR = 48,
205     INF_CHUNK_NO_LENGTH = 49,
206     INF_CHUNK_BAD_END = 50,
207     INF_PARTIAL_START = 51,
208     INF_CHUNK_WHITESPACE = 52,
209     INF_HEAD_NAME_WHITESPACE = 53,
210     INF_GZIP_OVERRUN = 54,
211     INF_GZIP_FAILURE = 55,
212     INF_GZIP_EARLY_END = 56,
213     INF_URI_NEED_NORM_PATH = 57,
214     INF_URI_NEED_NORM_HOST = 58,
215     INF_URI_NEED_NORM_QUERY = 59,
216     INF_URI_NEED_NORM_FRAGMENT = 60,
217     INF_URI_U_ENCODE = 61,
218     INF_URI_UNKNOWN_PERCENT = 62,
219     INF_URI_DOUBLE_DECODE = 63,
220     INF_MULTIPLE_CONTLEN = 64,
221     INF_BOTH_CL_AND_TE = 65,
222     INF_BAD_CODE_BODY_HEADER = 66,
223     INF_BAD_TE_HEADER = 67,
224     INF_PADDED_TE_HEADER = 68,
225     INF_OVERSIZE_DIR = 69,
226     INF_POST_WO_BODY = 70,
227     INF_UTF_NORM_FAIL = 71,
228     INF_UTF7 = 72,
229     INF_UNSUPPORTED_ENCODING = 73,
230     INF_UNKNOWN_ENCODING = 74,
231     INF_STACKED_ENCODINGS = 75,
232     INF_JS_OBFUSCATION_EXCD = 76,
233     INF_JS_EXCESS_WS = 77,
234     INF_MIXED_ENCODINGS = 78,
235     INF_RESPONSE_WO_REQUEST = 79,
236     INF_SWF_ZLIB_FAILURE = 80,
237     INF_SWF_LZMA_FAILURE = 81,
238     INF_PDF_DEFL_FAILURE = 82,
239     INF_PDF_UNSUP_COMP_TYPE = 83,
240     INF_PDF_CASC_COMP = 84,
241     INF_PDF_PARSE_FAILURE = 85,
242     INF_FILE_DECOMPR_OVERRUN = 86,
243     INF_BAD_CHAR_IN_HEADER_NAME = 87,
244     INF_HEADER_WRAPPING = 88,
245     INF_CHUNK_BAD_SEP = 89,
246     INF_MULTIPLE_100_RESPONSES = 90,
247     INF_UNEXPECTED_100_RESPONSE = 91,
248     INF_UNKNOWN_1XX_STATUS = 92,
249     INF_EXPECT_WITHOUT_BODY_CL0 = 93,
250     INF_EXPECT_WITHOUT_BODY_NO_CL = 94,
251     INF_CHUNKED_ONE_POINT_ZERO = 95,
252     INF_CTE_HEADER = 96,
253     INF_ILLEGAL_TRAILER = 97,
254     INF_REPEATED_HEADER = 98,
255     INF_CONTENT_ENCODING_CHUNKED = 99,
256     INF_206_WITHOUT_RANGE = 100,
257     INF_VERSION_NOT_UPPERCASE = 101,
258     INF_CHUNK_LEADING_WS = 102,
259     INF_BAD_HEADER_WHITESPACE = 103,
260     INF_H2_NON_IDENTITY_TE = 104,
261     INF_H2_DATA_OVERRUNS_CL = 105,
262     INF_H2_DATA_UNDERRUNS_CL = 106,
263     INF_CONNECT_REQUEST_BODY = 107,
264     INF_EARLY_C2S_TRAFFIC_AFTER_CONNECT = 108,
265     INF_200_CONNECT_RESP_WITH_CL = 109,
266     INF_200_CONNECT_RESP_WITH_TE = 110,
267     INF_100_CONNECT_RESP = 111,
268     INF_EARLY_CONNECT_RESPONSE = 112,
269     INF_MALFORMED_CD_FILENAME = 113,
270     INF_HTTP2_IN_HI = 114,
271     INF_TRUNCATED_MSG_BODY_CL = 115,
272     INF_TRUNCATED_MSG_BODY_CHUNK = 116,
273     INF_LONG_SCHEME = 117,
274     INF_MULTIPLE_HOST_HDRS = 118,
275     INF_HTTP2_SETTINGS = 119,
276     INF_UPGRADE_HEADER_HTTP2 = 120,
277     INF_JS_BAD_TOKEN = 121,
278     INF_JS_OPENING_TAG = 122,
279     INF_JS_CLOSING_TAG = 123,
280     INF_JS_CODE_IN_EXTERNAL = 124,
281     INF_JS_SHORTENED_TAG = 125,
282     INF_JS_IDENTIFIER_OVERFLOW = 126,
283     INF_JS_BRACKET_NEST_OVERFLOW = 127,
284     INF_CHUNK_OVER_MAXIMUM = 128,
285     INF_LONG_HOST_VALUE = 129,
286     INF_ACCEPT_ENCODING_CONSECUTIVE_COMMAS = 130,
287     INF_JS_PDU_MISS = 131,
288     INF_JS_SCOPE_NEST_OVERFLOW = 132,
289     INF__MAX_VALUE
290 };
291 
292 enum EventSid
293 {
294     EVENT__NONE = -1,
295     EVENT_ASCII = 1,
296     EVENT_DOUBLE_DECODE = 2,
297     EVENT_U_ENCODE = 3,
298     EVENT_BARE_BYTE = 4,
299     // EVENT_BASE_36 = 5,                        // Retired. Do not reuse this number
300     EVENT_UTF_8 = 6,
301     EVENT_CODE_POINT_IN_URI = 7,
302     EVENT_MULTI_SLASH = 8,
303     EVENT_BACKSLASH_IN_URI = 9,
304     EVENT_SELF_DIR_TRAV = 10,
305     EVENT_DIR_TRAV = 11,
306     EVENT_APACHE_WS = 12,
307     EVENT_LF_WITHOUT_CR = 13,
308     EVENT_NON_RFC_CHAR = 14,
309     EVENT_OVERSIZE_DIR = 15,
310     EVENT_LARGE_CHUNK = 16,
311     // EVENT_PROXY_USE = 17,                     // Retired. Do not reuse this number
312     EVENT_WEBROOT_DIR = 18,
313     EVENT_LONG_HDR = 19,
314     EVENT_MAX_HEADERS = 20,
315     EVENT_MULTIPLE_CONTLEN = 21,
316     // EVENT_CHUNK_SIZE_MISMATCH = 22,           // Retired. Do not reuse this number
317     // EVENT_INVALID_TRUEIP = 23,                // Retired. Do not reuse this number
318     EVENT_MULTIPLE_HOST_HDRS = 24,
319     EVENT_LONG_HOSTNAME = 25,
320     // EVENT_EXCEEDS_SPACES = 26,                // Retired. Do not reuse this number
321     // EVENT_CONSECUTIVE_SMALL_CHUNKS = 27,      // Retired. Do not reuse this number
322     EVENT_UNBOUNDED_POST = 28,
323     // EVENT_MULTIPLE_TRUEIP_IN_SESSION = 29,    // Retired. Do not reuse this number
324     // EVENT_BOTH_TRUEIP_XFF_HDRS = 30,          // Retired. Do not reuse this number
325     EVENT_UNKNOWN_METHOD = 31,
326     EVENT_SIMPLE_REQUEST = 32,
327     EVENT_UNESCAPED_SPACE_URI = 33,
328     EVENT_PIPELINE_MAX = 34,
329 
330     // EVENT_ANOM_SERVER = 101,                  // Retired. Do not reuse this number
331     EVENT_INVALID_STATCODE = 102,
332     // EVENT_UNUSED_1 = 103,                     // Retired. Do not reuse this number
333     EVENT_UTF_NORM_FAIL = 104,
334     EVENT_UTF7 = 105,
335     // EVENT_DECOMPR_FAILED = 106,               // Retired. Do not reuse this number
336     // EVENT_CONSECUTIVE_SMALL_CHUNKS_S = 107,   // Retired. Do not reuse this number
337     // EVENT_UNUSED_2 = 108,                     // Retired. Do not reuse this number
338     EVENT_JS_OBFUSCATION_EXCD = 109,
339     EVENT_JS_EXCESS_WS = 110,
340     EVENT_MIXED_ENCODINGS = 111,
341     EVENT_SWF_ZLIB_FAILURE = 112,
342     EVENT_SWF_LZMA_FAILURE = 113,
343     EVENT_PDF_DEFL_FAILURE = 114,
344     EVENT_PDF_UNSUP_COMP_TYPE = 115,
345     EVENT_PDF_CASC_COMP = 116,
346     EVENT_PDF_PARSE_FAILURE = 117,
347 
348     EVENT_LOSS_OF_SYNC = 201,
349     EVENT_CHUNK_ZEROS = 202,
350     EVENT_WS_BETWEEN_MSGS = 203,
351     EVENT_URI_MISSING = 204,
352     EVENT_CTRL_IN_REASON = 205,
353     EVENT_IMPROPER_WS = 206,
354     EVENT_BAD_VERS = 207,
355     EVENT_UNKNOWN_VERS = 208,
356     EVENT_BAD_HEADER = 209,
357     EVENT_CHUNK_OPTIONS = 210,
358     EVENT_URI_BAD_FORMAT = 211,
359     EVENT_UNKNOWN_PERCENT = 212,
360     EVENT_BROKEN_CHUNK = 213,
361     EVENT_CHUNK_WHITESPACE = 214,
362     EVENT_HEAD_NAME_WHITESPACE = 215,
363     EVENT_GZIP_OVERRUN = 216,
364     EVENT_GZIP_FAILURE = 217,
365     EVENT_ZERO_NINE_CONTINUE = 218,
366     EVENT_ZERO_NINE_NOT_FIRST = 219,
367     EVENT_BOTH_CL_AND_TE = 220,
368     EVENT_BAD_CODE_BODY_HEADER = 221,
369     EVENT_BAD_TE_HEADER = 222,
370     EVENT_PADDED_TE_HEADER = 223,
371     EVENT_MISFORMATTED_HTTP = 224,
372     EVENT_UNSUPPORTED_ENCODING = 225,
373     EVENT_UNKNOWN_ENCODING = 226,
374     EVENT_STACKED_ENCODINGS = 227,
375     EVENT_RESPONSE_WO_REQUEST = 228,
376     EVENT_FILE_DECOMPR_OVERRUN = 229,
377     EVENT_BAD_CHAR_IN_HEADER_NAME = 230,
378     EVENT_BAD_CONTENT_LENGTH = 231,
379     EVENT_HEADER_WRAPPING = 232,
380     EVENT_CR_WITHOUT_LF = 233,
381     EVENT_CHUNK_BAD_SEP = 234,
382     EVENT_CHUNK_BARE_LF = 235,
383     EVENT_MULTIPLE_100_RESPONSES = 236,
384     EVENT_UNEXPECTED_100_RESPONSE = 237,
385     EVENT_UNKNOWN_1XX_STATUS = 238,
386     EVENT_EXPECT_WITHOUT_BODY = 239,
387     EVENT_CHUNKED_ONE_POINT_ZERO = 240,
388     EVENT_CTE_HEADER = 241,
389     EVENT_ILLEGAL_TRAILER = 242,
390     EVENT_REPEATED_HEADER = 243,
391     EVENT_CONTENT_ENCODING_CHUNKED = 244,
392     EVENT_206_WITHOUT_RANGE = 245,
393     EVENT_VERSION_NOT_UPPERCASE = 246,
394     EVENT_BAD_HEADER_WHITESPACE = 247,
395     EVENT_GZIP_EARLY_END = 248,
396     EVENT_EXCESS_REPEAT_PARAMS = 249,
397     EVENT_H2_NON_IDENTITY_TE = 250,
398     EVENT_H2_DATA_OVERRUNS_CL = 251,
399     EVENT_H2_DATA_UNDERRUNS_CL = 252,
400     EVENT_CONNECT_REQUEST_BODY = 253,
401     EVENT_EARLY_C2S_TRAFFIC_AFTER_CONNECT = 254,
402     EVENT_200_CONNECT_RESP_WITH_CL = 255,
403     EVENT_200_CONNECT_RESP_WITH_TE = 256,
404     EVENT_100_CONNECT_RESP = 257,
405     EVENT_EARLY_CONNECT_RESPONSE = 258,
406     EVENT_MALFORMED_CD_FILENAME = 259,
407     EVENT_TRUNCATED_MSG_BODY_CL = 260,
408     EVENT_TRUNCATED_MSG_BODY_CHUNK = 261,
409     EVENT_LONG_SCHEME = 262,
410     EVENT_HTTP2_UPGRADE_REQUEST = 263,
411     EVENT_HTTP2_UPGRADE_RESPONSE = 264,
412     EVENT_JS_BAD_TOKEN = 265,
413     EVENT_JS_OPENING_TAG = 266,
414     EVENT_JS_CLOSING_TAG = 267,
415     EVENT_JS_CODE_IN_EXTERNAL = 268,
416     EVENT_JS_SHORTENED_TAG = 269,
417     EVENT_JS_IDENTIFIER_OVERFLOW = 270,
418     EVENT_JS_BRACKET_NEST_OVERFLOW = 271,
419     EVENT_ACCEPT_ENCODING_CONSECUTIVE_COMMAS = 272,
420     EVENT_JS_PDU_MISS = 273,
421     EVENT_JS_SCOPE_NEST_OVERFLOW = 274,
422     EVENT__MAX_VALUE
423 };
424 
425 extern const int8_t as_hex[256];
426 extern const bool token_char[256];
427 extern const bool scheme_char[256];
428 extern const bool is_sp_tab[256];
429 extern const bool is_cr_lf[256];
430 extern const bool is_sp_tab_lf[256];
431 extern const bool is_sp_tab_cr_lf[256];
432 extern const bool is_sp_tab_cr_lf_vt_ff[256];
433 extern const bool is_sp_tab_quote_dquote[256];
434 extern const bool is_print_char[256]; // printable includes SP, tab, CR, LF
435 extern const bool is_sp_comma[256];
436 
437 enum H2BodyState { H2_BODY_NOT_COMPLETE, H2_BODY_LAST_SEG, H2_BODY_COMPLETE,
438     H2_BODY_COMPLETE_EXPECT_TRAILERS, H2_BODY_NO_BODY };
439 
440 } // end namespace HttpEnums
441 
442 #endif
443 
444