From 594f6fe42cba5b21b67b3492e1835a169b5a6c1d Mon Sep 17 00:00:00 2001 From: evanweaver Date: Wed, 17 Oct 2007 07:05:32 +0000 Subject: restore machine actions git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@674 19e92222-5c0b-0410-8929-a290d50e31e9 --- ext/http11/http11_parser.rl | 56 ++++++++++++++++++++++++++++++++++++++ ext/http11/http11_parser_common.rl | 52 +---------------------------------- ext/http11_java/http11_parser.rl | 53 +++++++++++++++++++++++++++++++++++- 3 files changed, 109 insertions(+), 52 deletions(-) (limited to 'ext') diff --git a/ext/http11/http11_parser.rl b/ext/http11/http11_parser.rl index 0e438dd..edcf191 100644 --- a/ext/http11/http11_parser.rl +++ b/ext/http11/http11_parser.rl @@ -15,6 +15,62 @@ /** Machine **/ +%%{ + + machine http_parser; + + action mark {MARK(mark, fpc); } + + + action start_field { MARK(field_start, fpc); } + action write_field { + parser->field_len = LEN(field_start, fpc); + } + + action start_value { MARK(mark, fpc); } + action write_value { + if(parser->http_field != NULL) { + parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, fpc)); + } + } + action request_method { + if(parser->request_method != NULL) + parser->request_method(parser->data, PTR_TO(mark), LEN(mark, fpc)); + } + action request_uri { + if(parser->request_uri != NULL) + parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, fpc)); + } + action fragment { + if(parser->fragment != NULL) + parser->fragment(parser->data, PTR_TO(mark), LEN(mark, fpc)); + } + + action start_query {MARK(query_start, fpc); } + action query_string { + if(parser->query_string != NULL) + parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, fpc)); + } + + action http_version { + if(parser->http_version != NULL) + parser->http_version(parser->data, PTR_TO(mark), LEN(mark, fpc)); + } + + action request_path { + if(parser->request_path != NULL) + parser->request_path(parser->data, PTR_TO(mark), LEN(mark,fpc)); + } + + action done { + parser->body_start = fpc - buffer + 1; + if(parser->header_done != NULL) + parser->header_done(parser->data, fpc + 1, pe - fpc - 1); + fbreak; + } + +}%% + /** Data **/ %% write data; diff --git a/ext/http11/http11_parser_common.rl b/ext/http11/http11_parser_common.rl index 7f41ddc..4652e33 100644 --- a/ext/http11/http11_parser_common.rl +++ b/ext/http11/http11_parser_common.rl @@ -1,57 +1,7 @@ %%{ + machine http_parser; - action mark {MARK(mark, fpc); } - - - action start_field { MARK(field_start, fpc); } - action write_field { - parser->field_len = LEN(field_start, fpc); - } - - action start_value { MARK(mark, fpc); } - action write_value { - if(parser->http_field != NULL) { - parser->http_field(parser->data, PTR_TO(field_start), parser->field_len, PTR_TO(mark), LEN(mark, fpc)); - } - } - action request_method { - if(parser->request_method != NULL) - parser->request_method(parser->data, PTR_TO(mark), LEN(mark, fpc)); - } - action request_uri { - if(parser->request_uri != NULL) - parser->request_uri(parser->data, PTR_TO(mark), LEN(mark, fpc)); - } - action fragment { - if(parser->fragment != NULL) - parser->fragment(parser->data, PTR_TO(mark), LEN(mark, fpc)); - } - - action start_query {MARK(query_start, fpc); } - action query_string { - if(parser->query_string != NULL) - parser->query_string(parser->data, PTR_TO(query_start), LEN(query_start, fpc)); - } - - action http_version { - if(parser->http_version != NULL) - parser->http_version(parser->data, PTR_TO(mark), LEN(mark, fpc)); - } - - action request_path { - if(parser->request_path != NULL) - parser->request_path(parser->data, PTR_TO(mark), LEN(mark,fpc)); - } - - action done { - parser->body_start = fpc - buffer + 1; - if(parser->header_done != NULL) - parser->header_done(parser->data, fpc + 1, pe - fpc - 1); - fbreak; - } - - #### HTTP PROTOCOL GRAMMAR # line endings CRLF = "\r\n"; diff --git a/ext/http11_java/http11_parser.rl b/ext/http11_java/http11_parser.rl index 32dca11..0c67e92 100644 --- a/ext/http11_java/http11_parser.rl +++ b/ext/http11_java/http11_parser.rl @@ -3,9 +3,60 @@ package org.jruby.mongrel; import org.jruby.util.ByteList; public class Http11Parser { - + /** Machine **/ +%%{ + + machine http_parser; + + action mark {parser.mark = fpc; } + + action start_field { parser.field_start = fpc; } + action write_field { + parser.field_len = fpc-parser.field_start; + } + + action start_value { parser.mark = fpc; } + action write_value { + if(parser.http_field != null) { + parser.http_field.call(parser.data, parser.field_start, parser.field_len, parser.mark, fpc-parser.mark); + } + } + action request_method { + if(parser.request_method != null) + parser.request_method.call(parser.data, parser.mark, fpc-parser.mark); + } + action request_uri { + if(parser.request_uri != null) + parser.request_uri.call(parser.data, parser.mark, fpc-parser.mark); + } + + action start_query {parser.query_start = fpc; } + action query_string { + if(parser.query_string != null) + parser.query_string.call(parser.data, parser.query_start, fpc-parser.query_start); + } + + action http_version { + if(parser.http_version != null) + parser.http_version.call(parser.data, parser.mark, fpc-parser.mark); + } + + action request_path { + if(parser.request_path != null) + parser.request_path.call(parser.data, parser.mark, fpc-parser.mark); + } + + action done { + parser.body_start = fpc + 1; + if(parser.header_done != null) + parser.header_done.call(parser.data, fpc + 1, pe - fpc - 1); + fbreak; + } + +}%% + /** Data **/ %% write data; -- cgit v1.2.3-24-ge0c7