|
|
- commit 8d09dc21dc913d1540d07d1019a51c430317eae1
- Author: Christopher Faulet <cfaulet@haproxy.com>
- Date: Tue Jun 18 09:37:00 2019 +0200
-
- MINOR: htx: Add the function htx_change_blk_value_len()
-
- As its name suggest, this function change the value length of a block. But it
- also update the HTX message accordingly. It simplifies the HTX API. The function
- htx_set_blk_value_len() is still available and must be used with caution because
- this one does not update the HTX message. It just updates the HTX block. It
- should be considered as an internal function. When possible,
- htx_change_blk_value_len() should be used instead.
-
- This function is used to fix a bug affecting the 2.0. So, this patch must be
- backported to 2.0.
-
- (cherry picked from commit bb0efcdd293de33607a6eba075971b49857375e2)
- Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
-
- diff --git a/include/common/htx.h b/include/common/htx.h
- index 9631c618..7d15365a 100644
- --- a/include/common/htx.h
- +++ b/include/common/htx.h
- @@ -470,7 +470,41 @@ static inline struct htx_blk *htx_get_next_blk(const struct htx *htx,
- }
-
- /* Changes the size of the value. It is the caller responsibility to change the
- - * value itself, make sure there is enough space and update allocated value.
- + * value itself, make sure there is enough space and update allocated
- + * value. This function updates the HTX message accordingly.
- + */
- +static inline void htx_change_blk_value_len(struct htx *htx, struct htx_blk *blk, uint32_t newlen)
- +{
- + enum htx_blk_type type = htx_get_blk_type(blk);
- + uint32_t oldlen, sz;
- + int32_t delta;
- +
- + sz = htx_get_blksz(blk);
- + switch (type) {
- + case HTX_BLK_HDR:
- + case HTX_BLK_TLR:
- + oldlen = (blk->info >> 8) & 0xfffff;
- + blk->info = (type << 28) + (newlen << 8) + (blk->info & 0xff);
- + break;
- + default:
- + oldlen = blk->info & 0xfffffff;
- + blk->info = (type << 28) + newlen;
- + break;
- + }
- +
- + /* Update HTTP message */
- + delta = (newlen - oldlen);
- + htx->data += delta;
- + if (blk->addr+sz == htx->tail_addr)
- + htx->tail_addr += delta;
- + else if (blk->addr+sz == htx->head_addr)
- + htx->head_addr += delta;
- +}
- +
- +/* Changes the size of the value. It is the caller responsibility to change the
- + * value itself, make sure there is enough space and update allocated
- + * value. Unlike the function htx_change_blk_value_len(), this one does not
- + * update the HTX message. So it should be used with caution.
- */
- static inline void htx_set_blk_value_len(struct htx_blk *blk, uint32_t vlen)
- {
|