ext/thin_parser/parser.c in thin-1.0.0 vs ext/thin_parser/parser.c in thin-1.2.1
- old
+ new
@@ -20,22 +20,190 @@
/** 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
+};
+
static const int http_parser_start = 1;
static const int http_parser_first_final = 57;
static const int http_parser_error = 0;
static const int http_parser_en_main = 1;
#line 85 "parser.rl"
-int http_parser_init(http_parser *parser) {
+int thin_http_parser_init(http_parser *parser) {
int cs = 0;
-#line 37 "parser.c"
+#line 205 "parser.c"
{
cs = http_parser_start;
}
#line 89 "parser.rl"
parser->cs = cs;
@@ -49,11 +217,11 @@
return(1);
}
/** exec **/
-size_t http_parser_execute(http_parser *parser, const char *buffer, size_t len, size_t off) {
+size_t thin_http_parser_execute(http_parser *parser, const char *buffer, size_t len, size_t off) {
const char *p, *pe;
int cs = parser->cs;
assert(off <= len && "offset past end of buffer");
@@ -63,1110 +231,182 @@
assert(*pe == '\0' && "pointer does not end on NUL");
assert(pe - p == len - off && "pointers aren't same distance");
-#line 69 "parser.c"
+#line 237 "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;
- switch ( cs )
- {
-case 1:
- switch( (*p) ) {
- case 36: goto tr0;
- case 95: goto tr0;
+_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;
}
- 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:
- goto _out0;
-tr0:
+
+ _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 ( *_acts++ )
+ {
+ case 0:
#line 22 "parser.rl"
{MARK(mark, p); }
- goto st2;
-st2:
- if ( ++p == pe )
- goto _out2;
-case 2:
-#line 99 "parser.c"
- 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;
-tr2:
+ 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:
#line 36 "parser.rl"
{
if (parser->request_method != NULL) {
parser->request_method(parser->data, PTR_TO(mark), LEN(mark, p));
}
}
- goto st3;
-st3:
- if ( ++p == pe )
- goto _out3;
-case 3:
-#line 126 "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 _out4;
-case 4:
-#line 150 "parser.c"
- switch( (*p) ) {
- case 32: goto tr8;
- case 35: goto tr9;
- }
- goto st0;
-tr8:
+ break;
+ case 6:
#line 41 "parser.rl"
{
if (parser->request_uri != NULL) {
parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
}
}
- goto st5;
-tr30:
+ break;
+ case 7:
#line 46 "parser.rl"
{
if (parser->fragment != NULL) {
parser->fragment(parser->data, PTR_TO(mark), LEN(mark, p));
}
}
- goto st5;
-tr40:
-#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;
-tr51:
+ break;
+ case 8:
#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));
}
}
-#line 41 "parser.rl"
- {
- if (parser->request_uri != NULL) {
- parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p));
- }
- }
- goto st5;
-tr55:
-#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 _out5;
-case 5:
-#line 220 "parser.c"
- if ( (*p) == 72 )
- goto tr10;
- goto st0;
-tr10:
-#line 22 "parser.rl"
- {MARK(mark, p); }
- goto st6;
-st6:
- if ( ++p == pe )
- goto _out6;
-case 6:
-#line 232 "parser.c"
- if ( (*p) == 84 )
- goto st7;
- goto st0;
-st7:
- if ( ++p == pe )
- goto _out7;
-case 7:
- if ( (*p) == 84 )
- goto st8;
- goto st0;
-st8:
- if ( ++p == pe )
- goto _out8;
-case 8:
- if ( (*p) == 80 )
- goto st9;
- goto st0;
-st9:
- if ( ++p == pe )
- goto _out9;
-case 9:
- if ( (*p) == 47 )
- goto st10;
- goto st0;
-st10:
- if ( ++p == pe )
- goto _out10;
-case 10:
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st11;
- goto st0;
-st11:
- if ( ++p == pe )
- goto _out11;
-case 11:
- if ( (*p) == 46 )
- goto st12;
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st11;
- goto st0;
-st12:
- if ( ++p == pe )
- goto _out12;
-case 12:
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st13;
- goto st0;
-st13:
- if ( ++p == pe )
- goto _out13;
-case 13:
- if ( (*p) == 13 )
- goto tr18;
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st13;
- goto st0;
-tr18:
+ break;
+ case 10:
#line 59 "parser.rl"
{
if (parser->http_version != NULL) {
parser->http_version(parser->data, PTR_TO(mark), LEN(mark, p));
}
}
- goto st14;
-tr26:
-#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 11:
+#line 65 "parser.rl"
+ {
+ if (parser->request_path != NULL) {
+ parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
}
}
- goto st14;
-st14:
- if ( ++p == pe )
- goto _out14;
-case 14:
-#line 309 "parser.c"
- if ( (*p) == 10 )
- goto st15;
- goto st0;
-st15:
- if ( ++p == pe )
- goto _out15;
-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 _out16;
-case 16:
- if ( (*p) == 10 )
- goto tr22;
- goto st0;
-tr22:
+ break;
+ case 12:
#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);
}
- goto _out57;
+ {p++; goto _out; }
}
- goto st57;
-st57:
- if ( ++p == pe )
- goto _out57;
-case 57:
-#line 362 "parser.c"
- goto st0;
-tr21:
-#line 25 "parser.rl"
- { MARK(field_start, p); }
- goto st17;
-st17:
- if ( ++p == pe )
- goto _out17;
-case 17:
-#line 372 "parser.c"
- switch( (*p) ) {
- case 33: goto st17;
- case 58: goto tr24;
- case 124: goto st17;
- case 126: goto st17;
+ break;
+#line 399 "parser.c"
+ }
}
- 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 _out18;
-case 18:
-#line 411 "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 _out19;
-case 19:
-#line 425 "parser.c"
- if ( (*p) == 13 )
- goto tr26;
- 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;
-tr41:
-#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;
-tr52:
-#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;
-tr56:
-#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 _out20;
-case 20:
-#line 485 "parser.c"
- switch( (*p) ) {
- case 32: goto tr30;
- case 35: goto st0;
- case 37: goto tr31;
- case 127: goto st0;
- }
- if ( 0 <= (*p) && (*p) <= 31 )
- goto st0;
- goto tr29;
-tr29:
-#line 22 "parser.rl"
- {MARK(mark, p); }
- goto st21;
-st21:
- if ( ++p == pe )
- goto _out21;
-case 21:
-#line 503 "parser.c"
- switch( (*p) ) {
- case 32: goto tr30;
- case 35: goto st0;
- case 37: goto st22;
- case 127: goto st0;
- }
- if ( 0 <= (*p) && (*p) <= 31 )
- goto st0;
- goto st21;
-tr31:
-#line 22 "parser.rl"
- {MARK(mark, p); }
- goto st22;
-st22:
- if ( ++p == pe )
- goto _out22;
-case 22:
-#line 521 "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 _out23;
-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 _out24;
-case 24:
-#line 552 "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 _out25;
-case 25:
-#line 577 "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 _out26;
-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 _out27;
-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 _out28;
-case 28:
-#line 621 "parser.c"
- switch( (*p) ) {
- case 32: goto tr40;
- case 35: goto tr41;
- case 37: goto st29;
- case 59: goto tr43;
- case 63: goto tr44;
- case 127: goto st0;
- }
- if ( 0 <= (*p) && (*p) <= 31 )
- goto st0;
- goto st28;
-st29:
- if ( ++p == pe )
- goto _out29;
-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 _out30;
-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;
-tr43:
-#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 _out31;
-case 31:
-#line 671 "parser.c"
- switch( (*p) ) {
- case 32: goto tr8;
- case 35: goto tr9;
- case 37: goto st32;
- case 63: goto st34;
- case 127: goto st0;
- }
- if ( 0 <= (*p) && (*p) <= 31 )
- goto st0;
- goto st31;
-st32:
- if ( ++p == pe )
- goto _out32;
-case 32:
- if ( (*p) < 65 ) {
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st33;
- } else if ( (*p) > 70 ) {
- if ( 97 <= (*p) && (*p) <= 102 )
- goto st33;
- } else
- goto st33;
- goto st0;
-st33:
- if ( ++p == pe )
- goto _out33;
-case 33:
- if ( (*p) < 65 ) {
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st31;
- } else if ( (*p) > 70 ) {
- if ( 97 <= (*p) && (*p) <= 102 )
- goto st31;
- } else
- goto st31;
- goto st0;
-tr44:
-#line 65 "parser.rl"
- {
- if (parser->request_path != NULL) {
- parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p));
- }
- }
- goto st34;
-st34:
- if ( ++p == pe )
- goto _out34;
-case 34:
-#line 720 "parser.c"
- switch( (*p) ) {
- case 32: goto tr51;
- case 35: goto tr52;
- case 37: goto tr53;
- case 127: goto st0;
- }
- if ( 0 <= (*p) && (*p) <= 31 )
- goto st0;
- goto tr50;
-tr50:
-#line 52 "parser.rl"
- {MARK(query_start, p); }
- goto st35;
-st35:
- if ( ++p == pe )
- goto _out35;
-case 35:
-#line 738 "parser.c"
- switch( (*p) ) {
- case 32: goto tr55;
- case 35: goto tr56;
- case 37: goto st36;
- case 127: goto st0;
- }
- if ( 0 <= (*p) && (*p) <= 31 )
- goto st0;
- goto st35;
-tr53:
-#line 52 "parser.rl"
- {MARK(query_start, p); }
- goto st36;
-st36:
- if ( ++p == pe )
- goto _out36;
-case 36:
-#line 756 "parser.c"
- if ( (*p) < 65 ) {
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st37;
- } else if ( (*p) > 70 ) {
- if ( 97 <= (*p) && (*p) <= 102 )
- goto st37;
- } else
- goto st37;
- goto st0;
-st37:
- if ( ++p == pe )
- goto _out37;
-case 37:
- if ( (*p) < 65 ) {
- if ( 48 <= (*p) && (*p) <= 57 )
- goto st35;
- } else if ( (*p) > 70 ) {
- if ( 97 <= (*p) && (*p) <= 102 )
- goto st35;
- } else
- goto st35;
- goto st0;
-st38:
- if ( ++p == pe )
- goto _out38;
-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 _out39;
-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 _out40;
-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 _out41;
-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 _out42;
-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 _out43;
-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 _out44;
-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 _out45;
-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 _out46;
-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 _out47;
-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 _out48;
-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 _out49;
-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 _out50;
-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 _out51;
-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 _out52;
-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 _out53;
-case 53:
- switch( (*p) ) {
- case 32: goto tr2;
- case 36: goto st54;
- case 95: goto st54;
- }
- if ( (*p) < 48 ) {
- if ( 45 <= (*p) && (*p) <= 46 )
- goto st54;
- } else if ( (*p) > 57 ) {
- if ( 65 <= (*p) && (*p) <= 90 )
- goto st54;
- } else
- goto st54;
- goto st0;
-st54:
- if ( ++p == pe )
- goto _out54;
-case 54:
- switch( (*p) ) {
- case 32: goto tr2;
- case 36: goto st55;
- case 95: goto st55;
- }
- if ( (*p) < 48 ) {
- if ( 45 <= (*p) && (*p) <= 46 )
- goto st55;
- } else if ( (*p) > 57 ) {
- if ( 65 <= (*p) && (*p) <= 90 )
- goto st55;
- } else
- goto st55;
- goto st0;
-st55:
- if ( ++p == pe )
- goto _out55;
-case 55:
- switch( (*p) ) {
- case 32: goto tr2;
- case 36: goto st56;
- case 95: goto st56;
- }
- if ( (*p) < 48 ) {
- if ( 45 <= (*p) && (*p) <= 46 )
- goto st56;
- } else if ( (*p) > 57 ) {
- if ( 65 <= (*p) && (*p) <= 90 )
- goto st56;
- } else
- goto st56;
- goto st0;
-st56:
- if ( ++p == pe )
- goto _out56;
-case 56:
- if ( (*p) == 32 )
- goto tr2;
- goto st0;
- }
- _out0: cs = 0; goto _out;
- _out2: cs = 2; goto _out;
- _out3: cs = 3; goto _out;
- _out4: cs = 4; goto _out;
- _out5: cs = 5; goto _out;
- _out6: cs = 6; goto _out;
- _out7: cs = 7; goto _out;
- _out8: cs = 8; goto _out;
- _out9: cs = 9; goto _out;
- _out10: cs = 10; goto _out;
- _out11: cs = 11; goto _out;
- _out12: cs = 12; goto _out;
- _out13: cs = 13; goto _out;
- _out14: cs = 14; goto _out;
- _out15: cs = 15; goto _out;
- _out16: cs = 16; goto _out;
- _out57: cs = 57; goto _out;
- _out17: cs = 17; goto _out;
- _out18: cs = 18; goto _out;
- _out19: cs = 19; goto _out;
- _out20: cs = 20; goto _out;
- _out21: cs = 21; goto _out;
- _out22: cs = 22; goto _out;
- _out23: cs = 23; goto _out;
- _out24: cs = 24; goto _out;
- _out25: cs = 25; goto _out;
- _out26: cs = 26; goto _out;
- _out27: cs = 27; goto _out;
- _out28: cs = 28; goto _out;
- _out29: cs = 29; goto _out;
- _out30: cs = 30; goto _out;
- _out31: cs = 31; goto _out;
- _out32: cs = 32; goto _out;
- _out33: cs = 33; goto _out;
- _out34: cs = 34; goto _out;
- _out35: cs = 35; goto _out;
- _out36: cs = 36; goto _out;
- _out37: cs = 37; goto _out;
- _out38: cs = 38; goto _out;
- _out39: cs = 39; goto _out;
- _out40: cs = 40; goto _out;
- _out41: cs = 41; goto _out;
- _out42: cs = 42; goto _out;
- _out43: cs = 43; goto _out;
- _out44: cs = 44; goto _out;
- _out45: cs = 45; goto _out;
- _out46: cs = 46; goto _out;
- _out47: cs = 47; goto _out;
- _out48: cs = 48; goto _out;
- _out49: cs = 49; goto _out;
- _out50: cs = 50; goto _out;
- _out51: cs = 51; goto _out;
- _out52: cs = 52; goto _out;
- _out53: cs = 53; goto _out;
- _out54: cs = 54; goto _out;
- _out55: cs = 55; goto _out;
- _out56: cs = 56; goto _out;
+_again:
+ if ( cs == 0 )
+ goto _out;
+ if ( ++p != pe )
+ goto _resume;
+ _test_eof: {}
_out: {}
}
#line 116 "parser.rl"
parser->cs = cs;
@@ -1179,40 +419,34 @@
assert(parser->field_len <= len && "field has length longer than whole buffer");
assert(parser->field_start < len && "field starts after buffer end");
if(parser->body_start) {
/* final \r\n combo encountered so stop right here */
-
-#line 1186 "parser.c"
-#line 130 "parser.rl"
parser->nread++;
}
return(parser->nread);
}
-int http_parser_finish(http_parser *parser)
+int thin_http_parser_finish(http_parser *parser)
{
int cs = parser->cs;
-
-#line 1199 "parser.c"
-#line 141 "parser.rl"
parser->cs = cs;
- if (http_parser_has_error(parser) ) {
+ if (thin_http_parser_has_error(parser) ) {
return -1;
- } else if (http_parser_is_finished(parser) ) {
+ } else if (thin_http_parser_is_finished(parser) ) {
return 1;
} else {
return 0;
}
}
-int http_parser_has_error(http_parser *parser) {
+int thin_http_parser_has_error(http_parser *parser) {
return parser->cs == http_parser_error;
}
-int http_parser_is_finished(http_parser *parser) {
+int thin_http_parser_is_finished(http_parser *parser) {
return parser->cs == http_parser_first_final;
}