src/server/daemon/httpparser.c

changeset 678
9908159eff0e
parent 671
879005903b2b
--- a/src/server/daemon/httpparser.c	Tue Feb 17 13:03:39 2026 +0100
+++ b/src/server/daemon/httpparser.c	Tue Feb 17 17:43:10 2026 +0100
@@ -48,7 +48,7 @@
     parser->start_line.ptr = (char*)netbuf->inbuf;
     parser->start_line.length = 0;
     
-    parser->offset = 0;
+    parser->line_offset = 0;
 
     return parser;
 }
@@ -81,7 +81,7 @@
                     return 2;
                 }
             }
-            
+            parser->line_offset = parser->netbuf->pos;
             parser->state++;
         }
         case 1: {
@@ -119,12 +119,12 @@
     while(buf->pos < buf->cursize) {
         unsigned char c = buf->inbuf[buf->pos];
         if(c == '\n') {
-            size_t lnlen = buf->pos - parser->offset + 1;
+            size_t lnlen = buf->pos - parser->line_offset + 1;
             if(lnlen <= 2) {
                 if(lnlen == 1 || buf->inbuf[buf->pos-1] == '\r') {
                     // skip empty line
                     buf->pos++;
-                    parser->offset = buf->pos;
+                    parser->line_offset = buf->pos;
                     return 1;
                 }
                 // insufficient chars for request, return error
@@ -135,7 +135,7 @@
             } else {
                 parser->start_line.length = lnlen;
             }
-            parser->start_line.ptr = (char*)buf->inbuf + parser->offset;
+            parser->start_line.ptr = (char*)buf->inbuf + parser->line_offset;
             buf->pos++;
             return 0;
         }
@@ -147,11 +147,6 @@
 int http_parser_parse_header(HttpParser *parser) {
     netbuf *buf = parser->netbuf;
 
-    parser->offset = buf->pos; // line offset
-    parser->name.ptr = NULL;
-    parser->name.length = 0;
-    parser->value.ptr = NULL;
-    parser->value.length = 0;
     while(1) {
         if(buf->pos >= buf->cursize) {
             return 1;
@@ -161,8 +156,8 @@
         if(c > 32) {
             parser->wl = 0;
             if(c == ':' && parser->value.ptr == NULL) {
-                parser->name.ptr = (char*)buf->inbuf + parser->offset;
-                parser->name.length = buf->pos - parser->offset - 1;
+                parser->name.ptr = (char*)buf->inbuf + parser->line_offset;
+                parser->name.length = buf->pos - parser->line_offset - 1;
             } else if(parser->name.ptr != NULL && parser->value.ptr == NULL) {
                 parser->value.ptr = (char*)buf->inbuf + buf->pos - 1;
             }
@@ -172,7 +167,7 @@
                 parser->state++;
                 return 0;
             } else {
-                parser->offset = buf->pos;
+                parser->line_offset = buf->pos;
                 if(parser->name.length != 0) {
                     if(parser->value.ptr) {
                         parser->value.length = (buf->inbuf + buf->pos - 1)

mercurial