]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Try to fit options in 6 bits.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 11 Mar 2015 15:18:49 +0000 (15:18 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Wed, 11 Mar 2015 15:21:48 +0000 (15:21 +0000)
contrib/http-parser/http_parser.c
contrib/http-parser/http_parser.h

index 5295b6bdc6610cf2b63cff4dc6e6a8cdc19685c5..33f5ed301e3b2f888c711707d9a5fcc9d14ebb3f 100644 (file)
@@ -1215,21 +1215,21 @@ size_t http_parser_execute (http_parser *parser,
 
         break;
       }
-      case s_req_spamc_start:
-          switch (ch) {
-          case 'S':
-                 parser->flags |= F_SPAMC;
-                 /* go forward */
-          case 'R':
-              parser->state = s_req_spamc;
-              break;
-          case ' ':
-              break;
-          default:
-             SET_ERRNO(HPE_INVALID_CONSTANT);
-             goto error;
-          }
-      break;
+      case s_req_spamc_start: {
+         if (ch == 'S') {
+                 parser->flags |= F_SPAMC;
+                 parser->state = s_req_spamc;
+         }
+         else if (ch == 'R') {
+                 parser->state = s_req_spamc;
+         }
+         else if (ch != ' ') {
+                 SET_ERRNO(HPE_INVALID_CONSTANT);
+                 goto error;
+         }
+
+          break;
+      }
 
       case s_req_spamc:
       {
@@ -1609,7 +1609,7 @@ size_t http_parser_execute (http_parser *parser,
             parser->flags |= F_CONNECTION_KEEP_ALIVE;
             break;
           case h_connection_close:
-            parser->flags |= F_CONNECTION_CLOSE;
+            /* XXX: not needed for rspamd parser->flags |= F_CONNECTION_CLOSE; */
             break;
           case h_transfer_encoding_chunked:
             parser->flags |= F_CHUNKED;
@@ -1959,7 +1959,7 @@ http_should_keep_alive (const http_parser *parser)
 {
   if (parser->http_major > 0 && parser->http_minor > 0) {
     /* HTTP/1.1 */
-    if (parser->flags & F_CONNECTION_CLOSE) {
+    if (!(parser->flags & F_CONNECTION_KEEP_ALIVE)) {
       return 0;
     }
   } else {
index f6f29b057f3692085d89337af5e585b1998bd9d1..bac517f51ee78e477328c0142e6373c5829598b8 100644 (file)
@@ -129,11 +129,10 @@ enum http_parser_type { HTTP_REQUEST, HTTP_RESPONSE, HTTP_BOTH };
 enum flags
   { F_CHUNKED               = 1 << 0
   , F_CONNECTION_KEEP_ALIVE = 1 << 1
-  , F_CONNECTION_CLOSE      = 1 << 2
+  , F_SPAMC                 = 1 << 2
   , F_TRAILING              = 1 << 3
   , F_UPGRADE               = 1 << 4
   , F_SKIPBODY              = 1 << 5
-  , F_SPAMC                 = 1 << 6
   };