From: Christopher Faulet Date: Mon, 7 Jan 2019 13:55:10 +0000 (+0100) Subject: MINOR: channel/htx: Add the HTX version of channel_truncate/erase X-Git-Tag: v2.0-dev1~241 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7ed195ac8b2b7bbae2ca2b2706f7ba11fa63919;p=thirdparty%2Fhaproxy.git MINOR: channel/htx: Add the HTX version of channel_truncate/erase The function channel_htx_truncate() can now be used on HTX buffer to truncate all incoming data, keeping outgoing one intact. This function relies on the function channel_htx_erase() and htx_truncate(). This patch may be backported to 1.9. If so, the patch "MINOR: channel/htx: Add the HTX version of channel_truncate()" must also be backported. --- diff --git a/include/proto/channel.h b/include/proto/channel.h index 0cd842a189..d16b0e7306 100644 --- a/include/proto/channel.h +++ b/include/proto/channel.h @@ -548,6 +548,12 @@ static inline void channel_erase(struct channel *chn) b_reset(&chn->buf); } +static inline void channel_htx_erase(struct channel *chn, struct htx *htx) +{ + htx_reset(htx); + channel_erase(chn); +} + /* marks the channel as "shutdown" ASAP for reads */ static inline void channel_shutr_now(struct channel *chn) { @@ -877,6 +883,17 @@ static inline void channel_truncate(struct channel *chn) chn->buf.data = co_data(chn); } +static inline void channel_htx_truncate(struct channel *chn, struct htx *htx) +{ + if (!co_data(chn)) + return channel_htx_erase(chn, htx); + + chn->to_forward = 0; + if (htx->data == co_data(chn)) + return; + htx_truncate(htx, co_data(chn)); +} + /* This function realigns a possibly wrapping channel buffer so that the input * part is contiguous and starts at the beginning of the buffer and the output * part ends at the end of the buffer. This provides the best conditions since