]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: flt_trace: Use htx_find_offset() to get the available payload length
authorChristopher Faulet <cfaulet@haproxy.com>
Wed, 26 Feb 2020 21:06:11 +0000 (22:06 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Fri, 6 Mar 2020 13:12:59 +0000 (14:12 +0100)
The trace_get_htx_datalen() function now uses htx_find_offset() to get the
payload length, ie. the length of consecutives DATA blocks.

src/flt_trace.c

index 437f283a50e7bb0fccba1adb55ec15447a6b5b7f..5a26fabea2326ce8a4fb883b79e2ffbfb9496afc 100644 (file)
@@ -157,23 +157,22 @@ static unsigned int
 trace_get_htx_datalen(struct htx *htx, unsigned int offset, unsigned int len)
 {
        struct htx_blk *blk;
-       uint32_t sz, data = 0;
+       struct htx_ret htxret = htx_find_offset(htx, offset);
+       uint32_t data = 0;
 
-       for (blk = htx_get_first_blk(htx); blk; blk = htx_get_next_blk(htx, blk)) {
-               if (htx_get_blk_type(blk) != HTX_BLK_DATA)
-                       break;
-
-               sz = htx_get_blksz(blk);
-               if (offset >= sz) {
-                       offset -= sz;
-                       continue;
-               }
-               data  += sz - offset;
-               offset = 0;
-               if (data > len) {
-                       data = len;
+       blk = htxret.blk;
+       if (blk && htxret.ret && htx_get_blk_type(blk) == HTX_BLK_DATA) {
+               data += htxret.ret;
+               blk = htx_get_next_blk(htx, blk);
+       }
+       while (blk) {
+               if (htx_get_blk_type(blk) == HTX_BLK_UNUSED)
+                       goto next;
+               else if (htx_get_blk_type(blk) != HTX_BLK_DATA)
                        break;
-               }
+               data += htx_get_blksz(blk);
+         next:
+               blk = htx_get_next_blk(htx, blk);
        }
        return data;
 }