about summary refs log tree commit homepage
path: root/ext
diff options
context:
space:
mode:
authorzedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9>2006-02-20 06:38:35 +0000
committerzedshaw <zedshaw@19e92222-5c0b-0410-8929-a290d50e31e9>2006-02-20 06:38:35 +0000
commit1c7d2316b2cef5bff1254f215e57a2395895bd41 (patch)
treea867edabc8a82a23c115cfbf98d9ba679ec8b369 /ext
parenta128709186acb486a329b2ee5ce7d87ce8af87d8 (diff)
downloadunicorn-1c7d2316b2cef5bff1254f215e57a2395895bd41.tar.gz
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@47 19e92222-5c0b-0410-8929-a290d50e31e9
Diffstat (limited to 'ext')
-rw-r--r--ext/http11/http11_parser.c439
-rw-r--r--ext/http11/http11_parser.rl6
2 files changed, 179 insertions, 266 deletions
diff --git a/ext/http11/http11_parser.c b/ext/http11/http11_parser.c
index 9c1c01b..c17d907 100644
--- a/ext/http11/http11_parser.c
+++ b/ext/http11/http11_parser.c
@@ -17,7 +17,7 @@
 #line 18 "ext/http11/http11_parser.c"
 static int http_parser_start = 0;
 
-static int http_parser_first_final = 56;
+static int http_parser_first_final = 53;
 
 static int http_parser_error = 1;
 
@@ -162,7 +162,7 @@ tr34:
                               parser->request_uri(parser->data, parser->mark, p - parser->mark);
         }
         goto st10;
-tr48:
+tr46:
 #line 37 "ext/http11/http11_parser.rl"
         {
                if(parser->query_string != NULL)
@@ -249,11 +249,21 @@ tr37:
                               parser->http_version(parser->data, parser->mark, p - parser->mark);
         }
         goto st19;
+tr49:
+#line 22 "ext/http11/http11_parser.rl"
+        {
+               if(parser->http_field != NULL) {
+                              parser->http_field(parser->data,
+                                       parser->field_start, parser->field_len,
+                                parser->mark+1, p - (parser->mark +1));
+                }
+        }
+        goto st19;
 st19:
         if ( ++p == pe )
                 goto _out19;
 case 19:
-#line 257 "ext/http11/http11_parser.c"
+#line 267 "ext/http11/http11_parser.c"
         if ( (*p) == 10 )
                 goto st20;
         goto st1;
@@ -295,14 +305,14 @@ case 21:
 tr40:
 #line 46 "ext/http11/http11_parser.rl"
         {
-               parser->body_start = p+1; goto _out56;
+               parser->body_start = p+1; goto _out53;
         }
-        goto st56;
-st56:
+        goto st53;
+st53:
         if ( ++p == pe )
-                goto _out56;
-case 56:
-#line 306 "ext/http11/http11_parser.c"
+                goto _out53;
+case 53:
+#line 316 "ext/http11/http11_parser.c"
         goto st1;
 tr36:
 #line 16 "ext/http11/http11_parser.rl"
@@ -312,7 +322,7 @@ st22:
         if ( ++p == pe )
                 goto _out22;
 case 22:
-#line 316 "ext/http11/http11_parser.c"
+#line 326 "ext/http11/http11_parser.c"
         switch( (*p) ) {
                 case 33: goto st22;
                 case 58: goto tr32;
@@ -347,11 +357,11 @@ st23:
         if ( ++p == pe )
                 goto _out23;
 case 23:
-#line 351 "ext/http11/http11_parser.c"
+#line 361 "ext/http11/http11_parser.c"
         if ( (*p) == 13 )
-                goto tr56;
-        goto tr55;
-tr55:
+                goto tr49;
+        goto tr52;
+tr52:
 #line 21 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
         goto st24;
@@ -359,141 +369,47 @@ st24:
         if ( ++p == pe )
                 goto _out24;
 case 24:
-#line 363 "ext/http11/http11_parser.c"
+#line 373 "ext/http11/http11_parser.c"
         if ( (*p) == 13 )
-                goto tr51;
+                goto tr49;
         goto st24;
-tr51:
-#line 22 "ext/http11/http11_parser.rl"
-        {
-               if(parser->http_field != NULL) {
-                              parser->http_field(parser->data,
-                                       parser->field_start, parser->field_len,
-                                parser->mark+1, p - (parser->mark +1));
-                }
-        }
-        goto st25;
-tr56:
-#line 21 "ext/http11/http11_parser.rl"
+tr28:
+#line 14 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
-#line 22 "ext/http11/http11_parser.rl"
-        {
-               if(parser->http_field != NULL) {
-                              parser->http_field(parser->data,
-                                       parser->field_start, parser->field_len,
-                                parser->mark+1, p - (parser->mark +1));
-                }
-        }
         goto st25;
 st25:
         if ( ++p == pe )
                 goto _out25;
 case 25:
-#line 393 "ext/http11/http11_parser.c"
-        switch( (*p) ) {
-                case 10: goto st26;
-                case 13: goto tr51;
-        }
-        goto st24;
-st26:
-        if ( ++p == pe )
-                goto _out26;
-case 26:
+#line 385 "ext/http11/http11_parser.c"
         switch( (*p) ) {
-                case 13: goto st21;
-                case 33: goto tr42;
-                case 124: goto tr42;
-                case 126: goto tr42;
-        }
-        if ( (*p) < 45 ) {
-                if ( (*p) > 39 ) {
-                        if ( 42 <= (*p) && (*p) <= 43 )
-                                goto tr42;
-                } else if ( (*p) >= 35 )
-                        goto tr42;
-        } else if ( (*p) > 46 ) {
-                if ( (*p) < 65 ) {
-                        if ( 48 <= (*p) && (*p) <= 57 )
-                                goto tr42;
-                } else if ( (*p) > 90 ) {
-                        if ( 94 <= (*p) && (*p) <= 122 )
-                                goto tr42;
-                } else
-                        goto tr42;
-        } else
-                goto tr42;
-        goto st24;
-tr42:
-#line 16 "ext/http11/http11_parser.rl"
-        { parser->field_start = p; }
-        goto st27;
-st27:
-        if ( ++p == pe )
-                goto _out27;
-case 27:
-#line 435 "ext/http11/http11_parser.c"
-        switch( (*p) ) {
-                case 13: goto tr51;
-                case 33: goto st27;
-                case 58: goto tr32;
-                case 124: goto st27;
-                case 126: goto st27;
-        }
-        if ( (*p) < 45 ) {
-                if ( (*p) > 39 ) {
-                        if ( 42 <= (*p) && (*p) <= 43 )
-                                goto st27;
-                } else if ( (*p) >= 35 )
-                        goto st27;
-        } else if ( (*p) > 46 ) {
-                if ( (*p) < 65 ) {
-                        if ( 48 <= (*p) && (*p) <= 57 )
-                                goto st27;
-                } else if ( (*p) > 90 ) {
-                        if ( 94 <= (*p) && (*p) <= 122 )
-                                goto st27;
-                } else
-                        goto st27;
-        } else
-                goto st27;
-        goto st24;
-tr28:
-#line 14 "ext/http11/http11_parser.rl"
-        { MARK(parser, p); }
-        goto st28;
-st28:
-        if ( ++p == pe )
-                goto _out28;
-case 28:
-#line 469 "ext/http11/http11_parser.c"
-        switch( (*p) ) {
-                case 43: goto st28;
-                case 58: goto st29;
+                case 43: goto st25;
+                case 58: goto st26;
         }
         if ( (*p) < 48 ) {
                 if ( 45 <= (*p) && (*p) <= 46 )
-                        goto st28;
+                        goto st25;
         } else if ( (*p) > 57 ) {
                 if ( (*p) > 90 ) {
                         if ( 97 <= (*p) && (*p) <= 122 )
-                                goto st28;
+                                goto st25;
                 } else if ( (*p) >= 65 )
-                        goto st28;
+                        goto st25;
         } else
-                goto st28;
+                goto st25;
         goto st1;
 tr30:
 #line 14 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
-        goto st29;
-st29:
+        goto st26;
+st26:
         if ( ++p == pe )
-                goto _out29;
-case 29:
-#line 494 "ext/http11/http11_parser.c"
+                goto _out26;
+case 26:
+#line 410 "ext/http11/http11_parser.c"
         switch( (*p) ) {
                 case 32: goto tr34;
-                case 37: goto st30;
+                case 37: goto st27;
                 case 60: goto st1;
                 case 62: goto st1;
                 case 127: goto st1;
@@ -503,49 +419,49 @@ case 29:
                         goto st1;
         } else if ( (*p) >= 0 )
                 goto st1;
-        goto st29;
-st30:
+        goto st26;
+st27:
         if ( ++p == pe )
-                goto _out30;
-case 30:
+                goto _out27;
+case 27:
         if ( (*p) < 65 ) {
                 if ( 48 <= (*p) && (*p) <= 57 )
-                        goto st31;
+                        goto st28;
         } else if ( (*p) > 70 ) {
                 if ( 97 <= (*p) && (*p) <= 102 )
-                        goto st31;
+                        goto st28;
         } else
-                goto st31;
+                goto st28;
         goto st1;
-st31:
+st28:
         if ( ++p == pe )
-                goto _out31;
-case 31:
+                goto _out28;
+case 28:
         if ( (*p) < 65 ) {
                 if ( 48 <= (*p) && (*p) <= 57 )
-                        goto st29;
+                        goto st26;
         } else if ( (*p) > 70 ) {
                 if ( 97 <= (*p) && (*p) <= 102 )
-                        goto st29;
+                        goto st26;
         } else
-                goto st29;
+                goto st26;
         goto st1;
 tr29:
 #line 14 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
-        goto st32;
-st32:
+        goto st29;
+st29:
         if ( ++p == pe )
-                goto _out32;
-case 32:
-#line 542 "ext/http11/http11_parser.c"
+                goto _out29;
+case 29:
+#line 458 "ext/http11/http11_parser.c"
         switch( (*p) ) {
                 case 32: goto tr34;
-                case 37: goto st34;
+                case 37: goto st31;
                 case 47: goto st1;
                 case 60: goto st1;
                 case 62: goto st1;
-                case 63: goto tr46;
+                case 63: goto tr44;
                 case 127: goto st1;
         }
         if ( (*p) > 31 ) {
@@ -553,17 +469,17 @@ case 32:
                         goto st1;
         } else if ( (*p) >= 0 )
                 goto st1;
-        goto st33;
-st33:
+        goto st30;
+st30:
         if ( ++p == pe )
-                goto _out33;
-case 33:
+                goto _out30;
+case 30:
         switch( (*p) ) {
                 case 32: goto tr34;
-                case 37: goto st34;
+                case 37: goto st31;
                 case 60: goto st1;
                 case 62: goto st1;
-                case 63: goto tr46;
+                case 63: goto tr44;
                 case 127: goto st1;
         }
         if ( (*p) > 31 ) {
@@ -571,48 +487,48 @@ case 33:
                         goto st1;
         } else if ( (*p) >= 0 )
                 goto st1;
-        goto st33;
-st34:
+        goto st30;
+st31:
         if ( ++p == pe )
-                goto _out34;
-case 34:
+                goto _out31;
+case 31:
         if ( (*p) < 65 ) {
                 if ( 48 <= (*p) && (*p) <= 57 )
-                        goto st35;
+                        goto st32;
         } else if ( (*p) > 70 ) {
                 if ( 97 <= (*p) && (*p) <= 102 )
-                        goto st35;
+                        goto st32;
         } else
-                goto st35;
+                goto st32;
         goto st1;
-st35:
+st32:
         if ( ++p == pe )
-                goto _out35;
-case 35:
+                goto _out32;
+case 32:
         if ( (*p) < 65 ) {
                 if ( 48 <= (*p) && (*p) <= 57 )
-                        goto st33;
+                        goto st30;
         } else if ( (*p) > 70 ) {
                 if ( 97 <= (*p) && (*p) <= 102 )
-                        goto st33;
+                        goto st30;
         } else
-                goto st33;
+                goto st30;
         goto st1;
-tr46:
+tr44:
 #line 33 "ext/http11/http11_parser.rl"
         {
                if(parser->request_uri != NULL)
                               parser->request_uri(parser->data, parser->mark, p - parser->mark);
         }
-        goto st36;
-st36:
+        goto st33;
+st33:
         if ( ++p == pe )
-                goto _out36;
-case 36:
-#line 613 "ext/http11/http11_parser.c"
+                goto _out33;
+case 33:
+#line 529 "ext/http11/http11_parser.c"
         switch( (*p) ) {
-                case 32: goto tr48;
-                case 37: goto tr54;
+                case 32: goto tr46;
+                case 37: goto tr51;
                 case 60: goto st1;
                 case 62: goto st1;
                 case 127: goto st1;
@@ -622,19 +538,19 @@ case 36:
                         goto st1;
         } else if ( (*p) >= 0 )
                 goto st1;
-        goto tr53;
-tr53:
+        goto tr50;
+tr50:
 #line 14 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
-        goto st37;
-st37:
+        goto st34;
+st34:
         if ( ++p == pe )
-                goto _out37;
-case 37:
-#line 635 "ext/http11/http11_parser.c"
+                goto _out34;
+case 34:
+#line 551 "ext/http11/http11_parser.c"
         switch( (*p) ) {
-                case 32: goto tr48;
-                case 37: goto st38;
+                case 32: goto tr46;
+                case 37: goto st35;
                 case 60: goto st1;
                 case 62: goto st1;
                 case 127: goto st1;
@@ -644,58 +560,84 @@ case 37:
                         goto st1;
         } else if ( (*p) >= 0 )
                 goto st1;
-        goto st37;
-tr54:
+        goto st34;
+tr51:
 #line 14 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
-        goto st38;
-st38:
+        goto st35;
+st35:
         if ( ++p == pe )
-                goto _out38;
-case 38:
-#line 657 "ext/http11/http11_parser.c"
+                goto _out35;
+case 35:
+#line 573 "ext/http11/http11_parser.c"
         if ( (*p) < 65 ) {
                 if ( 48 <= (*p) && (*p) <= 57 )
-                        goto st39;
+                        goto st36;
         } else if ( (*p) > 70 ) {
                 if ( 97 <= (*p) && (*p) <= 102 )
-                        goto st39;
+                        goto st36;
         } else
-                goto st39;
+                goto st36;
         goto st1;
-st39:
+st36:
         if ( ++p == pe )
-                goto _out39;
-case 39:
+                goto _out36;
+case 36:
         if ( (*p) < 65 ) {
                 if ( 48 <= (*p) && (*p) <= 57 )
-                        goto st37;
+                        goto st34;
         } else if ( (*p) > 70 ) {
                 if ( 97 <= (*p) && (*p) <= 102 )
-                        goto st37;
+                        goto st34;
         } else
-                goto st37;
+                goto st34;
         goto st1;
 tr14:
 #line 14 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
-        goto st40;
+        goto st37;
+st37:
+        if ( ++p == pe )
+                goto _out37;
+case 37:
+#line 604 "ext/http11/http11_parser.c"
+        if ( (*p) == 69 )
+                goto st38;
+        goto st1;
+st38:
+        if ( ++p == pe )
+                goto _out38;
+case 38:
+        if ( (*p) == 84 )
+                goto st7;
+        goto st1;
+tr15:
+#line 14 "ext/http11/http11_parser.rl"
+        { MARK(parser, p); }
+        goto st39;
+st39:
+        if ( ++p == pe )
+                goto _out39;
+case 39:
+#line 623 "ext/http11/http11_parser.c"
+        if ( (*p) == 69 )
+                goto st40;
+        goto st1;
 st40:
         if ( ++p == pe )
                 goto _out40;
 case 40:
-#line 688 "ext/http11/http11_parser.c"
-        if ( (*p) == 69 )
+        if ( (*p) == 65 )
                 goto st41;
         goto st1;
 st41:
         if ( ++p == pe )
                 goto _out41;
 case 41:
-        if ( (*p) == 84 )
+        if ( (*p) == 68 )
                 goto st7;
         goto st1;
-tr15:
+tr16:
 #line 14 "ext/http11/http11_parser.rl"
         { MARK(parser, p); }
         goto st42;
@@ -703,115 +645,89 @@ st42:
         if ( ++p == pe )
                 goto _out42;
 case 42:
-#line 707 "ext/http11/http11_parser.c"
-        if ( (*p) == 69 )
+#line 649 "ext/http11/http11_parser.c"
+        if ( (*p) == 80 )
                 goto st43;
         goto st1;
 st43:
         if ( ++p == pe )
                 goto _out43;
 case 43:
-        if ( (*p) == 65 )
+        if ( (*p) == 84 )
                 goto st44;
         goto st1;
 st44:
         if ( ++p == pe )
                 goto _out44;
 case 44:
-        if ( (*p) == 68 )
-                goto st7;
+        if ( (*p) == 73 )
+                goto st45;
         goto st1;
-tr16:
-#line 14 "ext/http11/http11_parser.rl"
-        { MARK(parser, p); }
-        goto st45;
 st45:
         if ( ++p == pe )
                 goto _out45;
 case 45:
-#line 733 "ext/http11/http11_parser.c"
-        if ( (*p) == 80 )
+        if ( (*p) == 79 )
                 goto st46;
         goto st1;
 st46:
         if ( ++p == pe )
                 goto _out46;
 case 46:
-        if ( (*p) == 84 )
+        if ( (*p) == 78 )
                 goto st47;
         goto st1;
 st47:
         if ( ++p == pe )
                 goto _out47;
 case 47:
-        if ( (*p) == 73 )
-                goto st48;
+        if ( (*p) == 83 )
+                goto st7;
         goto st1;
+tr17:
+#line 14 "ext/http11/http11_parser.rl"
+        { MARK(parser, p); }
+        goto st48;
 st48:
         if ( ++p == pe )
                 goto _out48;
 case 48:
-        if ( (*p) == 79 )
-                goto st49;
+#line 696 "ext/http11/http11_parser.c"
+        switch( (*p) ) {
+                case 79: goto st49;
+                case 85: goto st38;
+        }
         goto st1;
 st49:
         if ( ++p == pe )
                 goto _out49;
 case 49:
-        if ( (*p) == 78 )
-                goto st50;
+        if ( (*p) == 83 )
+                goto st38;
         goto st1;
+tr18:
+#line 14 "ext/http11/http11_parser.rl"
+        { MARK(parser, p); }
+        goto st50;
 st50:
         if ( ++p == pe )
                 goto _out50;
 case 50:
-        if ( (*p) == 83 )
-                goto st7;
+#line 717 "ext/http11/http11_parser.c"
+        if ( (*p) == 82 )
+                goto st51;
         goto st1;
-tr17:
-#line 14 "ext/http11/http11_parser.rl"
-        { MARK(parser, p); }
-        goto st51;
 st51:
         if ( ++p == pe )
                 goto _out51;
 case 51:
-#line 780 "ext/http11/http11_parser.c"
-        switch( (*p) ) {
-                case 79: goto st52;
-                case 85: goto st41;
-        }
+        if ( (*p) == 65 )
+                goto st52;
         goto st1;
 st52:
         if ( ++p == pe )
                 goto _out52;
 case 52:
-        if ( (*p) == 83 )
-                goto st41;
-        goto st1;
-tr18:
-#line 14 "ext/http11/http11_parser.rl"
-        { MARK(parser, p); }
-        goto st53;
-st53:
-        if ( ++p == pe )
-                goto _out53;
-case 53:
-#line 801 "ext/http11/http11_parser.c"
-        if ( (*p) == 82 )
-                goto st54;
-        goto st1;
-st54:
-        if ( ++p == pe )
-                goto _out54;
-case 54:
-        if ( (*p) == 65 )
-                goto st55;
-        goto st1;
-st55:
-        if ( ++p == pe )
-                goto _out55;
-case 55:
         if ( (*p) == 67 )
                 goto st6;
         goto st1;
@@ -837,7 +753,7 @@ case 55:
         _out19: cs = 19; goto _out;
         _out20: cs = 20; goto _out;
         _out21: cs = 21; goto _out;
-        _out56: cs = 56; goto _out;
+        _out53: cs = 53; goto _out;
         _out22: cs = 22; goto _out;
         _out23: cs = 23; goto _out;
         _out24: cs = 24; goto _out;
@@ -869,9 +785,6 @@ case 55:
         _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;
 
         _out: {}
         }
@@ -882,7 +795,7 @@ case 55:
     if(parser->body_start) {
         /* final \r\n combo encountered so stop right here */
         
-#line 886 "ext/http11/http11_parser.c"
+#line 799 "ext/http11/http11_parser.c"
 #line 131 "ext/http11/http11_parser.rl"
         parser->nread++;
     }
@@ -895,7 +808,7 @@ int http_parser_finish(http_parser *parser)
         int cs = parser->cs;
 
         
-#line 899 "ext/http11/http11_parser.c"
+#line 812 "ext/http11/http11_parser.c"
 #line 142 "ext/http11/http11_parser.rl"
 
         parser->cs = cs;
diff --git a/ext/http11/http11_parser.rl b/ext/http11/http11_parser.rl
index c86be7a..1073d9f 100644
--- a/ext/http11/http11_parser.rl
+++ b/ext/http11/http11_parser.rl
@@ -88,11 +88,11 @@
         
         field_name = (token - ":")+ >start_field %write_field;
 
-        field_value = (any - CRLF)*;
+        field_value = any* >start_value %write_value;
 
-        message_header = field_name ":" field_value >start_value %write_value CRLF;
+        message_header = field_name ":" field_value $0 CRLF >1;
         
-        Request = Request_Line (message_header)* $0 ( CRLF $1 @done );
+        Request = Request_Line (message_header)* ( CRLF @done );
 
         main := Request;
 }%%