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