MEDIUM: filters/htx: Filter body relatively to the first block

The filters filtering HTX body, in the callback http_payload, must now loop on
an HTX message starting from the first block position. The offset passed as
parameter is relative to this position and not the head one. It is mandatory
because once filtered, data are now forwarded using the function
channel_htx_fwd_payload(). So the first block position is always updated.
diff --git a/src/flt_trace.c b/src/flt_trace.c
index 3a14244..96a19a1 100644
--- a/src/flt_trace.c
+++ b/src/flt_trace.c
@@ -131,17 +131,18 @@
 static void
 trace_htx_hexdump(struct htx *htx, unsigned int offset, unsigned int len)
 {
-	struct htx_ret htx_ret;
 	struct htx_blk *blk;
 
-	htx_ret = htx_find_blk(htx, offset);
-	blk = htx_ret.blk;
-	offset = htx_ret.ret;
-
-	while (blk) {
+	for (blk = htx_get_first_blk(htx); blk && len; blk = htx_get_next_blk(htx, blk)) {
 		enum htx_blk_type type = htx_get_blk_type(blk);
+		uint32_t sz = htx_get_blksz(blk);
 		struct ist v;
 
+		if (offset >= sz) {
+			offset -= sz;
+			continue;
+		}
+
 		v = htx_get_blk_value(htx, blk);
 		v.ptr += offset;
 		v.len -= offset;
@@ -152,7 +153,6 @@
 		len -= v.len;
 		if (type == HTX_BLK_DATA || type == HTX_BLK_TLR)
 			trace_hexdump(v);
-		blk = htx_get_next_blk(htx, blk);
 	}
 }