diff --git a/include/common/htx.h b/include/common/htx.h index 55d493131..ec9909851 100644 --- a/include/common/htx.h +++ b/include/common/htx.h @@ -139,6 +139,9 @@ struct htx_sl { /* XXX 2 bytes unused */ + int32_t hdrs_bytes; /* Bytes held by all headers from this start-line + * to the corresponding EOH. -1 if unknown */ + unsigned int len[3]; /* length of differnt parts of the start-line */ char l[0]; }; diff --git a/src/htx.c b/src/htx.c index 3a2252feb..bc2ecbdf3 100644 --- a/src/htx.c +++ b/src/htx.c @@ -633,6 +633,8 @@ struct htx_sl *htx_replace_stline(struct htx *htx, struct htx_blk *blk, const st sl = htx_get_blk_ptr(htx, blk); sl->info = tmp.info; sl->flags = tmp.flags; + if (sl->hdrs_bytes != -1) + sl->hdrs_bytes += delta; HTX_SL_P1_LEN(sl) = p1.len; HTX_SL_P2_LEN(sl) = p2.len; @@ -669,7 +671,7 @@ struct htx_sl *htx_add_stline(struct htx *htx, enum htx_blk_type type, unsigned sl = htx_get_blk_ptr(htx, blk); if (htx->sl_pos == -1) htx->sl_pos = htx_get_blk_pos(htx, blk); - + sl->hdrs_bytes = -1; sl->flags = flags; HTX_SL_P1_LEN(sl) = p1.len;