From e64582929fd1171ebe4c84488a1fcf44a5fb6fbc Mon Sep 17 00:00:00 2001 From: Christopher Faulet Date: Wed, 2 Jan 2019 14:24:35 +0100 Subject: [PATCH] MINOR: channel: Add the function channel_add_input This function must be called when new incoming data are pushed in the channel's buffer. It updates the channel state and take care of the fast forwarding by consuming right amount of data and decrementing "->to_forward" accordingly when necessary. In fact, this patch just moves a part of ci_putblk in a dedicated function. This patch must be backported to 1.9. --- include/proto/channel.h | 20 +++++++++++++++++++- src/channel.c | 14 +------------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/include/proto/channel.h b/include/proto/channel.h index 5d9c7a8aa..0ea458f77 100644 --- a/include/proto/channel.h +++ b/include/proto/channel.h @@ -361,6 +361,25 @@ static inline void channel_forward_forever(struct channel *chn) chn->to_forward = CHN_INFINITE_FORWARD; } +/* bytes of input data was added into the channel . This functions + * must be called to update the channel state. It also handles the fast + * forwarding. */ +static inline void channel_add_input(struct channel *chn, unsigned int len) +{ + if (chn->to_forward) { + unsigned long fwd = len; + if (chn->to_forward != CHN_INFINITE_FORWARD) { + if (fwd > chn->to_forward) + fwd = chn->to_forward; + chn->to_forward -= fwd; + } + c_adv(chn, fwd); + } + /* notify that some data was read */ + chn->total += len; + chn->flags |= CF_READ_PARTIAL; +} + static inline unsigned long long channel_htx_forward(struct channel *chn, struct htx *htx, unsigned long long bytes) { unsigned long long ret; @@ -378,7 +397,6 @@ static inline void channel_htx_forward_forever(struct channel *chn, struct htx * channel_forward_forever(chn); b_set_data(&chn->buf, b_size(&chn->buf)); } - /*********************************************************************/ /* These functions are used to compute various channel content sizes */ /*********************************************************************/ diff --git a/src/channel.c b/src/channel.c index 3bf5c5042..d4a46ffed 100644 --- a/src/channel.c +++ b/src/channel.c @@ -172,19 +172,7 @@ int ci_putblk(struct channel *chn, const char *blk, int len) memcpy(c_orig(chn), blk + max, len - max); b_add(&chn->buf, len); - chn->total += len; - if (chn->to_forward) { - unsigned long fwd = len; - if (chn->to_forward != CHN_INFINITE_FORWARD) { - if (fwd > chn->to_forward) - fwd = chn->to_forward; - chn->to_forward -= fwd; - } - c_adv(chn, fwd); - } - - /* notify that some data was read from the SI into the buffer */ - chn->flags |= CF_READ_PARTIAL; + channel_add_input(chn, len); return len; }