diff --git a/include/types/stream_interface.h b/include/types/stream_interface.h index 1a75c8d45..018349bbc 100644 --- a/include/types/stream_interface.h +++ b/include/types/stream_interface.h @@ -91,6 +91,7 @@ enum { #define SI_FL_CAP_SPLICE (SI_FL_CAP_SPLTCP) +struct buffer; struct server; struct proxy; struct si_applet; @@ -118,6 +119,7 @@ struct sock_ops { void (*write)(struct connection *conn); /* write callback after poll() */ void (*close)(struct connection *); /* close the data channel on the connection */ int (*snd_buf)(struct connection *conn); /* callback used to send a buffer contents */ + int (*rcv_buf)(struct connection *conn, struct buffer *buf, int count); /* recv callback */ }; /* A stream interface has 3 parts : diff --git a/src/raw_sock.c b/src/raw_sock.c index f5b5f2f1d..7dd90c946 100644 --- a/src/raw_sock.c +++ b/src/raw_sock.c @@ -343,7 +343,7 @@ static void sock_raw_read(struct connection *conn) break; } - ret = raw_sock_to_buf(conn, &b->buf, max); + ret = conn->data->rcv_buf(conn, &b->buf, max); if (ret <= 0) break; @@ -634,6 +634,7 @@ struct sock_ops raw_sock = { .read = sock_raw_read, .write = si_conn_send_cb, .snd_buf = sock_raw_write_loop, + .rcv_buf = raw_sock_to_buf, .close = NULL, };