src/server/proxy/httpclient.c

changeset 682
f4c593a99266
parent 681
e9705d51866a
child 683
db37761a8494
--- a/src/server/proxy/httpclient.c	Tue Feb 17 22:05:30 2026 +0100
+++ b/src/server/proxy/httpclient.c	Wed Feb 18 10:53:55 2026 +0100
@@ -738,11 +738,6 @@
         // because we are using chunked transfer encoding, the result buffer
         // (buf) should contain more than 128 bytes (additional chunk headers)
         CX_TEST_ASSERT(buf.pos > 128);
-        // check for chunk headers
-        // TODO
-        //CX_TEST_ASSERT(!cx_strcmp(cx_strn(buf.space, 4), "10\r\n"));
-        
-        size_t offset = buf.pos;
         
         // change chunk size to 128
         req.max_reads = 9999;
@@ -762,24 +757,30 @@
         CX_TEST_ASSERT(req.cur_reads < req.max_reads);
         //CX_TEST_ASSERT(buf.size == 1084 + 5);
         
-        // TODO
-        /*
-        // check chunks
-        char testbuf[128];
-        memset(testbuf, 'x', 128);
-        cxstring x1 = cx_strn(buf.space + 296, 128);
-        CX_TEST_ASSERT(!cx_strcmp(x1, cx_strn(testbuf, 128)));
-        cxstring x2 = cx_strn(buf.space + 560, 128);
-        CX_TEST_ASSERT(!cx_strcmp(x2, cx_strn(testbuf, 128)));
-        cxstring x3 = cx_strn(buf.space + 824, 128);
-        CX_TEST_ASSERT(!cx_strcmp(x3, cx_strn(testbuf, 128)));
-        memset(testbuf, 'y', 128);
-        cxstring y1 = cx_strn(buf.space + 164, 128);
-        CX_TEST_ASSERT(!cx_strcmp(y1, cx_strn(testbuf, 128)));
-        cxstring z1 = cx_strn(buf.space + 428, 128);
-        memset(testbuf, 'z', 128);
-        CX_TEST_ASSERT(!cx_strcmp(z1, cx_strn(testbuf, 128)));
-        */
+        // verify chunks
+        char test_request_body[1024];
+        memset(test_request_body, 0, 1024);
+        
+        int pos = 0;
+        int chunklen = 0;
+        char *str = buf.space;
+        while(str < buf.space + buf.size) {
+            cxstring chunkheader = cx_strn(str, 2);
+            if(!cx_strcmp(chunkheader, "0\r")) {
+                chunkheader.length = 1;
+            }
+            int ret = cx_strtoi(chunkheader, &chunklen, 16);
+            CX_TEST_ASSERT(ret == 0);
+            if(chunklen == 0) {
+                break;
+            }
+            
+            char *data = str + 4;
+            memcpy(test_request_body + pos, data, chunklen);
+            pos += chunklen;
+            str = data + chunklen;
+        }
+        CX_TEST_ASSERT(!memcmp(request_body, test_request_body, 1024));
         
         // cleanup
         close(fds[0]);

mercurial