mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-01-18 19:50:54 +00:00
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.
This commit is contained in:
parent
b1d7b700bb
commit
e64582929f
@ -361,6 +361,25 @@ static inline void channel_forward_forever(struct channel *chn)
|
||||
chn->to_forward = CHN_INFINITE_FORWARD;
|
||||
}
|
||||
|
||||
/* <len> bytes of input data was added into the channel <chn>. 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 */
|
||||
/*********************************************************************/
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user