about summary refs log tree commit homepage
path: root/ext
diff options
context:
space:
mode:
authorevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2007-10-17 07:05:32 +0000
committerevanweaver <evanweaver@19e92222-5c0b-0410-8929-a290d50e31e9>2007-10-17 07:05:32 +0000
commit594f6fe42cba5b21b67b3492e1835a169b5a6c1d (patch)
tree08a328eec156f1f3144a726ca16814dab2db18f4 /ext
parent6d91530c8d0e35b236afb2b4a573def300cf3913 (diff)
downloadunicorn-594f6fe42cba5b21b67b3492e1835a169b5a6c1d.tar.gz
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@674 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'ext')
-rw-r--r--ext/http11/http11_parser.rl56
-rw-r--r--ext/http11/http11_parser_common.rl52
-rw-r--r--ext/http11_java/http11_parser.rl53
3 files changed, 109 insertions, 52 deletions
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;