From: Christopher Faulet Date: Wed, 26 Feb 2020 21:06:11 +0000 (+0100) Subject: MINOR: flt_trace: Use htx_find_offset() to get the available payload length X-Git-Tag: v2.2-dev4~43 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=24598a499fec99994c1c0e61bca8208333100e86;p=thirdparty%2Fhaproxy.git MINOR: flt_trace: Use htx_find_offset() to get the available payload length The trace_get_htx_datalen() function now uses htx_find_offset() to get the payload length, ie. the length of consecutives DATA blocks. --- diff --git a/src/flt_trace.c b/src/flt_trace.c index 437f283a50..5a26fabea2 100644 --- a/src/flt_trace.c +++ b/src/flt_trace.c @@ -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; }