conn->mux->update_poll(cs);
}
-/* conn_stream receive function. Uses mux->rcv_buf() if defined, otherwise
- * falls back to __cs_recv().
- */
-static inline size_t cs_recv(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
-{
- if (cs->conn->mux->rcv_buf)
- return cs->conn->mux->rcv_buf(cs, buf, count, flags);
- else
- return __cs_recv(cs, buf, count, flags);
-}
-
/* conn_stream send function. Uses mux->snd_buf() if defined, otherwise
* falls back to __cs_send().
*/
done = 0;
- cs_recv(cs, &check->bi, b_size(&check->bi), 0);
+ cs->conn->mux->rcv_buf(cs, &check->bi, b_size(&check->bi), 0);
if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH) || cs->flags & CS_FL_ERROR) {
done = 1;
if ((conn->flags & CO_FL_ERROR || cs->flags & CS_FL_ERROR) && !b_data(&check->bi)) {
goto out_end_tcpcheck;
__cs_want_recv(cs);
- if (cs_recv(cs, &check->bi, b_size(&check->bi), 0) <= 0) {
+ if (cs->conn->mux->rcv_buf(cs, &check->bi, b_size(&check->bi), 0) <= 0) {
if (conn->flags & (CO_FL_ERROR | CO_FL_SOCK_RD_SH) || cs->flags & CS_FL_ERROR) {
done = 1;
if ((conn->flags & CO_FL_ERROR || cs->flags & CS_FL_ERROR) && !b_data(&check->bi)) {
return 1;
}
-/*
- * default conn_stream recv() : this one is used when cs->rcv_buf == NULL.
- * It reads up to <count> bytes from cs->rxbuf, puts them into <buf> and
- * returns the count. It possibly sets/clears CS_FL_RCV_MORE depending on the
- * buffer's state, and may set CS_FL_EOS. The number of bytes transferred is
- * returned. <buf> is not touched if <count> is null, but cs flags will be
- * updated to indicate any RCV_MORE or EOS.
- */
-size_t __cs_recv(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
-{
- size_t ret = 0;
-
- /* transfer possibly pending data to the upper layer */
- ret = b_xfer(buf, &cs->rxbuf, count);
-
- if (b_data(&cs->rxbuf))
- cs->flags |= CS_FL_RCV_MORE;
- else {
- cs->flags &= ~CS_FL_RCV_MORE;
- if (cs->flags & CS_FL_REOS)
- cs->flags |= CS_FL_EOS;
- cs_drop_rxbuf(cs);
- }
-
- return ret;
-}
-
/*
* default cs send() : this one is used when mux->snd_buf == NULL. It puts up to
* <count> bytes from <buf> into cs->txbuf. The number of bytes transferred is
}
+/* Called from the upper layer, to receive data */
+static size_t h2_rcv_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
+{
+ size_t ret = 0;
+
+ /* transfer possibly pending data to the upper layer */
+ ret = b_xfer(buf, &cs->rxbuf, count);
+
+ if (b_data(&cs->rxbuf))
+ cs->flags |= CS_FL_RCV_MORE;
+ else {
+ cs->flags &= ~CS_FL_RCV_MORE;
+ if (cs->flags & CS_FL_REOS)
+ cs->flags |= CS_FL_EOS;
+ cs_drop_rxbuf(cs);
+ }
+
+ return ret;
+}
+
/* Called from the upper layer, to send data */
static size_t h2_snd_buf(struct conn_stream *cs, struct buffer *buf, size_t count, int flags)
{
.wake = h2_wake,
.update_poll = h2_update_poll,
.snd_buf = h2_snd_buf,
+ .rcv_buf = h2_rcv_buf,
.subscribe = h2_subscribe,
.attach = h2_attach,
.detach = h2_detach,
break;
}
- ret = cs_recv(cs, &ic->buf, max, co_data(ic) ? CO_RFL_BUF_WET : 0);
+ ret = cs->conn->mux->rcv_buf(cs, &ic->buf, max, co_data(ic) ? CO_RFL_BUF_WET : 0);
if (cs->flags & CS_FL_RCV_MORE)
si->flags |= SI_FL_WAIT_ROOM;