CS_FL_ERROR = 0x00000100, /* a fatal error was reported */
- CS_FL_RCV_MORE = 0x00000200, /* more bytes to receive but not enough room */
+ CS_FL_RCV_MORE = 0x00000200, /* We may have more bytes to transfert */
+ CS_FL_WANT_ROOM = 0x00000400, /* More bytes to transfert, but not enough room */
CS_FL_EOS = 0x00001000, /* End of stream delivered to data layer */
CS_FL_REOS = 0x00002000, /* End of stream received (buffer not empty) */
CS_FL_WAIT_FOR_HS = 0x00010000, /* This stream is waiting for handhskae */
if (b_data(&h1c->ibuf)) {
if (!htx_is_empty(htx))
- h1s->cs->flags |= CS_FL_RCV_MORE;
+ h1s->cs->flags |= CS_FL_RCV_MORE | CS_FL_WANT_ROOM;
}
else {
h1_release_buf(h1c, &h1c->ibuf);
h1_sync_messages(h1c);
- h1s->cs->flags &= ~CS_FL_RCV_MORE;
+ h1s->cs->flags &= ~(CS_FL_RCV_MORE | CS_FL_WANT_ROOM);
if (h1s->cs->flags & CS_FL_REOS)
h1s->cs->flags |= CS_FL_EOS;
}
}
if (b_data(&h2s->rxbuf))
- cs->flags |= CS_FL_RCV_MORE;
+ cs->flags |= (CS_FL_RCV_MORE | CS_FL_WANT_ROOM);
else {
- cs->flags &= ~CS_FL_RCV_MORE;
+ cs->flags &= ~(CS_FL_RCV_MORE | CS_FL_WANT_ROOM);
if (cs->flags & CS_FL_REOS)
cs->flags |= CS_FL_EOS;
if (b_size(&h2s->rxbuf)) {
(co_data(ic) ? CO_RFL_BUF_WET : 0) |
((channel_recv_limit(ic) < b_size(&ic->buf)) ? CO_RFL_KEEP_RSV : 0));
- if (b_data(&ic->buf) && (cs->flags & CS_FL_RCV_MORE))
+ if (cs->flags & CS_FL_WANT_ROOM)
si_rx_room_blk(si);
if (cs->flags & CS_FL_READ_PARTIAL) {