ext/thin_parser/parser.c in thin-1.2.4 vs ext/thin_parser/parser.c in thin-1.2.5

- old
+ new

@@ -1,5 +1,6 @@ + #line 1 "parser.rl" /** * Copyright (c) 2005 Zed A. Shaw * You can redistribute it and/or modify it under the same terms as Ruby. */ @@ -14,199 +15,34 @@ #define MARK(M,FPC) (parser->M = (FPC) - buffer) #define PTR_TO(F) (buffer + parser->F) /** Machine **/ + #line 81 "parser.rl" /** Data **/ -#line 25 "parser.c" -static const char _http_parser_actions[] = { - 0, 1, 0, 1, 1, 1, 2, 1, - 3, 1, 4, 1, 5, 1, 6, 1, - 7, 1, 8, 1, 10, 1, 11, 1, - 12, 2, 0, 7, 2, 3, 4, 2, - 9, 6, 2, 11, 6, 3, 8, 9, - 6 -}; - -static const short _http_parser_key_offsets[] = { - 0, 0, 8, 17, 27, 29, 30, 31, - 32, 33, 34, 36, 39, 41, 44, 45, - 61, 62, 78, 80, 81, 87, 93, 99, - 105, 115, 121, 127, 133, 141, 147, 153, - 160, 166, 172, 178, 184, 190, 196, 205, - 214, 223, 232, 241, 250, 259, 268, 277, - 286, 295, 304, 313, 322, 331, 340, 349, - 358, 359 -}; - -static const char _http_parser_trans_keys[] = { - 36, 95, 45, 46, 48, 57, 65, 90, - 32, 36, 95, 45, 46, 48, 57, 65, - 90, 42, 43, 47, 58, 45, 57, 65, - 90, 97, 122, 32, 35, 72, 84, 84, - 80, 47, 48, 57, 46, 48, 57, 48, - 57, 13, 48, 57, 10, 13, 33, 124, - 126, 35, 39, 42, 43, 45, 46, 48, - 57, 65, 90, 94, 122, 10, 33, 58, - 124, 126, 35, 39, 42, 43, 45, 46, - 48, 57, 65, 90, 94, 122, 13, 32, - 13, 32, 35, 37, 127, 0, 31, 32, - 35, 37, 127, 0, 31, 48, 57, 65, - 70, 97, 102, 48, 57, 65, 70, 97, - 102, 43, 58, 45, 46, 48, 57, 65, - 90, 97, 122, 32, 35, 37, 127, 0, - 31, 48, 57, 65, 70, 97, 102, 48, - 57, 65, 70, 97, 102, 32, 35, 37, - 59, 63, 127, 0, 31, 48, 57, 65, - 70, 97, 102, 48, 57, 65, 70, 97, - 102, 32, 35, 37, 63, 127, 0, 31, - 48, 57, 65, 70, 97, 102, 48, 57, - 65, 70, 97, 102, 32, 35, 37, 127, - 0, 31, 32, 35, 37, 127, 0, 31, - 48, 57, 65, 70, 97, 102, 48, 57, - 65, 70, 97, 102, 32, 36, 95, 45, - 46, 48, 57, 65, 90, 32, 36, 95, - 45, 46, 48, 57, 65, 90, 32, 36, - 95, 45, 46, 48, 57, 65, 90, 32, - 36, 95, 45, 46, 48, 57, 65, 90, - 32, 36, 95, 45, 46, 48, 57, 65, - 90, 32, 36, 95, 45, 46, 48, 57, - 65, 90, 32, 36, 95, 45, 46, 48, - 57, 65, 90, 32, 36, 95, 45, 46, - 48, 57, 65, 90, 32, 36, 95, 45, - 46, 48, 57, 65, 90, 32, 36, 95, - 45, 46, 48, 57, 65, 90, 32, 36, - 95, 45, 46, 48, 57, 65, 90, 32, - 36, 95, 45, 46, 48, 57, 65, 90, - 32, 36, 95, 45, 46, 48, 57, 65, - 90, 32, 36, 95, 45, 46, 48, 57, - 65, 90, 32, 36, 95, 45, 46, 48, - 57, 65, 90, 32, 36, 95, 45, 46, - 48, 57, 65, 90, 32, 36, 95, 45, - 46, 48, 57, 65, 90, 32, 36, 95, - 45, 46, 48, 57, 65, 90, 32, 0 -}; - -static const char _http_parser_single_lengths[] = { - 0, 2, 3, 4, 2, 1, 1, 1, - 1, 1, 0, 1, 0, 1, 1, 4, - 1, 4, 2, 1, 4, 4, 0, 0, - 2, 4, 0, 0, 6, 0, 0, 5, - 0, 0, 4, 4, 0, 0, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 1, 0 -}; - -static const char _http_parser_range_lengths[] = { - 0, 3, 3, 3, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, 0, 6, - 0, 6, 0, 0, 1, 1, 3, 3, - 4, 1, 3, 3, 1, 3, 3, 1, - 3, 3, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 0, 0 -}; - -static const short _http_parser_index_offsets[] = { - 0, 0, 6, 13, 21, 24, 26, 28, - 30, 32, 34, 36, 39, 41, 44, 46, - 57, 59, 70, 73, 75, 81, 87, 91, - 95, 102, 108, 112, 116, 124, 128, 132, - 139, 143, 147, 153, 159, 163, 167, 174, - 181, 188, 195, 202, 209, 216, 223, 230, - 237, 244, 251, 258, 265, 272, 279, 286, - 293, 295 -}; - -static const char _http_parser_indicies[] = { - 0, 0, 0, 0, 0, 1, 2, 3, - 3, 3, 3, 3, 1, 4, 5, 6, - 7, 5, 5, 5, 1, 8, 9, 1, - 10, 1, 11, 1, 12, 1, 13, 1, - 14, 1, 15, 1, 16, 15, 1, 17, - 1, 18, 17, 1, 19, 1, 20, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 1, 22, 1, 23, 24, 23, 23, 23, - 23, 23, 23, 23, 23, 1, 26, 27, - 25, 29, 28, 31, 1, 32, 1, 1, - 30, 34, 1, 35, 1, 1, 33, 36, - 36, 36, 1, 33, 33, 33, 1, 37, - 38, 37, 37, 37, 37, 1, 8, 9, - 39, 1, 1, 38, 40, 40, 40, 1, - 38, 38, 38, 1, 42, 43, 44, 45, - 46, 1, 1, 41, 47, 47, 47, 1, - 41, 41, 41, 1, 8, 9, 49, 50, - 1, 1, 48, 51, 51, 51, 1, 48, - 48, 48, 1, 53, 54, 55, 1, 1, - 52, 57, 58, 59, 1, 1, 56, 60, - 60, 60, 1, 56, 56, 56, 1, 2, - 61, 61, 61, 61, 61, 1, 2, 62, - 62, 62, 62, 62, 1, 2, 63, 63, - 63, 63, 63, 1, 2, 64, 64, 64, - 64, 64, 1, 2, 65, 65, 65, 65, - 65, 1, 2, 66, 66, 66, 66, 66, - 1, 2, 67, 67, 67, 67, 67, 1, - 2, 68, 68, 68, 68, 68, 1, 2, - 69, 69, 69, 69, 69, 1, 2, 70, - 70, 70, 70, 70, 1, 2, 71, 71, - 71, 71, 71, 1, 2, 72, 72, 72, - 72, 72, 1, 2, 73, 73, 73, 73, - 73, 1, 2, 74, 74, 74, 74, 74, - 1, 2, 75, 75, 75, 75, 75, 1, - 2, 76, 76, 76, 76, 76, 1, 2, - 77, 77, 77, 77, 77, 1, 2, 78, - 78, 78, 78, 78, 1, 2, 1, 1, - 0 -}; - -static const char _http_parser_trans_targs[] = { - 2, 0, 3, 38, 4, 24, 28, 25, - 5, 20, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 57, 17, - 18, 19, 14, 18, 19, 14, 21, 5, - 22, 21, 5, 22, 23, 24, 25, 26, - 27, 28, 5, 20, 29, 31, 34, 30, - 31, 32, 34, 33, 35, 5, 20, 36, - 35, 5, 20, 36, 37, 39, 40, 41, - 42, 43, 44, 45, 46, 47, 48, 49, - 50, 51, 52, 53, 54, 55, 56 -}; - -static const char _http_parser_trans_actions[] = { - 1, 0, 11, 0, 1, 1, 1, 1, - 13, 13, 1, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 3, 23, 0, - 5, 7, 28, 7, 0, 9, 1, 25, - 1, 0, 15, 0, 0, 0, 0, 0, - 0, 0, 34, 34, 0, 21, 21, 0, - 0, 0, 0, 0, 17, 37, 37, 17, - 0, 31, 31, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0 -}; - +#line 27 "parser.c" static const int http_parser_start = 1; -static const int http_parser_first_final = 57; +static const int http_parser_first_final = 54; static const int http_parser_error = 0; static const int http_parser_en_main = 1; + #line 85 "parser.rl" int thin_http_parser_init(http_parser *parser) { int cs = 0; -#line 205 "parser.c" +#line 40 "parser.c" { cs = http_parser_start; } + #line 89 "parser.rl" parser->cs = cs; parser->body_start = 0; parser->content_len = 0; parser->mark = 0; @@ -231,183 +67,1080 @@ assert(*pe == '\0' && "pointer does not end on NUL"); assert(pe - p == len - off && "pointers aren't same distance"); -#line 237 "parser.c" +#line 73 "parser.c" { - int _klen; - unsigned int _trans; - const char *_acts; - unsigned int _nacts; - const char *_keys; - if ( p == pe ) goto _test_eof; - if ( cs == 0 ) - goto _out; -_resume: - _keys = _http_parser_trans_keys + _http_parser_key_offsets[cs]; - _trans = _http_parser_index_offsets[cs]; - - _klen = _http_parser_single_lengths[cs]; - if ( _klen > 0 ) { - const char *_lower = _keys; - const char *_mid; - const char *_upper = _keys + _klen - 1; - while (1) { - if ( _upper < _lower ) - break; - - _mid = _lower + ((_upper-_lower) >> 1); - if ( (*p) < *_mid ) - _upper = _mid - 1; - else if ( (*p) > *_mid ) - _lower = _mid + 1; - else { - _trans += (_mid - _keys); - goto _match; - } - } - _keys += _klen; - _trans += _klen; - } - - _klen = _http_parser_range_lengths[cs]; - if ( _klen > 0 ) { - const char *_lower = _keys; - const char *_mid; - const char *_upper = _keys + (_klen<<1) - 2; - while (1) { - if ( _upper < _lower ) - break; - - _mid = _lower + (((_upper-_lower) >> 1) & ~1); - if ( (*p) < _mid[0] ) - _upper = _mid - 2; - else if ( (*p) > _mid[1] ) - _lower = _mid + 2; - else { - _trans += ((_mid - _keys)>>1); - goto _match; - } - } - _trans += _klen; - } - -_match: - _trans = _http_parser_indicies[_trans]; - cs = _http_parser_trans_targs[_trans]; - - if ( _http_parser_trans_actions[_trans] == 0 ) - goto _again; - - _acts = _http_parser_actions + _http_parser_trans_actions[_trans]; - _nacts = (unsigned int) *_acts++; - while ( _nacts-- > 0 ) + switch ( cs ) { - switch ( *_acts++ ) - { - case 0: +case 1: + switch( (*p) ) { + case 36: goto tr0; + case 95: goto tr0; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto tr0; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto tr0; + } else + goto tr0; + goto st0; +st0: +cs = 0; + goto _out; +tr0: #line 22 "parser.rl" {MARK(mark, p); } - break; - case 1: -#line 25 "parser.rl" - { MARK(field_start, p); } - break; - case 2: -#line 26 "parser.rl" - { - parser->field_len = LEN(field_start, p); - } - break; - case 3: -#line 30 "parser.rl" - { MARK(mark, p); } - break; - case 4: -#line 31 "parser.rl" - { - if (parser->http_field != NULL) { - parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p)); - } - } - break; - case 5: + goto st2; +st2: + if ( ++p == pe ) + goto _test_eof2; +case 2: +#line 104 "parser.c" + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st35; + case 95: goto st35; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st35; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st35; + } else + goto st35; + goto st0; +tr2: #line 36 "parser.rl" { if (parser->request_method != NULL) { parser->request_method(parser->data, PTR_TO(mark), LEN(mark, p)); } } - break; - case 6: + goto st3; +st3: + if ( ++p == pe ) + goto _test_eof3; +case 3: +#line 131 "parser.c" + switch( (*p) ) { + case 42: goto tr4; + case 43: goto tr5; + case 47: goto tr6; + case 58: goto tr7; + } + if ( (*p) < 65 ) { + if ( 45 <= (*p) && (*p) <= 57 ) + goto tr5; + } else if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto tr5; + } else + goto tr5; + goto st0; +tr4: +#line 22 "parser.rl" + {MARK(mark, p); } + goto st4; +st4: + if ( ++p == pe ) + goto _test_eof4; +case 4: +#line 155 "parser.c" + switch( (*p) ) { + case 32: goto tr8; + case 35: goto tr9; + } + goto st0; +tr8: #line 41 "parser.rl" { if (parser->request_uri != NULL) { parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); } } - break; - case 7: + goto st5; +tr31: +#line 22 "parser.rl" + {MARK(mark, p); } #line 46 "parser.rl" { if (parser->fragment != NULL) { parser->fragment(parser->data, PTR_TO(mark), LEN(mark, p)); } } - break; - case 8: + goto st5; +tr34: +#line 46 "parser.rl" + { + if (parser->fragment != NULL) { + parser->fragment(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st5; +tr42: +#line 65 "parser.rl" + { + if (parser->request_path != NULL) { + parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p)); + } + } +#line 41 "parser.rl" + { + if (parser->request_uri != NULL) { + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st5; +tr48: #line 52 "parser.rl" {MARK(query_start, p); } - break; - case 9: #line 53 "parser.rl" { if (parser->query_string != NULL) { parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p)); } } - break; - case 10: +#line 41 "parser.rl" + { + if (parser->request_uri != NULL) { + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st5; +tr52: +#line 53 "parser.rl" + { + if (parser->query_string != NULL) { + parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p)); + } + } +#line 41 "parser.rl" + { + if (parser->request_uri != NULL) { + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st5; +st5: + if ( ++p == pe ) + goto _test_eof5; +case 5: +#line 235 "parser.c" + if ( (*p) == 72 ) + goto tr10; + goto st0; +tr10: +#line 22 "parser.rl" + {MARK(mark, p); } + goto st6; +st6: + if ( ++p == pe ) + goto _test_eof6; +case 6: +#line 247 "parser.c" + if ( (*p) == 84 ) + goto st7; + goto st0; +st7: + if ( ++p == pe ) + goto _test_eof7; +case 7: + if ( (*p) == 84 ) + goto st8; + goto st0; +st8: + if ( ++p == pe ) + goto _test_eof8; +case 8: + if ( (*p) == 80 ) + goto st9; + goto st0; +st9: + if ( ++p == pe ) + goto _test_eof9; +case 9: + if ( (*p) == 47 ) + goto st10; + goto st0; +st10: + if ( ++p == pe ) + goto _test_eof10; +case 10: + if ( 48 <= (*p) && (*p) <= 57 ) + goto st11; + goto st0; +st11: + if ( ++p == pe ) + goto _test_eof11; +case 11: + if ( (*p) == 46 ) + goto st12; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st11; + goto st0; +st12: + if ( ++p == pe ) + goto _test_eof12; +case 12: + if ( 48 <= (*p) && (*p) <= 57 ) + goto st13; + goto st0; +st13: + if ( ++p == pe ) + goto _test_eof13; +case 13: + if ( (*p) == 13 ) + goto tr18; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st13; + goto st0; +tr18: #line 59 "parser.rl" { if (parser->http_version != NULL) { parser->http_version(parser->data, PTR_TO(mark), LEN(mark, p)); } } - break; - case 11: -#line 65 "parser.rl" - { - if (parser->request_path != NULL) { - parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p)); + goto st14; +tr26: +#line 30 "parser.rl" + { MARK(mark, p); } +#line 31 "parser.rl" + { + if (parser->http_field != NULL) { + parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p)); } } - break; - case 12: + goto st14; +tr29: +#line 31 "parser.rl" + { + if (parser->http_field != NULL) { + parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, p)); + } + } + goto st14; +st14: + if ( ++p == pe ) + goto _test_eof14; +case 14: +#line 334 "parser.c" + if ( (*p) == 10 ) + goto st15; + goto st0; +st15: + if ( ++p == pe ) + goto _test_eof15; +case 15: + switch( (*p) ) { + case 13: goto st16; + case 33: goto tr21; + case 124: goto tr21; + case 126: goto tr21; + } + if ( (*p) < 45 ) { + if ( (*p) > 39 ) { + if ( 42 <= (*p) && (*p) <= 43 ) + goto tr21; + } else if ( (*p) >= 35 ) + goto tr21; + } else if ( (*p) > 46 ) { + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr21; + } else if ( (*p) > 90 ) { + if ( 94 <= (*p) && (*p) <= 122 ) + goto tr21; + } else + goto tr21; + } else + goto tr21; + goto st0; +st16: + if ( ++p == pe ) + goto _test_eof16; +case 16: + if ( (*p) == 10 ) + goto tr22; + goto st0; +tr22: #line 71 "parser.rl" { parser->body_start = p - buffer + 1; if (parser->header_done != NULL) { parser->header_done(parser->data, p + 1, pe - p - 1); } - {p++; goto _out; } + {p++; cs = 54; goto _out;} } - break; -#line 399 "parser.c" - } + goto st54; +st54: + if ( ++p == pe ) + goto _test_eof54; +case 54: +#line 387 "parser.c" + goto st0; +tr21: +#line 25 "parser.rl" + { MARK(field_start, p); } + goto st17; +st17: + if ( ++p == pe ) + goto _test_eof17; +case 17: +#line 397 "parser.c" + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 124: goto st17; + case 126: goto st17; } + if ( (*p) < 45 ) { + if ( (*p) > 39 ) { + if ( 42 <= (*p) && (*p) <= 43 ) + goto st17; + } else if ( (*p) >= 35 ) + goto st17; + } else if ( (*p) > 46 ) { + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st17; + } else if ( (*p) > 90 ) { + if ( 94 <= (*p) && (*p) <= 122 ) + goto st17; + } else + goto st17; + } else + goto st17; + goto st0; +tr24: +#line 26 "parser.rl" + { + parser->field_len = LEN(field_start, p); + } + goto st18; +tr27: +#line 30 "parser.rl" + { MARK(mark, p); } + goto st18; +st18: + if ( ++p == pe ) + goto _test_eof18; +case 18: +#line 436 "parser.c" + switch( (*p) ) { + case 13: goto tr26; + case 32: goto tr27; + } + goto tr25; +tr25: +#line 30 "parser.rl" + { MARK(mark, p); } + goto st19; +st19: + if ( ++p == pe ) + goto _test_eof19; +case 19: +#line 450 "parser.c" + if ( (*p) == 13 ) + goto tr29; + goto st19; +tr9: +#line 41 "parser.rl" + { + if (parser->request_uri != NULL) { + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st20; +tr43: +#line 65 "parser.rl" + { + if (parser->request_path != NULL) { + parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p)); + } + } +#line 41 "parser.rl" + { + if (parser->request_uri != NULL) { + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st20; +tr49: +#line 52 "parser.rl" + {MARK(query_start, p); } +#line 53 "parser.rl" + { + if (parser->query_string != NULL) { + parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p)); + } + } +#line 41 "parser.rl" + { + if (parser->request_uri != NULL) { + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st20; +tr53: +#line 53 "parser.rl" + { + if (parser->query_string != NULL) { + parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p)); + } + } +#line 41 "parser.rl" + { + if (parser->request_uri != NULL) { + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st20; +st20: + if ( ++p == pe ) + goto _test_eof20; +case 20: +#line 510 "parser.c" + switch( (*p) ) { + case 32: goto tr31; + case 35: goto st0; + case 37: goto tr32; + case 127: goto st0; + } + if ( 0 <= (*p) && (*p) <= 31 ) + goto st0; + goto tr30; +tr30: +#line 22 "parser.rl" + {MARK(mark, p); } + goto st21; +st21: + if ( ++p == pe ) + goto _test_eof21; +case 21: +#line 528 "parser.c" + switch( (*p) ) { + case 32: goto tr34; + case 35: goto st0; + case 37: goto st22; + case 127: goto st0; + } + if ( 0 <= (*p) && (*p) <= 31 ) + goto st0; + goto st21; +tr32: +#line 22 "parser.rl" + {MARK(mark, p); } + goto st22; +st22: + if ( ++p == pe ) + goto _test_eof22; +case 22: +#line 546 "parser.c" + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st23; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st23; + } else + goto st23; + goto st0; +st23: + if ( ++p == pe ) + goto _test_eof23; +case 23: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st21; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st21; + } else + goto st21; + goto st0; +tr5: +#line 22 "parser.rl" + {MARK(mark, p); } + goto st24; +st24: + if ( ++p == pe ) + goto _test_eof24; +case 24: +#line 577 "parser.c" + switch( (*p) ) { + case 43: goto st24; + case 58: goto st25; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st24; + } else if ( (*p) > 57 ) { + if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st24; + } else if ( (*p) >= 65 ) + goto st24; + } else + goto st24; + goto st0; +tr7: +#line 22 "parser.rl" + {MARK(mark, p); } + goto st25; +st25: + if ( ++p == pe ) + goto _test_eof25; +case 25: +#line 602 "parser.c" + switch( (*p) ) { + case 32: goto tr8; + case 35: goto tr9; + case 37: goto st26; + case 127: goto st0; + } + if ( 0 <= (*p) && (*p) <= 31 ) + goto st0; + goto st25; +st26: + if ( ++p == pe ) + goto _test_eof26; +case 26: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st27; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st27; + } else + goto st27; + goto st0; +st27: + if ( ++p == pe ) + goto _test_eof27; +case 27: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st25; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st25; + } else + goto st25; + goto st0; +tr6: +#line 22 "parser.rl" + {MARK(mark, p); } + goto st28; +st28: + if ( ++p == pe ) + goto _test_eof28; +case 28: +#line 646 "parser.c" + switch( (*p) ) { + case 32: goto tr42; + case 35: goto tr43; + case 37: goto st29; + case 63: goto tr45; + case 127: goto st0; + } + if ( 0 <= (*p) && (*p) <= 31 ) + goto st0; + goto st28; +st29: + if ( ++p == pe ) + goto _test_eof29; +case 29: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st30; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st30; + } else + goto st30; + goto st0; +st30: + if ( ++p == pe ) + goto _test_eof30; +case 30: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st28; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st28; + } else + goto st28; + goto st0; +tr45: +#line 65 "parser.rl" + { + if (parser->request_path != NULL) { + parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p)); + } + } + goto st31; +st31: + if ( ++p == pe ) + goto _test_eof31; +case 31: +#line 695 "parser.c" + switch( (*p) ) { + case 32: goto tr48; + case 35: goto tr49; + case 37: goto tr50; + case 127: goto st0; + } + if ( 0 <= (*p) && (*p) <= 31 ) + goto st0; + goto tr47; +tr47: +#line 52 "parser.rl" + {MARK(query_start, p); } + goto st32; +st32: + if ( ++p == pe ) + goto _test_eof32; +case 32: +#line 713 "parser.c" + switch( (*p) ) { + case 32: goto tr52; + case 35: goto tr53; + case 37: goto st33; + case 127: goto st0; + } + if ( 0 <= (*p) && (*p) <= 31 ) + goto st0; + goto st32; +tr50: +#line 52 "parser.rl" + {MARK(query_start, p); } + goto st33; +st33: + if ( ++p == pe ) + goto _test_eof33; +case 33: +#line 731 "parser.c" + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st34; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st34; + } else + goto st34; + goto st0; +st34: + if ( ++p == pe ) + goto _test_eof34; +case 34: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st32; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st32; + } else + goto st32; + goto st0; +st35: + if ( ++p == pe ) + goto _test_eof35; +case 35: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st36; + case 95: goto st36; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st36; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st36; + } else + goto st36; + goto st0; +st36: + if ( ++p == pe ) + goto _test_eof36; +case 36: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st37; + case 95: goto st37; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st37; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st37; + } else + goto st37; + goto st0; +st37: + if ( ++p == pe ) + goto _test_eof37; +case 37: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st38; + case 95: goto st38; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st38; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st38; + } else + goto st38; + goto st0; +st38: + if ( ++p == pe ) + goto _test_eof38; +case 38: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st39; + case 95: goto st39; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st39; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st39; + } else + goto st39; + goto st0; +st39: + if ( ++p == pe ) + goto _test_eof39; +case 39: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st40; + case 95: goto st40; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st40; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st40; + } else + goto st40; + goto st0; +st40: + if ( ++p == pe ) + goto _test_eof40; +case 40: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st41; + case 95: goto st41; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st41; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st41; + } else + goto st41; + goto st0; +st41: + if ( ++p == pe ) + goto _test_eof41; +case 41: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st42; + case 95: goto st42; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st42; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st42; + } else + goto st42; + goto st0; +st42: + if ( ++p == pe ) + goto _test_eof42; +case 42: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st43; + case 95: goto st43; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st43; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st43; + } else + goto st43; + goto st0; +st43: + if ( ++p == pe ) + goto _test_eof43; +case 43: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st44; + case 95: goto st44; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st44; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st44; + } else + goto st44; + goto st0; +st44: + if ( ++p == pe ) + goto _test_eof44; +case 44: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st45; + case 95: goto st45; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st45; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st45; + } else + goto st45; + goto st0; +st45: + if ( ++p == pe ) + goto _test_eof45; +case 45: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st46; + case 95: goto st46; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st46; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st46; + } else + goto st46; + goto st0; +st46: + if ( ++p == pe ) + goto _test_eof46; +case 46: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st47; + case 95: goto st47; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st47; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st47; + } else + goto st47; + goto st0; +st47: + if ( ++p == pe ) + goto _test_eof47; +case 47: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st48; + case 95: goto st48; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st48; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st48; + } else + goto st48; + goto st0; +st48: + if ( ++p == pe ) + goto _test_eof48; +case 48: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st49; + case 95: goto st49; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st49; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st49; + } else + goto st49; + goto st0; +st49: + if ( ++p == pe ) + goto _test_eof49; +case 49: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st50; + case 95: goto st50; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st50; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st50; + } else + goto st50; + goto st0; +st50: + if ( ++p == pe ) + goto _test_eof50; +case 50: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st51; + case 95: goto st51; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st51; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st51; + } else + goto st51; + goto st0; +st51: + if ( ++p == pe ) + goto _test_eof51; +case 51: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st52; + case 95: goto st52; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st52; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st52; + } else + goto st52; + goto st0; +st52: + if ( ++p == pe ) + goto _test_eof52; +case 52: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st53; + case 95: goto st53; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st53; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st53; + } else + goto st53; + goto st0; +st53: + if ( ++p == pe ) + goto _test_eof53; +case 53: + if ( (*p) == 32 ) + goto tr2; + goto st0; + } + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof54: cs = 54; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof28: cs = 28; goto _test_eof; + _test_eof29: cs = 29; goto _test_eof; + _test_eof30: cs = 30; goto _test_eof; + _test_eof31: cs = 31; goto _test_eof; + _test_eof32: cs = 32; goto _test_eof; + _test_eof33: cs = 33; goto _test_eof; + _test_eof34: cs = 34; goto _test_eof; + _test_eof35: cs = 35; goto _test_eof; + _test_eof36: cs = 36; goto _test_eof; + _test_eof37: cs = 37; goto _test_eof; + _test_eof38: cs = 38; goto _test_eof; + _test_eof39: cs = 39; goto _test_eof; + _test_eof40: cs = 40; goto _test_eof; + _test_eof41: cs = 41; goto _test_eof; + _test_eof42: cs = 42; goto _test_eof; + _test_eof43: cs = 43; goto _test_eof; + _test_eof44: cs = 44; goto _test_eof; + _test_eof45: cs = 45; goto _test_eof; + _test_eof46: cs = 46; goto _test_eof; + _test_eof47: cs = 47; goto _test_eof; + _test_eof48: cs = 48; goto _test_eof; + _test_eof49: cs = 49; goto _test_eof; + _test_eof50: cs = 50; goto _test_eof; + _test_eof51: cs = 51; goto _test_eof; + _test_eof52: cs = 52; goto _test_eof; + _test_eof53: cs = 53; goto _test_eof; -_again: - if ( cs == 0 ) - goto _out; - if ( ++p != pe ) - goto _resume; _test_eof: {} _out: {} } + #line 116 "parser.rl" parser->cs = cs; parser->nread += p - (buffer + off);