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_java/http11_parser.rl | 53 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) (limited to 'ext/http11_java/http11_parser.rl') 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