1 #line 1 "src/parser.rl"
3 * Copyright (c) 2005 Zed A. Shaw
4 * You can redistribute it and/or modify it under the same terms as Ruby.
15 #define LEN(AT, FPC) (FPC - buffer - parser->AT)
16 #define MARK(M,FPC) (parser->M = (FPC) - buffer)
17 #define PTR_TO(F) (buffer + parser->F)
19 #line 139 "src/parser.rl"
24 #line 25 "src/parser.c"
25 static const int http_parser_start
= 1;
26 static const int http_parser_first_final
= 118;
27 static const int http_parser_error
= 0;
29 static const int http_parser_en_main
= 1;
31 #line 143 "src/parser.rl"
33 /* returns TRUE if applied, FALSE if there was an error */
34 static int apply_element(http_parser
*parser
, int type
, const char *begin
, const char *end
, int max_length
)
36 int len
= (int)(end
-begin
);
37 if(len
> max_length
) {
38 parser
->overflow_error
= TRUE
;
41 if(parser
->on_element
)
42 parser
->on_element(parser
->data
, type
, begin
, len
);
46 static void set_content_length(http_parser
*parser
, const char *at
, int length
)
48 /* atoi_length - why isn't this in the statndard library? i hate c */
49 assert(parser
->content_length
== 0);
51 for(mult
=1, i
=length
-1; i
>=0; i
--, mult
*=10)
52 parser
->content_length
+= (at
[i
] - '0') * mult
;
55 void http_parser_init(http_parser
*parser
) {
58 #line 59 "src/parser.c"
60 cs
= http_parser_start
;
62 #line 169 "src/parser.rl"
64 parser
->overflow_error
= FALSE
;
65 parser
->body_start
= 0;
66 parser
->content_length
= 0;
69 parser
->field_len
= 0;
70 parser
->field_start
= 0;
72 parser
->http_field
= NULL
;
77 size_t http_parser_execute(http_parser
*parser
, const char *buffer
, size_t len
, size_t off
) {
81 assert(off
<= len
&& "offset past end of buffer");
86 /* Ragel 6 does not require this */
87 // assert(*pe == '\0' && "pointer does not end on NUL");
88 assert(pe
- p
== len
- off
&& "pointers aren't same distance");
91 #line 92 "src/parser.c"
103 if ( 45 <= (*p
) && (*p
) <= 46 )
105 } else if ( (*p
) > 57 ) {
106 if ( 65 <= (*p
) && (*p
) <= 90 )
115 #line 21 "src/parser.rl"
122 #line 123 "src/parser.c"
129 if ( 45 <= (*p
) && (*p
) <= 46 )
131 } else if ( (*p
) > 57 ) {
132 if ( 65 <= (*p
) && (*p
) <= 90 )
138 #line 66 "src/parser.rl"
140 if(!apply_element(parser
, MONGREL_REQUEST_METHOD
, PTR_TO(mark
), p
, 1024))
141 {p
++; cs
= 3; goto _out
;}
148 #line 149 "src/parser.c"
156 if ( 45 <= (*p
) && (*p
) <= 57 )
158 } else if ( (*p
) > 90 ) {
159 if ( 97 <= (*p
) && (*p
) <= 122 )
165 #line 21 "src/parser.rl"
172 #line 173 "src/parser.c"
179 #line 71 "src/parser.rl"
181 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
182 {p
++; cs
= 5; goto _out
;}
186 #line 21 "src/parser.rl"
188 #line 51 "src/parser.rl"
190 if(!apply_element(parser
, MONGREL_FRAGMENT
, PTR_TO(mark
), p
, 10*1024))
191 {p
++; cs
= 5; goto _out
;}
195 #line 51 "src/parser.rl"
197 if(!apply_element(parser
, MONGREL_FRAGMENT
, PTR_TO(mark
), p
, 10*1024))
198 {p
++; cs
= 5; goto _out
;}
202 #line 61 "src/parser.rl"
204 if(!apply_element(parser
, MONGREL_REQUEST_PATH
, PTR_TO(mark
), p
, 1024))
205 {p
++; cs
= 5; goto _out
;}
207 #line 71 "src/parser.rl"
209 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
210 {p
++; cs
= 5; goto _out
;}
214 #line 76 "src/parser.rl"
215 {MARK(query_start
, p
); }
216 #line 77 "src/parser.rl"
218 if(!apply_element(parser
, MONGREL_QUERY_STRING
, PTR_TO(query_start
), p
, 10*1024))
219 {p
++; cs
= 5; goto _out
;}
221 #line 71 "src/parser.rl"
223 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
224 {p
++; cs
= 5; goto _out
;}
228 #line 77 "src/parser.rl"
230 if(!apply_element(parser
, MONGREL_QUERY_STRING
, PTR_TO(query_start
), p
, 10*1024))
231 {p
++; cs
= 5; goto _out
;}
233 #line 71 "src/parser.rl"
235 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
236 {p
++; cs
= 5; goto _out
;}
243 #line 244 "src/parser.c"
248 #line 21 "src/parser.rl"
255 #line 256 "src/parser.c"
284 if ( 48 <= (*p
) && (*p
) <= 57 )
293 if ( 48 <= (*p
) && (*p
) <= 57 )
300 if ( 48 <= (*p
) && (*p
) <= 57 )
309 if ( 48 <= (*p
) && (*p
) <= 57 )
313 #line 56 "src/parser.rl"
315 if(!apply_element(parser
, MONGREL_HTTP_VERSION
, PTR_TO(mark
), p
, 10))
316 {p
++; cs
= 14; goto _out
;}
320 #line 32 "src/parser.rl"
322 #line 33 "src/parser.rl"
324 if(LEN(mark
, p
) > 80 * 1024) { parser
->overflow_error
= TRUE
; {p
++; cs
= 14; goto _out
;} }
325 if(parser
->http_field
!= NULL
) {
326 parser
->http_field(parser
->data
, PTR_TO(field_start
), parser
->field_len
, PTR_TO(mark
), LEN(mark
, p
));
331 #line 33 "src/parser.rl"
333 if(LEN(mark
, p
) > 80 * 1024) { parser
->overflow_error
= TRUE
; {p
++; cs
= 14; goto _out
;} }
334 if(parser
->http_field
!= NULL
) {
335 parser
->http_field(parser
->data
, PTR_TO(field_start
), parser
->field_len
, PTR_TO(mark
), LEN(mark
, p
));
340 #line 40 "src/parser.rl"
342 if(!apply_element(parser
, MONGREL_CONTENT_LENGTH
, PTR_TO(mark
), p
, 20))
343 {p
++; cs
= 14; goto _out
;}
344 set_content_length(parser
, PTR_TO(mark
), LEN(mark
, p
));
348 #line 21 "src/parser.rl"
350 #line 46 "src/parser.rl"
352 if(!apply_element(parser
, MONGREL_CONTENT_TYPE
, PTR_TO(mark
), p
, 10*1024))
353 {p
++; cs
= 14; goto _out
;}
357 #line 46 "src/parser.rl"
359 if(!apply_element(parser
, MONGREL_CONTENT_TYPE
, PTR_TO(mark
), p
, 10*1024))
360 {p
++; cs
= 14; goto _out
;}
367 #line 368 "src/parser.c"
385 if ( 42 <= (*p
) && (*p
) <= 43 )
387 } else if ( (*p
) >= 35 )
389 } else if ( (*p
) > 46 ) {
391 if ( 48 <= (*p
) && (*p
) <= 57 )
393 } else if ( (*p
) > 90 ) {
394 if ( 94 <= (*p
) && (*p
) <= 122 )
409 #line 82 "src/parser.rl"
411 parser
->body_start
= p
- buffer
+ 1;
412 {p
++; cs
= 118; goto _out
;}
419 #line 420 "src/parser.c"
422 #line 23 "src/parser.rl"
423 { MARK(field_start
, p
); }
429 #line 430 "src/parser.c"
440 if ( 42 <= (*p
) && (*p
) <= 43 )
442 } else if ( (*p
) >= 35 )
444 } else if ( (*p
) > 46 ) {
446 if ( 48 <= (*p
) && (*p
) <= 57 )
448 } else if ( (*p
) > 90 ) {
449 if ( 94 <= (*p
) && (*p
) <= 122 )
457 #line 24 "src/parser.rl"
459 parser
->field_len
= LEN(field_start
, p
);
460 if(parser
->field_len
> 256) {
461 parser
->overflow_error
= TRUE
;
462 {p
++; cs
= 18; goto _out
;}
467 #line 32 "src/parser.rl"
474 #line 475 "src/parser.c"
483 #line 32 "src/parser.rl"
490 #line 491 "src/parser.c"
498 #line 32 "src/parser.rl"
505 #line 506 "src/parser.c"
680 if ( 48 <= (*p
) && (*p
) <= 57 )
684 #line 21 "src/parser.rl"
688 #line 32 "src/parser.rl"
690 #line 21 "src/parser.rl"
697 #line 698 "src/parser.c"
703 if ( 48 <= (*p
) && (*p
) <= 57 )
769 if ( 42 <= (*p
) && (*p
) <= 43 )
771 } else if ( (*p
) >= 35 )
773 } else if ( (*p
) > 46 ) {
775 if ( 48 <= (*p
) && (*p
) <= 57 )
777 } else if ( (*p
) > 90 ) {
778 if ( 94 <= (*p
) && (*p
) <= 122 )
801 if ( 42 <= (*p
) && (*p
) <= 43 )
803 } else if ( (*p
) >= 35 )
805 } else if ( (*p
) > 46 ) {
807 if ( 48 <= (*p
) && (*p
) <= 57 )
809 } else if ( (*p
) > 90 ) {
810 if ( 94 <= (*p
) && (*p
) <= 122 )
833 if ( 42 <= (*p
) && (*p
) <= 43 )
835 } else if ( (*p
) >= 35 )
837 } else if ( (*p
) > 46 ) {
839 if ( 48 <= (*p
) && (*p
) <= 57 )
841 } else if ( (*p
) > 90 ) {
842 if ( 94 <= (*p
) && (*p
) <= 122 )
865 if ( 42 <= (*p
) && (*p
) <= 43 )
867 } else if ( (*p
) >= 35 )
869 } else if ( (*p
) > 46 ) {
871 if ( 48 <= (*p
) && (*p
) <= 57 )
873 } else if ( (*p
) > 90 ) {
874 if ( 94 <= (*p
) && (*p
) <= 122 )
897 if ( 42 <= (*p
) && (*p
) <= 43 )
899 } else if ( (*p
) >= 35 )
901 } else if ( (*p
) > 46 ) {
903 if ( 48 <= (*p
) && (*p
) <= 57 )
905 } else if ( (*p
) > 90 ) {
906 if ( 94 <= (*p
) && (*p
) <= 122 )
929 if ( 42 <= (*p
) && (*p
) <= 43 )
931 } else if ( (*p
) >= 35 )
933 } else if ( (*p
) > 46 ) {
935 if ( 48 <= (*p
) && (*p
) <= 57 )
937 } else if ( (*p
) > 90 ) {
938 if ( 94 <= (*p
) && (*p
) <= 122 )
961 if ( 42 <= (*p
) && (*p
) <= 43 )
963 } else if ( (*p
) >= 35 )
965 } else if ( (*p
) > 57 ) {
967 if ( 94 <= (*p
) && (*p
) <= 122 )
969 } else if ( (*p
) >= 65 )
992 if ( 42 <= (*p
) && (*p
) <= 43 )
994 } else if ( (*p
) >= 35 )
996 } else if ( (*p
) > 46 ) {
998 if ( 48 <= (*p
) && (*p
) <= 57 )
1000 } else if ( (*p
) > 90 ) {
1001 if ( 94 <= (*p
) && (*p
) <= 122 )
1018 case 101: goto st49
;
1019 case 124: goto st17
;
1020 case 126: goto st17
;
1024 if ( 42 <= (*p
) && (*p
) <= 43 )
1026 } else if ( (*p
) >= 35 )
1028 } else if ( (*p
) > 46 ) {
1030 if ( 48 <= (*p
) && (*p
) <= 57 )
1032 } else if ( (*p
) > 90 ) {
1033 if ( 94 <= (*p
) && (*p
) <= 122 )
1050 case 110: goto st50
;
1051 case 124: goto st17
;
1052 case 126: goto st17
;
1056 if ( 42 <= (*p
) && (*p
) <= 43 )
1058 } else if ( (*p
) >= 35 )
1060 } else if ( (*p
) > 46 ) {
1062 if ( 48 <= (*p
) && (*p
) <= 57 )
1064 } else if ( (*p
) > 90 ) {
1065 if ( 94 <= (*p
) && (*p
) <= 122 )
1082 case 103: goto st51
;
1083 case 124: goto st17
;
1084 case 126: goto st17
;
1088 if ( 42 <= (*p
) && (*p
) <= 43 )
1090 } else if ( (*p
) >= 35 )
1092 } else if ( (*p
) > 46 ) {
1094 if ( 48 <= (*p
) && (*p
) <= 57 )
1096 } else if ( (*p
) > 90 ) {
1097 if ( 94 <= (*p
) && (*p
) <= 122 )
1114 case 116: goto st52
;
1115 case 124: goto st17
;
1116 case 126: goto st17
;
1120 if ( 42 <= (*p
) && (*p
) <= 43 )
1122 } else if ( (*p
) >= 35 )
1124 } else if ( (*p
) > 46 ) {
1126 if ( 48 <= (*p
) && (*p
) <= 57 )
1128 } else if ( (*p
) > 90 ) {
1129 if ( 94 <= (*p
) && (*p
) <= 122 )
1146 case 104: goto st53
;
1147 case 124: goto st17
;
1148 case 126: goto st17
;
1152 if ( 42 <= (*p
) && (*p
) <= 43 )
1154 } else if ( (*p
) >= 35 )
1156 } else if ( (*p
) > 46 ) {
1158 if ( 48 <= (*p
) && (*p
) <= 57 )
1160 } else if ( (*p
) > 90 ) {
1161 if ( 94 <= (*p
) && (*p
) <= 122 )
1177 case 124: goto st17
;
1178 case 126: goto st17
;
1182 if ( 42 <= (*p
) && (*p
) <= 43 )
1184 } else if ( (*p
) >= 35 )
1186 } else if ( (*p
) > 46 ) {
1188 if ( 48 <= (*p
) && (*p
) <= 57 )
1190 } else if ( (*p
) > 90 ) {
1191 if ( 94 <= (*p
) && (*p
) <= 122 )
1199 #line 24 "src/parser.rl"
1201 parser
->field_len
= LEN(field_start
, p
);
1202 if(parser
->field_len
> 256) {
1203 parser
->overflow_error
= TRUE
;
1204 {p
++; cs
= 54; goto _out
;}
1209 #line 32 "src/parser.rl"
1216 #line 1217 "src/parser.c"
1223 if ( 48 <= (*p
) && (*p
) <= 57 )
1236 case 121: goto st56
;
1237 case 124: goto st17
;
1238 case 126: goto st17
;
1242 if ( 42 <= (*p
) && (*p
) <= 43 )
1244 } else if ( (*p
) >= 35 )
1246 } else if ( (*p
) > 46 ) {
1248 if ( 48 <= (*p
) && (*p
) <= 57 )
1250 } else if ( (*p
) > 90 ) {
1251 if ( 94 <= (*p
) && (*p
) <= 122 )
1268 case 112: goto st57
;
1269 case 124: goto st17
;
1270 case 126: goto st17
;
1274 if ( 42 <= (*p
) && (*p
) <= 43 )
1276 } else if ( (*p
) >= 35 )
1278 } else if ( (*p
) > 46 ) {
1280 if ( 48 <= (*p
) && (*p
) <= 57 )
1282 } else if ( (*p
) > 90 ) {
1283 if ( 94 <= (*p
) && (*p
) <= 122 )
1300 case 101: goto st58
;
1301 case 124: goto st17
;
1302 case 126: goto st17
;
1306 if ( 42 <= (*p
) && (*p
) <= 43 )
1308 } else if ( (*p
) >= 35 )
1310 } else if ( (*p
) > 46 ) {
1312 if ( 48 <= (*p
) && (*p
) <= 57 )
1314 } else if ( (*p
) > 90 ) {
1315 if ( 94 <= (*p
) && (*p
) <= 122 )
1330 case 124: goto st17
;
1331 case 126: goto st17
;
1335 if ( 42 <= (*p
) && (*p
) <= 43 )
1337 } else if ( (*p
) >= 35 )
1339 } else if ( (*p
) > 46 ) {
1341 if ( 48 <= (*p
) && (*p
) <= 57 )
1343 } else if ( (*p
) > 90 ) {
1344 if ( 94 <= (*p
) && (*p
) <= 122 )
1352 #line 23 "src/parser.rl"
1353 { MARK(field_start
, p
); }
1359 #line 1360 "src/parser.c"
1366 case 111: goto st60
;
1367 case 124: goto st17
;
1368 case 126: goto st17
;
1372 if ( 42 <= (*p
) && (*p
) <= 43 )
1374 } else if ( (*p
) >= 35 )
1376 } else if ( (*p
) > 46 ) {
1378 if ( 48 <= (*p
) && (*p
) <= 57 )
1380 } else if ( (*p
) > 90 ) {
1381 if ( 94 <= (*p
) && (*p
) <= 122 )
1398 case 110: goto st61
;
1399 case 124: goto st17
;
1400 case 126: goto st17
;
1404 if ( 42 <= (*p
) && (*p
) <= 43 )
1406 } else if ( (*p
) >= 35 )
1408 } else if ( (*p
) > 46 ) {
1410 if ( 48 <= (*p
) && (*p
) <= 57 )
1412 } else if ( (*p
) > 90 ) {
1413 if ( 94 <= (*p
) && (*p
) <= 122 )
1430 case 116: goto st62
;
1431 case 124: goto st17
;
1432 case 126: goto st17
;
1436 if ( 42 <= (*p
) && (*p
) <= 43 )
1438 } else if ( (*p
) >= 35 )
1440 } else if ( (*p
) > 46 ) {
1442 if ( 48 <= (*p
) && (*p
) <= 57 )
1444 } else if ( (*p
) > 90 ) {
1445 if ( 94 <= (*p
) && (*p
) <= 122 )
1462 case 101: goto st63
;
1463 case 124: goto st17
;
1464 case 126: goto st17
;
1468 if ( 42 <= (*p
) && (*p
) <= 43 )
1470 } else if ( (*p
) >= 35 )
1472 } else if ( (*p
) > 46 ) {
1474 if ( 48 <= (*p
) && (*p
) <= 57 )
1476 } else if ( (*p
) > 90 ) {
1477 if ( 94 <= (*p
) && (*p
) <= 122 )
1494 case 110: goto st64
;
1495 case 124: goto st17
;
1496 case 126: goto st17
;
1500 if ( 42 <= (*p
) && (*p
) <= 43 )
1502 } else if ( (*p
) >= 35 )
1504 } else if ( (*p
) > 46 ) {
1506 if ( 48 <= (*p
) && (*p
) <= 57 )
1508 } else if ( (*p
) > 90 ) {
1509 if ( 94 <= (*p
) && (*p
) <= 122 )
1526 case 116: goto st65
;
1527 case 124: goto st17
;
1528 case 126: goto st17
;
1532 if ( 42 <= (*p
) && (*p
) <= 43 )
1534 } else if ( (*p
) >= 35 )
1536 } else if ( (*p
) > 46 ) {
1538 if ( 48 <= (*p
) && (*p
) <= 57 )
1540 } else if ( (*p
) > 90 ) {
1541 if ( 94 <= (*p
) && (*p
) <= 122 )
1559 case 124: goto st17
;
1560 case 126: goto st17
;
1564 if ( 42 <= (*p
) && (*p
) <= 43 )
1566 } else if ( (*p
) >= 35 )
1568 } else if ( (*p
) > 57 ) {
1570 if ( 94 <= (*p
) && (*p
) <= 122 )
1572 } else if ( (*p
) >= 65 )
1588 case 108: goto st67
;
1589 case 116: goto st75
;
1590 case 124: goto st17
;
1591 case 126: goto st17
;
1595 if ( 42 <= (*p
) && (*p
) <= 43 )
1597 } else if ( (*p
) >= 35 )
1599 } else if ( (*p
) > 46 ) {
1601 if ( 48 <= (*p
) && (*p
) <= 57 )
1603 } else if ( (*p
) > 90 ) {
1604 if ( 94 <= (*p
) && (*p
) <= 122 )
1621 case 101: goto st68
;
1622 case 124: goto st17
;
1623 case 126: goto st17
;
1627 if ( 42 <= (*p
) && (*p
) <= 43 )
1629 } else if ( (*p
) >= 35 )
1631 } else if ( (*p
) > 46 ) {
1633 if ( 48 <= (*p
) && (*p
) <= 57 )
1635 } else if ( (*p
) > 90 ) {
1636 if ( 94 <= (*p
) && (*p
) <= 122 )
1653 case 110: goto st69
;
1654 case 124: goto st17
;
1655 case 126: goto st17
;
1659 if ( 42 <= (*p
) && (*p
) <= 43 )
1661 } else if ( (*p
) >= 35 )
1663 } else if ( (*p
) > 46 ) {
1665 if ( 48 <= (*p
) && (*p
) <= 57 )
1667 } else if ( (*p
) > 90 ) {
1668 if ( 94 <= (*p
) && (*p
) <= 122 )
1685 case 103: goto st70
;
1686 case 124: goto st17
;
1687 case 126: goto st17
;
1691 if ( 42 <= (*p
) && (*p
) <= 43 )
1693 } else if ( (*p
) >= 35 )
1695 } else if ( (*p
) > 46 ) {
1697 if ( 48 <= (*p
) && (*p
) <= 57 )
1699 } else if ( (*p
) > 90 ) {
1700 if ( 94 <= (*p
) && (*p
) <= 122 )
1717 case 116: goto st71
;
1718 case 124: goto st17
;
1719 case 126: goto st17
;
1723 if ( 42 <= (*p
) && (*p
) <= 43 )
1725 } else if ( (*p
) >= 35 )
1727 } else if ( (*p
) > 46 ) {
1729 if ( 48 <= (*p
) && (*p
) <= 57 )
1731 } else if ( (*p
) > 90 ) {
1732 if ( 94 <= (*p
) && (*p
) <= 122 )
1749 case 104: goto st72
;
1750 case 124: goto st17
;
1751 case 126: goto st17
;
1755 if ( 42 <= (*p
) && (*p
) <= 43 )
1757 } else if ( (*p
) >= 35 )
1759 } else if ( (*p
) > 46 ) {
1761 if ( 48 <= (*p
) && (*p
) <= 57 )
1763 } else if ( (*p
) > 90 ) {
1764 if ( 94 <= (*p
) && (*p
) <= 122 )
1780 case 124: goto st17
;
1781 case 126: goto st17
;
1785 if ( 42 <= (*p
) && (*p
) <= 43 )
1787 } else if ( (*p
) >= 35 )
1789 } else if ( (*p
) > 46 ) {
1791 if ( 48 <= (*p
) && (*p
) <= 57 )
1793 } else if ( (*p
) > 90 ) {
1794 if ( 94 <= (*p
) && (*p
) <= 122 )
1802 #line 24 "src/parser.rl"
1804 parser
->field_len
= LEN(field_start
, p
);
1805 if(parser
->field_len
> 256) {
1806 parser
->overflow_error
= TRUE
;
1807 {p
++; cs
= 73; goto _out
;}
1812 #line 32 "src/parser.rl"
1819 #line 1820 "src/parser.c"
1826 if ( 48 <= (*p
) && (*p
) <= 57 )
1830 #line 21 "src/parser.rl"
1832 #line 32 "src/parser.rl"
1839 #line 1840 "src/parser.c"
1845 if ( 48 <= (*p
) && (*p
) <= 57 )
1858 case 121: goto st76
;
1859 case 124: goto st17
;
1860 case 126: goto st17
;
1864 if ( 42 <= (*p
) && (*p
) <= 43 )
1866 } else if ( (*p
) >= 35 )
1868 } else if ( (*p
) > 46 ) {
1870 if ( 48 <= (*p
) && (*p
) <= 57 )
1872 } else if ( (*p
) > 90 ) {
1873 if ( 94 <= (*p
) && (*p
) <= 122 )
1890 case 112: goto st77
;
1891 case 124: goto st17
;
1892 case 126: goto st17
;
1896 if ( 42 <= (*p
) && (*p
) <= 43 )
1898 } else if ( (*p
) >= 35 )
1900 } else if ( (*p
) > 46 ) {
1902 if ( 48 <= (*p
) && (*p
) <= 57 )
1904 } else if ( (*p
) > 90 ) {
1905 if ( 94 <= (*p
) && (*p
) <= 122 )
1922 case 101: goto st78
;
1923 case 124: goto st17
;
1924 case 126: goto st17
;
1928 if ( 42 <= (*p
) && (*p
) <= 43 )
1930 } else if ( (*p
) >= 35 )
1932 } else if ( (*p
) > 46 ) {
1934 if ( 48 <= (*p
) && (*p
) <= 57 )
1936 } else if ( (*p
) > 90 ) {
1937 if ( 94 <= (*p
) && (*p
) <= 122 )
1953 case 124: goto st17
;
1954 case 126: goto st17
;
1958 if ( 42 <= (*p
) && (*p
) <= 43 )
1960 } else if ( (*p
) >= 35 )
1962 } else if ( (*p
) > 46 ) {
1964 if ( 48 <= (*p
) && (*p
) <= 57 )
1966 } else if ( (*p
) > 90 ) {
1967 if ( 94 <= (*p
) && (*p
) <= 122 )
1975 #line 21 "src/parser.rl"
1982 #line 1983 "src/parser.c"
1989 #line 21 "src/parser.rl"
1996 #line 1997 "src/parser.c"
2001 #line 71 "src/parser.rl"
2003 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
2004 {p
++; cs
= 81; goto _out
;}
2008 #line 61 "src/parser.rl"
2010 if(!apply_element(parser
, MONGREL_REQUEST_PATH
, PTR_TO(mark
), p
, 1024))
2011 {p
++; cs
= 81; goto _out
;}
2013 #line 71 "src/parser.rl"
2015 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
2016 {p
++; cs
= 81; goto _out
;}
2020 #line 76 "src/parser.rl"
2021 {MARK(query_start
, p
); }
2022 #line 77 "src/parser.rl"
2024 if(!apply_element(parser
, MONGREL_QUERY_STRING
, PTR_TO(query_start
), p
, 10*1024))
2025 {p
++; cs
= 81; goto _out
;}
2027 #line 71 "src/parser.rl"
2029 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
2030 {p
++; cs
= 81; goto _out
;}
2034 #line 77 "src/parser.rl"
2036 if(!apply_element(parser
, MONGREL_QUERY_STRING
, PTR_TO(query_start
), p
, 10*1024))
2037 {p
++; cs
= 81; goto _out
;}
2039 #line 71 "src/parser.rl"
2041 if(!apply_element(parser
, MONGREL_REQUEST_URI
, PTR_TO(mark
), p
, 12*1024))
2042 {p
++; cs
= 81; goto _out
;}
2049 #line 2050 "src/parser.c"
2051 case 32: goto tr103
;
2052 case 37: goto tr104
;
2058 if ( 34 <= (*p
) && (*p
) <= 35 )
2060 } else if ( (*p
) >= 0 )
2064 #line 21 "src/parser.rl"
2071 #line 2072 "src/parser.c"
2073 case 32: goto tr106
;
2080 if ( 34 <= (*p
) && (*p
) <= 35 )
2082 } else if ( (*p
) >= 0 )
2086 #line 21 "src/parser.rl"
2093 #line 2094 "src/parser.c"
2095 if ( 48 <= (*p
) && (*p
) <= 57 )
2097 } else if ( (*p
) > 70 ) {
2098 if ( 97 <= (*p
) && (*p
) <= 102 )
2108 if ( 48 <= (*p
) && (*p
) <= 57 )
2110 } else if ( (*p
) > 70 ) {
2111 if ( 97 <= (*p
) && (*p
) <= 102 )
2117 #line 21 "src/parser.rl"
2124 #line 2125 "src/parser.c"
2130 if ( 45 <= (*p
) && (*p
) <= 46 )
2132 } else if ( (*p
) > 57 ) {
2134 if ( 97 <= (*p
) && (*p
) <= 122 )
2136 } else if ( (*p
) >= 65 )
2142 #line 21 "src/parser.rl"
2149 #line 2150 "src/parser.c"
2159 if ( 0 <= (*p
) && (*p
) <= 31 )
2167 if ( 48 <= (*p
) && (*p
) <= 57 )
2169 } else if ( (*p
) > 70 ) {
2170 if ( 97 <= (*p
) && (*p
) <= 102 )
2180 if ( 48 <= (*p
) && (*p
) <= 57 )
2182 } else if ( (*p
) > 70 ) {
2183 if ( 97 <= (*p
) && (*p
) <= 102 )
2189 #line 21 "src/parser.rl"
2196 #line 2197 "src/parser.c"
2198 case 32: goto tr114
;
2200 case 35: goto tr115
;
2202 case 59: goto tr117
;
2205 case 63: goto tr118
;
2208 if ( 0 <= (*p
) && (*p
) <= 31 )
2216 if ( 48 <= (*p
) && (*p
) <= 57 )
2218 } else if ( (*p
) > 70 ) {
2219 if ( 97 <= (*p
) && (*p
) <= 102 )
2229 if ( 48 <= (*p
) && (*p
) <= 57 )
2231 } else if ( (*p
) > 70 ) {
2232 if ( 97 <= (*p
) && (*p
) <= 102 )
2238 #line 61 "src/parser.rl"
2240 if(!apply_element(parser
, MONGREL_REQUEST_PATH
, PTR_TO(mark
), p
, 1024))
2241 {p
++; cs
= 92; goto _out
;}
2248 #line 2249 "src/parser.c"
2259 if ( 0 <= (*p
) && (*p
) <= 31 )
2267 if ( 48 <= (*p
) && (*p
) <= 57 )
2269 } else if ( (*p
) > 70 ) {
2270 if ( 97 <= (*p
) && (*p
) <= 102 )
2280 if ( 48 <= (*p
) && (*p
) <= 57 )
2282 } else if ( (*p
) > 70 ) {
2283 if ( 97 <= (*p
) && (*p
) <= 102 )
2289 #line 61 "src/parser.rl"
2291 if(!apply_element(parser
, MONGREL_REQUEST_PATH
, PTR_TO(mark
), p
, 1024))
2292 {p
++; cs
= 95; goto _out
;}
2299 #line 2300 "src/parser.c"
2301 case 32: goto tr125
;
2303 case 35: goto tr126
;
2304 case 37: goto tr127
;
2309 if ( 0 <= (*p
) && (*p
) <= 31 )
2313 #line 76 "src/parser.rl"
2314 {MARK(query_start
, p
); }
2320 #line 2321 "src/parser.c"
2322 case 32: goto tr129
;
2324 case 35: goto tr130
;
2330 if ( 0 <= (*p
) && (*p
) <= 31 )
2334 #line 76 "src/parser.rl"
2335 {MARK(query_start
, p
); }
2341 #line 2342 "src/parser.c"
2343 if ( 48 <= (*p
) && (*p
) <= 57 )
2345 } else if ( (*p
) > 70 ) {
2346 if ( 97 <= (*p
) && (*p
) <= 102 )
2356 if ( 48 <= (*p
) && (*p
) <= 57 )
2358 } else if ( (*p
) > 70 ) {
2359 if ( 97 <= (*p
) && (*p
) <= 102 )
2370 case 36: goto st100
;
2371 case 95: goto st100
;
2374 if ( 45 <= (*p
) && (*p
) <= 46 )
2376 } else if ( (*p
) > 57 ) {
2377 if ( 65 <= (*p
) && (*p
) <= 90 )
2388 case 36: goto st101
;
2389 case 95: goto st101
;
2392 if ( 45 <= (*p
) && (*p
) <= 46 )
2394 } else if ( (*p
) > 57 ) {
2395 if ( 65 <= (*p
) && (*p
) <= 90 )
2406 case 36: goto st102
;
2407 case 95: goto st102
;
2410 if ( 45 <= (*p
) && (*p
) <= 46 )
2412 } else if ( (*p
) > 57 ) {
2413 if ( 65 <= (*p
) && (*p
) <= 90 )
2424 case 36: goto st103
;
2425 case 95: goto st103
;
2428 if ( 45 <= (*p
) && (*p
) <= 46 )
2430 } else if ( (*p
) > 57 ) {
2431 if ( 65 <= (*p
) && (*p
) <= 90 )
2442 case 36: goto st104
;
2443 case 95: goto st104
;
2446 if ( 45 <= (*p
) && (*p
) <= 46 )
2448 } else if ( (*p
) > 57 ) {
2449 if ( 65 <= (*p
) && (*p
) <= 90 )
2460 case 36: goto st105
;
2461 case 95: goto st105
;
2464 if ( 45 <= (*p
) && (*p
) <= 46 )
2466 } else if ( (*p
) > 57 ) {
2467 if ( 65 <= (*p
) && (*p
) <= 90 )
2478 case 36: goto st106
;
2479 case 95: goto st106
;
2482 if ( 45 <= (*p
) && (*p
) <= 46 )
2484 } else if ( (*p
) > 57 ) {
2485 if ( 65 <= (*p
) && (*p
) <= 90 )
2496 case 36: goto st107
;
2497 case 95: goto st107
;
2500 if ( 45 <= (*p
) && (*p
) <= 46 )
2502 } else if ( (*p
) > 57 ) {
2503 if ( 65 <= (*p
) && (*p
) <= 90 )
2514 case 36: goto st108
;
2515 case 95: goto st108
;
2518 if ( 45 <= (*p
) && (*p
) <= 46 )
2520 } else if ( (*p
) > 57 ) {
2521 if ( 65 <= (*p
) && (*p
) <= 90 )
2532 case 36: goto st109
;
2533 case 95: goto st109
;
2536 if ( 45 <= (*p
) && (*p
) <= 46 )
2538 } else if ( (*p
) > 57 ) {
2539 if ( 65 <= (*p
) && (*p
) <= 90 )
2550 case 36: goto st110
;
2551 case 95: goto st110
;
2554 if ( 45 <= (*p
) && (*p
) <= 46 )
2556 } else if ( (*p
) > 57 ) {
2557 if ( 65 <= (*p
) && (*p
) <= 90 )
2568 case 36: goto st111
;
2569 case 95: goto st111
;
2572 if ( 45 <= (*p
) && (*p
) <= 46 )
2574 } else if ( (*p
) > 57 ) {
2575 if ( 65 <= (*p
) && (*p
) <= 90 )
2586 case 36: goto st112
;
2587 case 95: goto st112
;
2590 if ( 45 <= (*p
) && (*p
) <= 46 )
2592 } else if ( (*p
) > 57 ) {
2593 if ( 65 <= (*p
) && (*p
) <= 90 )
2604 case 36: goto st113
;
2605 case 95: goto st113
;
2608 if ( 45 <= (*p
) && (*p
) <= 46 )
2610 } else if ( (*p
) > 57 ) {
2611 if ( 65 <= (*p
) && (*p
) <= 90 )
2622 case 36: goto st114
;
2623 case 95: goto st114
;
2626 if ( 45 <= (*p
) && (*p
) <= 46 )
2628 } else if ( (*p
) > 57 ) {
2629 if ( 65 <= (*p
) && (*p
) <= 90 )
2640 case 36: goto st115
;
2641 case 95: goto st115
;
2644 if ( 45 <= (*p
) && (*p
) <= 46 )
2646 } else if ( (*p
) > 57 ) {
2647 if ( 65 <= (*p
) && (*p
) <= 90 )
2658 case 36: goto st116
;
2659 case 95: goto st116
;
2662 if ( 45 <= (*p
) && (*p
) <= 46 )
2664 } else if ( (*p
) > 57 ) {
2665 if ( 65 <= (*p
) && (*p
) <= 90 )
2676 case 36: goto st117
;
2677 case 95: goto st117
;
2680 if ( 45 <= (*p
) && (*p
) <= 46 )
2682 } else if ( (*p
) > 57 ) {
2683 if ( 65 <= (*p
) && (*p
) <= 90 )
2696 _test_eof2
: cs
= 2; goto _test_eof
;
2697 _test_eof3
: cs
= 3; goto _test_eof
;
2698 _test_eof4
: cs
= 4; goto _test_eof
;
2699 _test_eof5
: cs
= 5; goto _test_eof
;
2700 _test_eof6
: cs
= 6; goto _test_eof
;
2701 _test_eof7
: cs
= 7; goto _test_eof
;
2702 _test_eof8
: cs
= 8; goto _test_eof
;
2703 _test_eof9
: cs
= 9; goto _test_eof
;
2704 _test_eof10
: cs
= 10; goto _test_eof
;
2705 _test_eof11
: cs
= 11; goto _test_eof
;
2706 _test_eof12
: cs
= 12; goto _test_eof
;
2707 _test_eof13
: cs
= 13; goto _test_eof
;
2708 _test_eof14
: cs
= 14; goto _test_eof
;
2709 _test_eof15
: cs
= 15; goto _test_eof
;
2710 _test_eof16
: cs
= 16; goto _test_eof
;
2711 _test_eof118
: cs
= 118; goto _test_eof
;
2712 _test_eof17
: cs
= 17; goto _test_eof
;
2713 _test_eof18
: cs
= 18; goto _test_eof
;
2714 _test_eof19
: cs
= 19; goto _test_eof
;
2715 _test_eof20
: cs
= 20; goto _test_eof
;
2716 _test_eof21
: cs
= 21; goto _test_eof
;
2717 _test_eof22
: cs
= 22; goto _test_eof
;
2718 _test_eof23
: cs
= 23; goto _test_eof
;
2719 _test_eof24
: cs
= 24; goto _test_eof
;
2720 _test_eof25
: cs
= 25; goto _test_eof
;
2721 _test_eof26
: cs
= 26; goto _test_eof
;
2722 _test_eof27
: cs
= 27; goto _test_eof
;
2723 _test_eof28
: cs
= 28; goto _test_eof
;
2724 _test_eof29
: cs
= 29; goto _test_eof
;
2725 _test_eof30
: cs
= 30; goto _test_eof
;
2726 _test_eof31
: cs
= 31; goto _test_eof
;
2727 _test_eof32
: cs
= 32; goto _test_eof
;
2728 _test_eof33
: cs
= 33; goto _test_eof
;
2729 _test_eof34
: cs
= 34; goto _test_eof
;
2730 _test_eof35
: cs
= 35; goto _test_eof
;
2731 _test_eof36
: cs
= 36; goto _test_eof
;
2732 _test_eof37
: cs
= 37; goto _test_eof
;
2733 _test_eof38
: cs
= 38; goto _test_eof
;
2734 _test_eof39
: cs
= 39; goto _test_eof
;
2735 _test_eof40
: cs
= 40; goto _test_eof
;
2736 _test_eof41
: cs
= 41; goto _test_eof
;
2737 _test_eof42
: cs
= 42; goto _test_eof
;
2738 _test_eof43
: cs
= 43; goto _test_eof
;
2739 _test_eof44
: cs
= 44; goto _test_eof
;
2740 _test_eof45
: cs
= 45; goto _test_eof
;
2741 _test_eof46
: cs
= 46; goto _test_eof
;
2742 _test_eof47
: cs
= 47; goto _test_eof
;
2743 _test_eof48
: cs
= 48; goto _test_eof
;
2744 _test_eof49
: cs
= 49; goto _test_eof
;
2745 _test_eof50
: cs
= 50; goto _test_eof
;
2746 _test_eof51
: cs
= 51; goto _test_eof
;
2747 _test_eof52
: cs
= 52; goto _test_eof
;
2748 _test_eof53
: cs
= 53; goto _test_eof
;
2749 _test_eof54
: cs
= 54; goto _test_eof
;
2750 _test_eof55
: cs
= 55; goto _test_eof
;
2751 _test_eof56
: cs
= 56; goto _test_eof
;
2752 _test_eof57
: cs
= 57; goto _test_eof
;
2753 _test_eof58
: cs
= 58; goto _test_eof
;
2754 _test_eof59
: cs
= 59; goto _test_eof
;
2755 _test_eof60
: cs
= 60; goto _test_eof
;
2756 _test_eof61
: cs
= 61; goto _test_eof
;
2757 _test_eof62
: cs
= 62; goto _test_eof
;
2758 _test_eof63
: cs
= 63; goto _test_eof
;
2759 _test_eof64
: cs
= 64; goto _test_eof
;
2760 _test_eof65
: cs
= 65; goto _test_eof
;
2761 _test_eof66
: cs
= 66; goto _test_eof
;
2762 _test_eof67
: cs
= 67; goto _test_eof
;
2763 _test_eof68
: cs
= 68; goto _test_eof
;
2764 _test_eof69
: cs
= 69; goto _test_eof
;
2765 _test_eof70
: cs
= 70; goto _test_eof
;
2766 _test_eof71
: cs
= 71; goto _test_eof
;
2767 _test_eof72
: cs
= 72; goto _test_eof
;
2768 _test_eof73
: cs
= 73; goto _test_eof
;
2769 _test_eof74
: cs
= 74; goto _test_eof
;
2770 _test_eof75
: cs
= 75; goto _test_eof
;
2771 _test_eof76
: cs
= 76; goto _test_eof
;
2772 _test_eof77
: cs
= 77; goto _test_eof
;
2773 _test_eof78
: cs
= 78; goto _test_eof
;
2774 _test_eof79
: cs
= 79; goto _test_eof
;
2775 _test_eof80
: cs
= 80; goto _test_eof
;
2776 _test_eof81
: cs
= 81; goto _test_eof
;
2777 _test_eof82
: cs
= 82; goto _test_eof
;
2778 _test_eof83
: cs
= 83; goto _test_eof
;
2779 _test_eof84
: cs
= 84; goto _test_eof
;
2780 _test_eof85
: cs
= 85; goto _test_eof
;
2781 _test_eof86
: cs
= 86; goto _test_eof
;
2782 _test_eof87
: cs
= 87; goto _test_eof
;
2783 _test_eof88
: cs
= 88; goto _test_eof
;
2784 _test_eof89
: cs
= 89; goto _test_eof
;
2785 _test_eof90
: cs
= 90; goto _test_eof
;
2786 _test_eof91
: cs
= 91; goto _test_eof
;
2787 _test_eof92
: cs
= 92; goto _test_eof
;
2788 _test_eof93
: cs
= 93; goto _test_eof
;
2789 _test_eof94
: cs
= 94; goto _test_eof
;
2790 _test_eof95
: cs
= 95; goto _test_eof
;
2791 _test_eof96
: cs
= 96; goto _test_eof
;
2792 _test_eof97
: cs
= 97; goto _test_eof
;
2793 _test_eof98
: cs
= 98; goto _test_eof
;
2794 _test_eof99
: cs
= 99; goto _test_eof
;
2795 _test_eof100
: cs
= 100; goto _test_eof
;
2796 _test_eof101
: cs
= 101; goto _test_eof
;
2797 _test_eof102
: cs
= 102; goto _test_eof
;
2798 _test_eof103
: cs
= 103; goto _test_eof
;
2799 _test_eof104
: cs
= 104; goto _test_eof
;
2800 _test_eof105
: cs
= 105; goto _test_eof
;
2801 _test_eof106
: cs
= 106; goto _test_eof
;
2802 _test_eof107
: cs
= 107; goto _test_eof
;
2803 _test_eof108
: cs
= 108; goto _test_eof
;
2804 _test_eof109
: cs
= 109; goto _test_eof
;
2805 _test_eof110
: cs
= 110; goto _test_eof
;
2806 _test_eof111
: cs
= 111; goto _test_eof
;
2807 _test_eof112
: cs
= 112; goto _test_eof
;
2808 _test_eof113
: cs
= 113; goto _test_eof
;
2809 _test_eof114
: cs
= 114; goto _test_eof
;
2810 _test_eof115
: cs
= 115; goto _test_eof
;
2811 _test_eof116
: cs
= 116; goto _test_eof
;
2812 _test_eof117
: cs
= 117; goto _test_eof
;
2817 #line 197 "src/parser.rl"
2820 parser
->nread
+= p
- (buffer
+ off
);
2822 assert(p
<= pe
&& "buffer overflow after parsing execute");
2823 assert(parser
->nread
<= len
&& "nread longer than length");
2824 assert(parser
->body_start
<= len
&& "body starts after buffer end");
2825 assert(parser
->mark
< len
&& "mark is after buffer end");
2826 assert(parser
->field_len
<= len
&& "field has length longer than whole buffer");
2827 assert(parser
->field_start
< len
&& "field starts after buffer end");
2829 if(parser
->nread
> 1024 * (80 + 32))
2830 parser
->overflow_error
= TRUE
;
2833 /* Ragel 6 does not use write eof; no need for this
2834 if(parser->body_start) {
2835 // final \r\n combo encountered so stop right here
2841 return(parser
->nread
);
2844 int http_parser_finish(http_parser
*parser
)
2846 if (http_parser_has_error(parser
))
2848 else if (http_parser_is_finished(parser
))
2854 int http_parser_has_error(http_parser
*parser
) {
2855 return parser
->cs
== http_parser_error
|| parser
->overflow_error
;
2858 int http_parser_is_finished(http_parser
*parser
) {
2859 return parser
->cs
>= http_parser_first_final
;