uint32_t data; /* the data size, in bytes. To known to total size used by all allocated
* blocks (blocks and their contents), you need to add size used by blocks,
* i.e. [ used * sizeof(struct htx_blk *) ] */
-
+ uint32_t hdrs_data;
int32_t tail; /* newest inserted block. -1 if the HTX message is empty */
int32_t head; /* oldest inserted block. -1 if the HTX message is empty */
int32_t first; /* position of the first block to (re)start the analyse. -1 if unset. */
uint32_t flags; /* HTX_FL_* */
- /* XXX 4 bytes unused */
-
/* Blocks representing the HTTP message itself */
char blocks[VAR_ARRAY] ALIGNED(8);
};
/* Update HTTP message */
delta = (newlen - oldlen);
+ if (type < HTX_BLK_EOH)
+ htx->hdrs_data += delta;
htx->data += delta;
if (blk->addr+sz == htx->tail_addr)
htx->tail_addr += delta;
static inline void htx_reset(struct htx *htx)
{
htx->tail = htx->head = htx->first = -1;
- htx->data = 0;
+ htx->data = htx->hdrs_data = 0;
htx->tail_addr = htx->head_addr = htx->end_addr = 0;
htx->flags = HTX_FL_NONE;
}
{
int32_t pos;
- chunk_appendf(chunk, " htx=%p(size=%u,data=%u,used=%u,wrap=%s,flags=0x%08x,"
+ chunk_appendf(chunk, " htx=%p(size=%u,data=%u,hdrs=%u,used=%u,wrap=%s,flags=0x%08x,"
"first=%d,head=%d,tail=%d,tail_addr=%d,head_addr=%d,end_addr=%d)",
- htx, htx->size, htx->data, htx_nbblks(htx), (!htx->head_addr) ? "NO" : "YES",
+ htx, htx->size, htx->data, htx->hdrs_data, htx_nbblks(htx), (!htx->head_addr) ? "NO" : "YES",
htx->flags, htx->first, htx->head, htx->tail,
htx->tail_addr, htx->head_addr, htx->end_addr);
BUG_ON(blk->addr > htx->size);
blk->info = (type << 28);
+ if (type < HTX_BLK_EOH)
+ htx->hdrs_data += blksz;
return blk;
}
addr = blk->addr;
if (type != HTX_BLK_UNUSED) {
/* Mark the block as unused, decrement allocated size */
+ if (type < HTX_BLK_EOH)
+ htx->hdrs_data -= sz;
htx->data -= htx_get_blksz(blk);
blk->info = ((uint32_t)HTX_BLK_UNUSED << 28);
}
htx_memcpy(htx_get_blk_ptr(htx, blk), b_orig(chunk), b_data(chunk));
free_trash_chunk(chunk);
}
+
+ if (htx_get_blk_type(blk) < HTX_BLK_EOH)
+ htx->hdrs_data += delta;
+
return blk;
}
htx->data += delta;
}
+ htx->hdrs_data += delta;
+
/* Finally, copy data. */
ptr = htx_get_blk_ptr(htx, blk);
ist2bin_lc(ptr, name);
htx->data += delta;
}
+ htx->hdrs_data += delta;
+
/* Restore start-line info and flags and copy parts of the start-line */
sl = htx_get_blk_ptr(htx, blk);
sl->info = tmp.info;