From 8cd014022475f40657e6bb8f0beeaf2aa1b0e4e2 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Thu, 28 Feb 2008 21:14:19 +0100 Subject: [PATCH] small changes, and adding parser.c --- README | 2 +- Rakefile | 23 +- VERSION | 2 +- src/parser.c | 1584 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1598 insertions(+), 13 deletions(-) create mode 100644 src/parser.c diff --git a/README b/README index 3772aac..9f9a08d 100644 --- a/README +++ b/README @@ -42,7 +42,7 @@ The Ruby binding is available as a Ruby Gem. It can be install by executing `gem install ebb` Ebb depends on having glib2 headers and libraries installed. (Easily available -on any UNIX system.) A manual downloads can be found at +on any UNIX system.) Manual download can be done at the [RubyForge project page](http://rubyforge.org/frs/?group_id=5640). ## Why? diff --git a/Rakefile b/Rakefile index 9b459ce..c660155 100644 --- a/Rakefile +++ b/Rakefile @@ -34,16 +34,17 @@ file('site/index.html' => %w{README site/style.css}) do doc = BlueCloth.new(File.read(dir('README'))) template = <<-HEREDOC - - - Ebb - - - - -
CONTENT
- - + + + + Ebb + + + + +
CONTENT
+ + HEREDOC File.open(dir('site/index.html'), "w+") do |f| @@ -68,7 +69,7 @@ spec = Gem::Specification.new do |s| s.bindir = 'bin' s.executables = %w(ebb_rails) - s.files = FileList.new('src/*.{c,h}', + s.files = FileList.new('src/*.{rl,c,h}', 'src/extconf.rb', 'libev/*', 'ruby_lib/**/*', diff --git a/VERSION b/VERSION index 8a9ecc2..4e379d2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.1 \ No newline at end of file +0.0.2 diff --git a/src/parser.c b/src/parser.c new file mode 100644 index 0000000..a972606 --- /dev/null +++ b/src/parser.c @@ -0,0 +1,1584 @@ +#line 1 "src/parser.rl" +/** + * Copyright (c) 2005 Zed A. Shaw + * You can redistribute it and/or modify it under the same terms as Ruby. + */ +#include "parser.h" +#include +#include +#include +#include +#include + +#define LEN(AT, FPC) (FPC - buffer - parser->AT) +#define MARK(M,FPC) (parser->M = (FPC) - buffer) +#define PTR_TO(F) (buffer + parser->F) + +/** machine **/ +#line 122 "src/parser.rl" + + +/** Data **/ + +#line 24 "src/parser.c" +static const int http_parser_start = 1; +static const int http_parser_first_final = 69; +static const int http_parser_error = 0; + +static const int http_parser_en_main = 1; + +#line 126 "src/parser.rl" + +int http_parser_init(http_parser *parser) { + int cs = 0; + +#line 36 "src/parser.c" + { + cs = http_parser_start; + } +#line 130 "src/parser.rl" + parser->cs = cs; + parser->body_start = 0; + parser->content_len = 0; + parser->mark = 0; + parser->nread = 0; + parser->field_len = 0; + parser->field_start = 0; + + return(1); +} + + +/** exec **/ +size_t 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"); + + p = buffer+off; + pe = buffer+len; + + assert(*pe == '\0' && "pointer does not end on NUL"); + assert(pe - p == len - off && "pointers aren't same distance"); + + + +#line 68 "src/parser.c" + { + if ( p == pe ) + goto _out; + switch ( cs ) + { +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: + goto _out0; +tr0: +#line 20 "src/parser.rl" + {MARK(mark, p); } + goto st2; +st2: + if ( ++p == pe ) + goto _out2; +case 2: +#line 98 "src/parser.c" + 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; +tr2: +#line 41 "src/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 124 "src/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 20 "src/parser.rl" + {MARK(mark, p); } + goto st4; +st4: + if ( ++p == pe ) + goto _out4; +case 4: +#line 148 "src/parser.c" + if ( (*p) == 32 ) + goto tr8; + goto st0; +tr8: +#line 45 "src/parser.rl" + { + if(parser->request_uri != NULL) + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + goto st5; +tr52: +#line 61 "src/parser.rl" + { + if(parser->request_path != NULL) + parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p)); + } +#line 45 "src/parser.rl" + { + if(parser->request_uri != NULL) + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + goto st5; +tr62: +#line 50 "src/parser.rl" + {MARK(query_start, p); } +#line 51 "src/parser.rl" + { + if(parser->query_string != NULL) + parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p)); + } +#line 45 "src/parser.rl" + { + if(parser->request_uri != NULL) + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, p)); + } + goto st5; +tr65: +#line 51 "src/parser.rl" + { + if(parser->query_string != NULL) + parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, p)); + } +#line 45 "src/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 201 "src/parser.c" + if ( (*p) == 72 ) + goto tr9; + goto st0; +tr9: +#line 20 "src/parser.rl" + {MARK(mark, p); } + goto st6; +st6: + if ( ++p == pe ) + goto _out6; +case 6: +#line 213 "src/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 tr17; + if ( 48 <= (*p) && (*p) <= 57 ) + goto st13; + goto st0; +tr17: +#line 56 "src/parser.rl" + { + if(parser->http_version != NULL) + parser->http_version(parser->data, PTR_TO(mark), LEN(mark, p)); + } + goto st14; +tr26: +#line 29 "src/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; +tr44: +#line 29 "src/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)); + } + } +#line 35 "src/parser.rl" + { + if(parser->content_length != NULL) { + parser->content_length(parser->data, PTR_TO(mark), LEN(mark, p)); + } + } + goto st14; +st14: + if ( ++p == pe ) + goto _out14; +case 14: +#line 303 "src/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 tr20; + case 67: goto tr21; + case 99: goto tr21; + case 124: goto tr20; + case 126: goto tr20; + } + if ( (*p) < 45 ) { + if ( (*p) > 39 ) { + if ( 42 <= (*p) && (*p) <= 43 ) + goto tr20; + } else if ( (*p) >= 35 ) + goto tr20; + } else if ( (*p) > 46 ) { + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto tr20; + } else if ( (*p) > 90 ) { + if ( 94 <= (*p) && (*p) <= 122 ) + goto tr20; + } else + goto tr20; + } else + goto tr20; + goto st0; +st16: + if ( ++p == pe ) + goto _out16; +case 16: + if ( (*p) == 10 ) + goto tr22; + goto st0; +tr22: +#line 66 "src/parser.rl" + { + parser->body_start = p - buffer + 1; + if(parser->header_done != NULL) + parser->header_done(parser->data, p + 1, pe - p - 1); + goto _out69; + } + goto st69; +st69: + if ( ++p == pe ) + goto _out69; +case 69: +#line 357 "src/parser.c" + goto st0; +tr20: +#line 23 "src/parser.rl" + { MARK(field_start, p); } + goto st17; +st17: + if ( ++p == pe ) + goto _out17; +case 17: +#line 367 "src/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 24 "src/parser.rl" + { + parser->field_len = LEN(field_start, p); + } + goto st18; +tr27: +#line 28 "src/parser.rl" + { MARK(mark, p); } + goto st18; +st18: + if ( ++p == pe ) + goto _out18; +case 18: +#line 406 "src/parser.c" + switch( (*p) ) { + case 13: goto tr26; + case 32: goto tr27; + } + goto tr25; +tr25: +#line 28 "src/parser.rl" + { MARK(mark, p); } + goto st19; +st19: + if ( ++p == pe ) + goto _out19; +case 19: +#line 420 "src/parser.c" + if ( (*p) == 13 ) + goto tr26; + goto st19; +tr21: +#line 23 "src/parser.rl" + { MARK(field_start, p); } + goto st20; +st20: + if ( ++p == pe ) + goto _out20; +case 20: +#line 432 "src/parser.c" + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 79: goto st21; + case 111: goto st21; + 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; +st21: + if ( ++p == pe ) + goto _out21; +case 21: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 78: goto st22; + case 110: goto st22; + 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; +st22: + if ( ++p == pe ) + goto _out22; +case 22: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 84: goto st23; + case 116: goto st23; + 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; +st23: + if ( ++p == pe ) + goto _out23; +case 23: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 69: goto st24; + case 101: goto st24; + 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; +st24: + if ( ++p == pe ) + goto _out24; +case 24: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 78: goto st25; + case 110: goto st25; + 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; +st25: + if ( ++p == pe ) + goto _out25; +case 25: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 84: goto st26; + case 116: goto st26; + 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; +st26: + if ( ++p == pe ) + goto _out26; +case 26: + switch( (*p) ) { + case 33: goto st17; + case 45: goto st27; + case 46: goto st17; + case 58: goto tr24; + case 124: goto st17; + case 126: goto st17; + } + if ( (*p) < 48 ) { + if ( (*p) > 39 ) { + if ( 42 <= (*p) && (*p) <= 43 ) + goto st17; + } else if ( (*p) >= 35 ) + goto st17; + } else if ( (*p) > 57 ) { + if ( (*p) > 90 ) { + if ( 94 <= (*p) && (*p) <= 122 ) + goto st17; + } else if ( (*p) >= 65 ) + goto st17; + } else + goto st17; + goto st0; +st27: + if ( ++p == pe ) + goto _out27; +case 27: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 76: goto st28; + case 108: goto st28; + 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; +st28: + if ( ++p == pe ) + goto _out28; +case 28: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 69: goto st29; + case 101: goto st29; + 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; +st29: + if ( ++p == pe ) + goto _out29; +case 29: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 78: goto st30; + case 110: goto st30; + 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; +st30: + if ( ++p == pe ) + goto _out30; +case 30: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 71: goto st31; + case 103: goto st31; + 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; +st31: + if ( ++p == pe ) + goto _out31; +case 31: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 84: goto st32; + case 116: goto st32; + 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; +st32: + if ( ++p == pe ) + goto _out32; +case 32: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr24; + case 72: goto st33; + case 104: goto st33; + 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; +st33: + if ( ++p == pe ) + goto _out33; +case 33: + switch( (*p) ) { + case 33: goto st17; + case 58: goto tr42; + 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; +tr42: +#line 24 "src/parser.rl" + { + parser->field_len = LEN(field_start, p); + } + goto st34; +tr45: +#line 20 "src/parser.rl" + {MARK(mark, p); } +#line 28 "src/parser.rl" + { MARK(mark, p); } + goto st34; +st34: + if ( ++p == pe ) + goto _out34; +case 34: +#line 860 "src/parser.c" + switch( (*p) ) { + case 13: goto tr44; + case 32: goto tr45; + } + goto tr43; +tr43: +#line 20 "src/parser.rl" + {MARK(mark, p); } +#line 28 "src/parser.rl" + { MARK(mark, p); } + goto st35; +st35: + if ( ++p == pe ) + goto _out35; +case 35: +#line 876 "src/parser.c" + if ( (*p) == 13 ) + goto tr44; + goto st35; +tr5: +#line 20 "src/parser.rl" + {MARK(mark, p); } + goto st36; +st36: + if ( ++p == pe ) + goto _out36; +case 36: +#line 888 "src/parser.c" + switch( (*p) ) { + case 43: goto st36; + case 58: goto st37; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st36; + } else if ( (*p) > 57 ) { + if ( (*p) > 90 ) { + if ( 97 <= (*p) && (*p) <= 122 ) + goto st36; + } else if ( (*p) >= 65 ) + goto st36; + } else + goto st36; + goto st0; +tr7: +#line 20 "src/parser.rl" + {MARK(mark, p); } + goto st37; +st37: + if ( ++p == pe ) + goto _out37; +case 37: +#line 913 "src/parser.c" + switch( (*p) ) { + case 32: goto tr8; + case 37: goto st38; + case 60: goto st0; + case 62: goto st0; + case 127: goto st0; + } + if ( (*p) > 31 ) { + if ( 34 <= (*p) && (*p) <= 35 ) + goto st0; + } else if ( (*p) >= 0 ) + goto st0; + goto st37; +st38: + if ( ++p == pe ) + goto _out38; +case 38: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st39; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st39; + } else + goto st39; + goto st0; +st39: + if ( ++p == pe ) + goto _out39; +case 39: + 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; +tr6: +#line 20 "src/parser.rl" + {MARK(mark, p); } + goto st40; +st40: + if ( ++p == pe ) + goto _out40; +case 40: +#line 961 "src/parser.c" + switch( (*p) ) { + case 32: goto tr52; + case 37: goto st41; + case 59: goto tr54; + case 60: goto st0; + case 62: goto st0; + case 63: goto tr55; + case 127: goto st0; + } + if ( (*p) > 31 ) { + if ( 34 <= (*p) && (*p) <= 35 ) + goto st0; + } else if ( (*p) >= 0 ) + goto st0; + goto st40; +st41: + if ( ++p == pe ) + goto _out41; +case 41: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st42; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st42; + } else + goto st42; + goto st0; +st42: + if ( ++p == pe ) + goto _out42; +case 42: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st40; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st40; + } else + goto st40; + goto st0; +tr54: +#line 61 "src/parser.rl" + { + if(parser->request_path != NULL) + parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p)); + } + goto st43; +st43: + if ( ++p == pe ) + goto _out43; +case 43: +#line 1014 "src/parser.c" + switch( (*p) ) { + case 32: goto tr8; + case 37: goto st44; + case 60: goto st0; + case 62: goto st0; + case 63: goto st46; + case 127: goto st0; + } + if ( (*p) > 31 ) { + if ( 34 <= (*p) && (*p) <= 35 ) + goto st0; + } else if ( (*p) >= 0 ) + goto st0; + goto st43; +st44: + if ( ++p == pe ) + goto _out44; +case 44: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st45; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st45; + } else + goto st45; + goto st0; +st45: + if ( ++p == pe ) + goto _out45; +case 45: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st43; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st43; + } else + goto st43; + goto st0; +tr55: +#line 61 "src/parser.rl" + { + if(parser->request_path != NULL) + parser->request_path(parser->data, PTR_TO(mark), LEN(mark,p)); + } + goto st46; +st46: + if ( ++p == pe ) + goto _out46; +case 46: +#line 1066 "src/parser.c" + switch( (*p) ) { + case 32: goto tr62; + case 37: goto tr63; + case 60: goto st0; + case 62: goto st0; + case 127: goto st0; + } + if ( (*p) > 31 ) { + if ( 34 <= (*p) && (*p) <= 35 ) + goto st0; + } else if ( (*p) >= 0 ) + goto st0; + goto tr61; +tr61: +#line 50 "src/parser.rl" + {MARK(query_start, p); } + goto st47; +st47: + if ( ++p == pe ) + goto _out47; +case 47: +#line 1088 "src/parser.c" + switch( (*p) ) { + case 32: goto tr65; + case 37: goto st48; + case 60: goto st0; + case 62: goto st0; + case 127: goto st0; + } + if ( (*p) > 31 ) { + if ( 34 <= (*p) && (*p) <= 35 ) + goto st0; + } else if ( (*p) >= 0 ) + goto st0; + goto st47; +tr63: +#line 50 "src/parser.rl" + {MARK(query_start, p); } + goto st48; +st48: + if ( ++p == pe ) + goto _out48; +case 48: +#line 1110 "src/parser.c" + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st49; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st49; + } else + goto st49; + goto st0; +st49: + if ( ++p == pe ) + goto _out49; +case 49: + if ( (*p) < 65 ) { + if ( 48 <= (*p) && (*p) <= 57 ) + goto st47; + } else if ( (*p) > 70 ) { + if ( 97 <= (*p) && (*p) <= 102 ) + goto st47; + } else + goto st47; + 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: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st57; + case 95: goto st57; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st57; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st57; + } else + goto st57; + goto st0; +st57: + if ( ++p == pe ) + goto _out57; +case 57: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st58; + case 95: goto st58; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st58; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st58; + } else + goto st58; + goto st0; +st58: + if ( ++p == pe ) + goto _out58; +case 58: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st59; + case 95: goto st59; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st59; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st59; + } else + goto st59; + goto st0; +st59: + if ( ++p == pe ) + goto _out59; +case 59: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st60; + case 95: goto st60; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st60; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st60; + } else + goto st60; + goto st0; +st60: + if ( ++p == pe ) + goto _out60; +case 60: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st61; + case 95: goto st61; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st61; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st61; + } else + goto st61; + goto st0; +st61: + if ( ++p == pe ) + goto _out61; +case 61: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st62; + case 95: goto st62; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st62; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st62; + } else + goto st62; + goto st0; +st62: + if ( ++p == pe ) + goto _out62; +case 62: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st63; + case 95: goto st63; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st63; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st63; + } else + goto st63; + goto st0; +st63: + if ( ++p == pe ) + goto _out63; +case 63: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st64; + case 95: goto st64; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st64; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st64; + } else + goto st64; + goto st0; +st64: + if ( ++p == pe ) + goto _out64; +case 64: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st65; + case 95: goto st65; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st65; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st65; + } else + goto st65; + goto st0; +st65: + if ( ++p == pe ) + goto _out65; +case 65: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st66; + case 95: goto st66; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st66; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st66; + } else + goto st66; + goto st0; +st66: + if ( ++p == pe ) + goto _out66; +case 66: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st67; + case 95: goto st67; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st67; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st67; + } else + goto st67; + goto st0; +st67: + if ( ++p == pe ) + goto _out67; +case 67: + switch( (*p) ) { + case 32: goto tr2; + case 36: goto st68; + case 95: goto st68; + } + if ( (*p) < 48 ) { + if ( 45 <= (*p) && (*p) <= 46 ) + goto st68; + } else if ( (*p) > 57 ) { + if ( 65 <= (*p) && (*p) <= 90 ) + goto st68; + } else + goto st68; + goto st0; +st68: + if ( ++p == pe ) + goto _out68; +case 68: + 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; + _out69: cs = 69; 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; + _out57: cs = 57; goto _out; + _out58: cs = 58; goto _out; + _out59: cs = 59; goto _out; + _out60: cs = 60; goto _out; + _out61: cs = 61; goto _out; + _out62: cs = 62; goto _out; + _out63: cs = 63; goto _out; + _out64: cs = 64; goto _out; + _out65: cs = 65; goto _out; + _out66: cs = 66; goto _out; + _out67: cs = 67; goto _out; + _out68: cs = 68; goto _out; + + _out: {} + } +#line 157 "src/parser.rl" + + parser->cs = cs; + parser->nread += p - (buffer + off); + + assert(p <= pe && "buffer overflow after parsing execute"); + assert(parser->nread <= len && "nread longer than length"); + assert(parser->body_start <= len && "body starts after buffer end"); + assert(parser->mark < len && "mark is after buffer end"); + 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 1552 "src/parser.c" +#line 171 "src/parser.rl" + parser->nread++; + } + + return(parser->nread); +} + +int http_parser_finish(http_parser *parser) +{ + int cs = parser->cs; + + +#line 1565 "src/parser.c" +#line 182 "src/parser.rl" + + parser->cs = cs; + + if (http_parser_has_error(parser) ) { + return -1; + } else if (http_parser_is_finished(parser) ) { + return 1; + } else { + return 0; + } +} + +int http_parser_has_error(http_parser *parser) { + return parser->cs == http_parser_error; +} + +int http_parser_is_finished(http_parser *parser) { + return parser->cs == http_parser_first_final; +} -- 2.11.4.GIT