Mercurial > projects > dreactor
view asyncdreactor/protocol/Http11Parser.d @ 11:5836613d16ac
reorg! reorg!
author | rick@minifunk |
---|---|
date | Tue, 12 Aug 2008 16:59:56 -0400 |
parents | |
children |
line wrap: on
line source
/* #line 1 "http11_parser.rl" */ /** * Copyright (c) 2005 Zed A. Shaw, * Modified for D/DReactor by Rick Richardson, 2008 * You can redistribute it and/or modify it under the same terms as Ruby. */ alias void delegate (void *data, const char *at, size_t length) element_cb; alias void delegate (void *data, const char *field, size_t flen, const char *value, size_t vlen) field_cb; class Http11Parser { int cs; size_t body_start; int content_len; size_t nread; size_t mark; size_t field_start; size_t field_len; size_t query_start; void *data; field_cb http_field; element_cb request_method; element_cb request_uri; element_cb fragment; element_cb request_path; element_cb query_string; element_cb http_version; element_cb header_done; /* * capitalizes all lower-case ASCII characters, * converts dashes to underscores. */ private void snake_upcase_char(char *c) { if (*c >= 'a' && *c <= 'z') *c &= ~0x20; else if (*c == '-') *c = '_'; } //#define LEN(AT, FPC) (FPC - buffer - parser->AT) private int LEN(char* at, char* fpc) { return (fpc - buffer.ptr - at); } //#define MARK(M,FPC) (parser->M = (FPC) - buffer) private void MARK(size_t* item, char* fpc) { *item = fpc - buffer.ptr; } //#define PTR_TO(F) (buffer + parser->F) private char* PTR_TO(size_t F) { return (buffer.ptr + F); } /** Machine **/ /* #line 126 "http11_parser.rl" */ /** Data **/ /* #line 70 "Http11Parser.d" */ 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 130 "http11_parser.rl" */ this () { cs = 0; /* #line 83 "Http11Parser.d" */ { cs = http_parser_start; } /* #line 135 "http11_parser.rl" */ body_start = 0; content_len = 0; mark = 0; nread = 0; field_len = 0; field_start = 0; } /** exec **/ size_t execute(const char[] buffer, size_t off) { const char *p, *pe; int len = buffer.length; assert(off <= len && "offset past end of buffer"); p = buffer.ptr+off; pe = buffer.ptr+len; /* assert(*pe == '\0' && "pointer does not end on NUL"); */ assert(pe - p == len - off && "pointers aren't same distance"); /* #line 112 "Http11Parser.d" */ { if ( p == pe ) goto _out; switch ( cs ) { case 1: switch( (*p) ) { case 36u: goto tr0; case 95u: goto tr0; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto tr0; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto tr0; } else goto tr0; goto st0; st0: goto _out0; tr0: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st2; st2: if ( ++p == pe ) goto _out2; case 2: /* #line 143 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr2; case 36u: goto st38; case 95u: goto st38; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st38; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st38; } else goto st38; goto st0; tr2: /* #line 85 "http11_parser.rl" */ { if(request_method) request_method(data, PTR_TO(mark), LEN(mark, p)); } goto st3; st3: if ( ++p == pe ) goto _out3; case 3: /* #line 170 "Http11Parser.d" */ switch( (*p) ) { case 42u: goto tr4; case 43u: goto tr5; case 47u: goto tr6; case 58u: goto tr7; default: break; } if ( (*p) < 65u ) { if ( 45u <= (*p) && (*p) <= 57u ) goto tr5; } else if ( (*p) > 90u ) { if ( 97u <= (*p) && (*p) <= 122u ) goto tr5; } else goto tr5; goto st0; tr4: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st4; st4: if ( ++p == pe ) goto _out4; case 4: /* #line 195 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr8; case 35u: goto tr9; default: break; } goto st0; tr8: /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st5; tr29: /* #line 95 "http11_parser.rl" */ { if(fragment) fragment(data, PTR_TO(mark), LEN(mark, p)); } goto st5; tr39: /* #line 112 "http11_parser.rl" */ { if(request_path) request_path(data, PTR_TO(mark), LEN(mark,p)); } /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st5; tr50: /* #line 100 "http11_parser.rl" */ {MARK(query_start, p); } /* #line 102 "http11_parser.rl" */ { if(query_string) query_string(data, PTR_TO(query_start), LEN(query_start, p)); } /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st5; tr54: /* #line 102 "http11_parser.rl" */ { if(query_string) query_string(data, PTR_TO(query_start), LEN(query_start, p)); } /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st5; st5: if ( ++p == pe ) goto _out5; case 5: /* #line 258 "Http11Parser.d" */ if ( (*p) == 72u ) goto tr10; goto st0; tr10: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st6; st6: if ( ++p == pe ) goto _out6; case 6: /* #line 270 "Http11Parser.d" */ if ( (*p) == 84u ) goto st7; goto st0; st7: if ( ++p == pe ) goto _out7; case 7: if ( (*p) == 84u ) goto st8; goto st0; st8: if ( ++p == pe ) goto _out8; case 8: if ( (*p) == 80u ) goto st9; goto st0; st9: if ( ++p == pe ) goto _out9; case 9: if ( (*p) == 47u ) goto st10; goto st0; st10: if ( ++p == pe ) goto _out10; case 10: if ( 48u <= (*p) && (*p) <= 57u ) goto st11; goto st0; st11: if ( ++p == pe ) goto _out11; case 11: if ( (*p) == 46u ) goto st12; if ( 48u <= (*p) && (*p) <= 57u ) goto st11; goto st0; st12: if ( ++p == pe ) goto _out12; case 12: if ( 48u <= (*p) && (*p) <= 57u ) goto st13; goto st0; st13: if ( ++p == pe ) goto _out13; case 13: if ( (*p) == 13u ) goto tr18; if ( 48u <= (*p) && (*p) <= 57u ) goto st13; goto st0; tr18: /* #line 107 "http11_parser.rl" */ { if(http_version) http_version(data, PTR_TO(mark), LEN(mark, p)); } goto st14; tr26: /* #line 77 "http11_parser.rl" */ { if(http_field) http_field(data, PTR_TO(field_start), field_len, PTR_TO(mark), LEN(mark, p)); } goto st14; st14: if ( ++p == pe ) goto _out14; case 14: /* #line 349 "Http11Parser.d" */ if ( (*p) == 10u ) goto st15; goto st0; st15: if ( ++p == pe ) goto _out15; case 15: switch( (*p) ) { case 13u: goto st16; case 33u: goto tr21; case 124u: goto tr21; case 126u: goto tr21; default: break; } if ( (*p) < 45u ) { if ( (*p) > 39u ) { if ( 42u <= (*p) && (*p) <= 43u ) goto tr21; } else if ( (*p) >= 35u ) goto tr21; } else if ( (*p) > 46u ) { if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto tr21; } else if ( (*p) > 90u ) { if ( 94u <= (*p) && (*p) <= 122u ) goto tr21; } else goto tr21; } else goto tr21; goto st0; st16: if ( ++p == pe ) goto _out16; case 16: if ( (*p) == 10u ) goto tr22; goto st0; tr22: /* #line 117 "http11_parser.rl" */ { body_start = p - buffer + 1; if(header_done) header_done(data, p + 1, pe - p - 1); if (true) goto _out57; } goto st57; st57: if ( ++p == pe ) goto _out57; case 57: /* #line 402 "Http11Parser.d" */ goto st0; tr21: /* #line 70 "http11_parser.rl" */ { MARK(field_start, p); } /* #line 71 "http11_parser.rl" */ { snake_upcase_char((char *)p); } goto st17; tr23: /* #line 71 "http11_parser.rl" */ { snake_upcase_char((char *)p); } goto st17; st17: if ( ++p == pe ) goto _out17; case 17: /* #line 418 "Http11Parser.d" */ switch( (*p) ) { case 33u: goto tr23; case 58u: goto tr24; case 124u: goto tr23; case 126u: goto tr23; default: break; } if ( (*p) < 45u ) { if ( (*p) > 39u ) { if ( 42u <= (*p) && (*p) <= 43u ) goto tr23; } else if ( (*p) >= 35u ) goto tr23; } else if ( (*p) > 46u ) { if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto tr23; } else if ( (*p) > 90u ) { if ( 94u <= (*p) && (*p) <= 122u ) goto tr23; } else goto tr23; } else goto tr23; goto st0; tr24: /* #line 72 "http11_parser.rl" */ { field_len = LEN(field_start, p); } goto st18; tr27: /* #line 76 "http11_parser.rl" */ { MARK(mark, p); } goto st18; st18: if ( ++p == pe ) goto _out18; case 18: /* #line 458 "Http11Parser.d" */ switch( (*p) ) { case 13u: goto tr26; case 32u: goto tr27; default: break; } goto tr25; tr25: /* #line 76 "http11_parser.rl" */ { MARK(mark, p); } goto st19; st19: if ( ++p == pe ) goto _out19; case 19: /* #line 473 "Http11Parser.d" */ if ( (*p) == 13u ) goto tr26; goto st19; tr9: /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st20; tr41: /* #line 112 "http11_parser.rl" */ { if(request_path) request_path(data, PTR_TO(mark), LEN(mark,p)); } /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st20; tr52: /* #line 100 "http11_parser.rl" */ {MARK(query_start, p); } /* #line 102 "http11_parser.rl" */ { if(query_string) query_string(data, PTR_TO(query_start), LEN(query_start, p)); } /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st20; tr56: /* #line 102 "http11_parser.rl" */ { if(query_string) query_string(data, PTR_TO(query_start), LEN(query_start, p)); } /* #line 90 "http11_parser.rl" */ { if(request_uri) request_uri(data, PTR_TO(mark), LEN(mark, p)); } goto st20; st20: if ( ++p == pe ) goto _out20; case 20: /* #line 526 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr29; case 37u: goto tr31; case 60u: goto st0; case 62u: goto st0; case 127u: goto st0; default: break; } if ( (*p) > 31u ) { if ( 34u <= (*p) && (*p) <= 35u ) goto st0; } else goto st0; goto tr30; tr30: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st21; st21: if ( ++p == pe ) goto _out21; case 21: /* #line 549 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr29; case 37u: goto st22; case 60u: goto st0; case 62u: goto st0; case 127u: goto st0; default: break; } if ( (*p) > 31u ) { if ( 34u <= (*p) && (*p) <= 35u ) goto st0; } else goto st0; goto st21; tr31: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st22; st22: if ( ++p == pe ) goto _out22; case 22: /* #line 572 "Http11Parser.d" */ if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st23; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st23; } else goto st23; goto st0; st23: if ( ++p == pe ) goto _out23; case 23: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st21; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st21; } else goto st21; goto st0; tr5: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st24; st24: if ( ++p == pe ) goto _out24; case 24: /* #line 603 "Http11Parser.d" */ switch( (*p) ) { case 43u: goto st24; case 58u: goto st25; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st24; } else if ( (*p) > 57u ) { if ( (*p) > 90u ) { if ( 97u <= (*p) && (*p) <= 122u ) goto st24; } else if ( (*p) >= 65u ) goto st24; } else goto st24; goto st0; tr7: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st25; st25: if ( ++p == pe ) goto _out25; case 25: /* #line 629 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr8; case 34u: goto st0; case 35u: goto tr9; case 37u: goto st26; case 60u: goto st0; case 62u: goto st0; case 127u: goto st0; default: break; } if ( (*p) <= 31u ) goto st0; goto st25; st26: if ( ++p == pe ) goto _out26; case 26: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st27; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st27; } else goto st27; goto st0; st27: if ( ++p == pe ) goto _out27; case 27: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st25; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st25; } else goto st25; goto st0; tr6: /* #line 67 "http11_parser.rl" */ {MARK(mark, p); } goto st28; st28: if ( ++p == pe ) goto _out28; case 28: /* #line 677 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr39; case 34u: goto st0; case 35u: goto tr41; case 37u: goto st29; case 59u: goto tr43; case 60u: goto st0; case 62u: goto st0; case 63u: goto tr44; case 127u: goto st0; default: break; } if ( (*p) <= 31u ) goto st0; goto st28; st29: if ( ++p == pe ) goto _out29; case 29: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st30; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st30; } else goto st30; goto st0; st30: if ( ++p == pe ) goto _out30; case 30: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st28; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st28; } else goto st28; goto st0; tr43: /* #line 112 "http11_parser.rl" */ { if(request_path) request_path(data, PTR_TO(mark), LEN(mark,p)); } goto st31; st31: if ( ++p == pe ) goto _out31; case 31: /* #line 730 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr8; case 34u: goto st0; case 35u: goto tr9; case 37u: goto st32; case 60u: goto st0; case 62u: goto st0; case 63u: goto st34; case 127u: goto st0; default: break; } if ( (*p) <= 31u ) goto st0; goto st31; st32: if ( ++p == pe ) goto _out32; case 32: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st33; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st33; } else goto st33; goto st0; st33: if ( ++p == pe ) goto _out33; case 33: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st31; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st31; } else goto st31; goto st0; tr44: /* #line 112 "http11_parser.rl" */ { if(request_path) request_path(data, PTR_TO(mark), LEN(mark,p)); } goto st34; st34: if ( ++p == pe ) goto _out34; case 34: /* #line 782 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr50; case 34u: goto st0; case 35u: goto tr52; case 37u: goto tr53; case 60u: goto st0; case 62u: goto st0; case 127u: goto st0; default: break; } if ( (*p) <= 31u ) goto st0; goto tr51; tr51: /* #line 100 "http11_parser.rl" */ {MARK(query_start, p); } goto st35; st35: if ( ++p == pe ) goto _out35; case 35: /* #line 804 "Http11Parser.d" */ switch( (*p) ) { case 32u: goto tr54; case 34u: goto st0; case 35u: goto tr56; case 37u: goto st36; case 60u: goto st0; case 62u: goto st0; case 127u: goto st0; default: break; } if ( (*p) <= 31u ) goto st0; goto st35; tr53: /* #line 100 "http11_parser.rl" */ {MARK(query_start, p); } goto st36; st36: if ( ++p == pe ) goto _out36; case 36: /* #line 826 "Http11Parser.d" */ if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st37; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st37; } else goto st37; goto st0; st37: if ( ++p == pe ) goto _out37; case 37: if ( (*p) < 65u ) { if ( 48u <= (*p) && (*p) <= 57u ) goto st35; } else if ( (*p) > 70u ) { if ( 97u <= (*p) && (*p) <= 102u ) goto st35; } else goto st35; goto st0; st38: if ( ++p == pe ) goto _out38; case 38: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st39; case 95u: goto st39; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st39; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st39; } else goto st39; goto st0; st39: if ( ++p == pe ) goto _out39; case 39: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st40; case 95u: goto st40; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st40; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st40; } else goto st40; goto st0; st40: if ( ++p == pe ) goto _out40; case 40: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st41; case 95u: goto st41; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st41; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st41; } else goto st41; goto st0; st41: if ( ++p == pe ) goto _out41; case 41: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st42; case 95u: goto st42; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st42; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st42; } else goto st42; goto st0; st42: if ( ++p == pe ) goto _out42; case 42: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st43; case 95u: goto st43; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st43; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st43; } else goto st43; goto st0; st43: if ( ++p == pe ) goto _out43; case 43: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st44; case 95u: goto st44; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st44; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st44; } else goto st44; goto st0; st44: if ( ++p == pe ) goto _out44; case 44: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st45; case 95u: goto st45; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st45; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st45; } else goto st45; goto st0; st45: if ( ++p == pe ) goto _out45; case 45: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st46; case 95u: goto st46; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st46; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st46; } else goto st46; goto st0; st46: if ( ++p == pe ) goto _out46; case 46: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st47; case 95u: goto st47; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st47; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st47; } else goto st47; goto st0; st47: if ( ++p == pe ) goto _out47; case 47: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st48; case 95u: goto st48; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st48; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st48; } else goto st48; goto st0; st48: if ( ++p == pe ) goto _out48; case 48: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st49; case 95u: goto st49; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st49; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st49; } else goto st49; goto st0; st49: if ( ++p == pe ) goto _out49; case 49: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st50; case 95u: goto st50; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st50; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st50; } else goto st50; goto st0; st50: if ( ++p == pe ) goto _out50; case 50: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st51; case 95u: goto st51; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st51; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st51; } else goto st51; goto st0; st51: if ( ++p == pe ) goto _out51; case 51: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st52; case 95u: goto st52; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st52; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st52; } else goto st52; goto st0; st52: if ( ++p == pe ) goto _out52; case 52: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st53; case 95u: goto st53; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st53; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st53; } else goto st53; goto st0; st53: if ( ++p == pe ) goto _out53; case 53: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st54; case 95u: goto st54; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st54; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st54; } else goto st54; goto st0; st54: if ( ++p == pe ) goto _out54; case 54: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st55; case 95u: goto st55; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st55; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st55; } else goto st55; goto st0; st55: if ( ++p == pe ) goto _out55; case 55: switch( (*p) ) { case 32u: goto tr2; case 36u: goto st56; case 95u: goto st56; default: break; } if ( (*p) < 48u ) { if ( 45u <= (*p) && (*p) <= 46u ) goto st56; } else if ( (*p) > 57u ) { if ( 65u <= (*p) && (*p) <= 90u ) goto st56; } else goto st56; goto st0; st56: if ( ++p == pe ) goto _out56; case 56: if ( (*p) == 32u ) goto tr2; goto st0; default: break; } _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; _out: {} } /* #line 159 "http11_parser.rl" */ //parser->cs = cs; nread += p - (buffer.ptr + off); assert(p <= pe && "buffer overflow after parsing execute"); assert(nread <= len && "nread longer than length"); assert(body_start <= len && "body starts after buffer end"); assert(mark < len && "mark is after buffer end"); assert(field_len <= len && "field has length longer than whole buffer"); assert(field_start < len && "field starts after buffer end"); return(nread); } int finish() { if (has_error() ) { return -1; } else if (is_finished() ) { return 1; } else { return 0; } } bool has_error() { return cs == http_parser_error; } bool is_finished() { return cs >= http_parser_first_final; } }