diff --git a/src/acl.c b/src/acl.c
index e2e72ce..b4c5908 100644
--- a/src/acl.c
+++ b/src/acl.c
@@ -120,7 +120,7 @@
 {
 	int hs_len;
 	int hs_type, bleft;
-	struct buffer *b;
+	struct channel *b;
 	const unsigned char *data;
 
 	if (!l4)
@@ -324,7 +324,7 @@
                         const struct arg *args, struct sample *smp)
 {
 	int hs_len, ext_len, bleft;
-	struct buffer *b;
+	struct channel *b;
 	unsigned char *data;
 
 	if (!l4)
diff --git a/src/backend.c b/src/backend.c
index e3a64e9..b3bd972 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -252,7 +252,7 @@
 {
 	unsigned long    hash = 0;
 	struct http_txn *txn  = &s->txn;
-	struct buffer   *req  = s->req;
+	struct channel   *req = s->req;
 	struct http_msg *msg  = &txn->req;
 	struct proxy    *px   = s->be;
 	unsigned int     plen = px->url_param_len;
@@ -1122,7 +1122,7 @@
  * session. This always returns 1, and the analyser removes itself from the
  * list. Nothing is performed if a server was already assigned.
  */
-int tcp_persist_rdp_cookie(struct session *s, struct buffer *req, int an_bit)
+int tcp_persist_rdp_cookie(struct session *s, struct channel *req, int an_bit)
 {
 	struct proxy    *px   = s->be;
 	int              ret;
diff --git a/src/buffers.c b/src/buffers.c
index 6eeb64f..6d87ef9 100644
--- a/src/buffers.c
+++ b/src/buffers.c
@@ -26,7 +26,7 @@
 /* perform minimal intializations, report 0 in case of error, 1 if OK. */
 int init_buffer()
 {
-	pool2_buffer = create_pool("buffer", sizeof(struct buffer) + global.tune.bufsize, MEM_F_SHARED);
+	pool2_buffer = create_pool("buffer", sizeof(struct channel) + global.tune.bufsize, MEM_F_SHARED);
 	return pool2_buffer != NULL;
 }
 
@@ -38,7 +38,7 @@
  * Directly touching ->to_forward will cause lockups when ->o goes down to
  * zero if nobody is ready to push the remaining data.
  */
-unsigned long long buffer_forward(struct buffer *buf, unsigned long long bytes)
+unsigned long long buffer_forward(struct channel *buf, unsigned long long bytes)
 {
 	unsigned int new_forward;
 	unsigned int forwarded;
@@ -96,7 +96,7 @@
  * Note: this function appends data to the buffer's output and possibly overwrites
  * any pending input data which are assumed not to exist.
  */
-int bo_inject(struct buffer *buf, const char *msg, int len)
+int bo_inject(struct channel *buf, const char *msg, int len)
 {
 	int max;
 
@@ -136,7 +136,7 @@
  * flags FULL, EMPTY and READ_PARTIAL are updated if some data can be
  * transferred.
  */
-int bi_putchr(struct buffer *buf, char c)
+int bi_putchr(struct channel *buf, char c)
 {
 	if (unlikely(buffer_input_closed(buf)))
 		return -2;
@@ -169,7 +169,7 @@
  * Buffer flags FULL, EMPTY and READ_PARTIAL are updated if some data can be
  * transferred.
  */
-int bi_putblk(struct buffer *buf, const char *blk, int len)
+int bi_putblk(struct channel *buf, const char *blk, int len)
 {
 	int max;
 
@@ -228,7 +228,7 @@
  * output are full. If either of them is full, the string may be returned
  * as is, without the '\n'.
  */
-int bo_getline(struct buffer *buf, char *str, int len)
+int bo_getline(struct channel *buf, char *str, int len)
 {
 	int ret, max;
 	char *p;
@@ -276,7 +276,7 @@
  * The buffer status is not changed. The caller must call bo_skip() to
  * update it.
  */
-int bo_getblk(struct buffer *buf, char *blk, int len, int offset)
+int bo_getblk(struct channel *buf, char *blk, int len, int offset)
 {
 	int firstblock;
 
@@ -315,7 +315,7 @@
  * <orig> is not updated. The string length is taken from parameter <len>. If
  * <len> is null, the <str> pointer is allowed to be null.
  */
-int buffer_replace2(struct buffer *b, char *pos, char *end, const char *str, int len)
+int buffer_replace2(struct channel *b, char *pos, char *end, const char *str, int len)
 {
 	int delta;
 
@@ -357,7 +357,7 @@
  *
  * The number of bytes added is returned on success. 0 is returned on failure.
  */
-int buffer_insert_line2(struct buffer *b, char *pos, const char *str, int len)
+int buffer_insert_line2(struct channel *b, char *pos, const char *str, int len)
 {
 	int delta;
 
@@ -390,7 +390,7 @@
  * becomes contiguous and starts at the beginning of the buffer area. The
  * function may only be used when the buffer's output is empty.
  */
-void buffer_slow_realign(struct buffer *buf)
+void buffer_slow_realign(struct channel *buf)
 {
 	/* two possible cases :
 	 *   - the buffer is in one contiguous block, we move it in-place
@@ -420,7 +420,7 @@
  * so it's desirable to use it only on non-contiguous buffers. No pointers are
  * changed, the caller is responsible for that.
  */
-void buffer_bounce_realign(struct buffer *buf)
+void buffer_bounce_realign(struct channel *buf)
 {
 	int advance, to_move;
 	char *from, *to;
@@ -584,7 +584,7 @@
 /*
  * Dumps part or all of a buffer.
  */
-void buffer_dump(FILE *o, struct buffer *b, int from, int to)
+void buffer_dump(FILE *o, struct channel *b, int from, int to)
 {
 	fprintf(o, "Dumping buffer %p\n", b);
 	fprintf(o, "  data=%p o=%d i=%d p=%p\n",
diff --git a/src/dumpstats.c b/src/dumpstats.c
index a125242..a3d0f28 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -1456,8 +1456,8 @@
  */
 static void cli_io_handler(struct stream_interface *si)
 {
-	struct buffer *req = si->ob;
-	struct buffer *res = si->ib;
+	struct channel *req = si->ob;
+	struct channel *res = si->ib;
 	int reql;
 	int len;
 
@@ -1816,8 +1816,8 @@
 static void http_stats_io_handler(struct stream_interface *si)
 {
 	struct session *s = si->conn.data_ctx;
-	struct buffer *req = si->ob;
-	struct buffer *res = si->ib;
+	struct channel *req = si->ob;
+	struct channel *res = si->ib;
 
 	if (unlikely(si->state == SI_ST_DIS || si->state == SI_ST_CLO))
 		goto out;
@@ -1872,7 +1872,7 @@
 static int stats_dump_http(struct stream_interface *si, struct uri_auth *uri)
 {
 	struct session *s = si->conn.data_ctx;
-	struct buffer *rep = si->ib;
+	struct channel *rep = si->ib;
 	struct proxy *px;
 	struct chunk msg;
 	unsigned int up;
@@ -2242,7 +2242,7 @@
 static int stats_dump_proxy(struct stream_interface *si, struct proxy *px, struct uri_auth *uri)
 {
 	struct session *s = si->conn.data_ctx;
-	struct buffer *rep = si->ib;
+	struct channel *rep = si->ib;
 	struct server *sv, *svs;	/* server and server-state, server-state=server or server->track */
 	struct listener *l;
 	struct chunk msg;
diff --git a/src/frontend.c b/src/frontend.c
index 82699dc..8405bf6 100644
--- a/src/frontend.c
+++ b/src/frontend.c
@@ -251,7 +251,7 @@
  * are removed from the buffer. The function returns zero if it needs to wait
  * for more data (max: timeout_client), or 1 if it has finished and removed itself.
  */
-int frontend_decode_proxy_request(struct session *s, struct buffer *req, int an_bit)
+int frontend_decode_proxy_request(struct session *s, struct channel *req, int an_bit)
 {
 	char *line = req->data;
 	char *end = req->data + req->i;
diff --git a/src/proto_http.c b/src/proto_http.c
index 08e2c9d..173ba32 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -1290,7 +1290,7 @@
 {
 	unsigned int state;       /* updated only when leaving the FSM */
 	register char *ptr, *end; /* request pointers, to avoid dereferences */
-	struct buffer *buf = msg->buf;
+	struct channel *buf = msg->buf;
 
 	state = msg->msg_state;
 	ptr = buf->p + msg->next;
@@ -1747,7 +1747,7 @@
  */
 int http_parse_chunk_size(struct http_msg *msg)
 {
-	const struct buffer *buf = msg->buf;
+	const struct channel *buf = msg->buf;
 	const char *ptr = b_ptr(buf, msg->next);
 	const char *ptr_old = ptr;
 	const char *end = buf->data + buf->size;
@@ -1855,7 +1855,7 @@
  */
 int http_forward_trailers(struct http_msg *msg)
 {
-	const struct buffer *buf = msg->buf;
+	const struct channel *buf = msg->buf;
 
 	/* we have msg->next which points to next line. Look for CRLF. */
 	while (1) {
@@ -1929,7 +1929,7 @@
  */
 int http_skip_chunk_crlf(struct http_msg *msg)
 {
-	const struct buffer *buf = msg->buf;
+	const struct channel *buf = msg->buf;
 	const char *ptr;
 	int bytes;
 
@@ -1971,7 +1971,7 @@
  * when it has nothing left to do, and may remove any analyser when it wants to
  * abort.
  */
-int http_wait_for_request(struct session *s, struct buffer *req, int an_bit)
+int http_wait_for_request(struct session *s, struct channel *req, int an_bit)
 {
 	/*
 	 * We will parse the partial (or complete) lines.
@@ -2519,7 +2519,7 @@
  * Parse the posted data and enable/disable servers if necessary.
  * Returns 1 if request was parsed or zero if it needs more data.
  */
-int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn, struct buffer *req)
+int http_process_req_stat_post(struct stream_interface *si, struct http_txn *txn, struct channel *req)
 {
 	struct proxy *px = NULL;
 	struct server *sv = NULL;
@@ -2772,7 +2772,7 @@
  * either needs more data or wants to immediately abort the request (eg: deny,
  * error, ...).
  */
-int http_process_req_common(struct session *s, struct buffer *req, int an_bit, struct proxy *px)
+int http_process_req_common(struct session *s, struct channel *req, int an_bit, struct proxy *px)
 {
 	struct http_txn *txn = &s->txn;
 	struct http_msg *msg = &txn->req;
@@ -3237,7 +3237,7 @@
  * needs more data, encounters an error, or wants to immediately abort the
  * request. It relies on buffers flags, and updates s->req->analysers.
  */
-int http_process_request(struct session *s, struct buffer *req, int an_bit)
+int http_process_request(struct session *s, struct channel *req, int an_bit)
 {
 	struct http_txn *txn = &s->txn;
 	struct http_msg *msg = &txn->req;
@@ -3517,7 +3517,7 @@
  * returns zero, at the beginning because it prevents any other processing
  * from occurring, and at the end because it terminates the request.
  */
-int http_process_tarpit(struct session *s, struct buffer *req, int an_bit)
+int http_process_tarpit(struct session *s, struct channel *req, int an_bit)
 {
 	struct http_txn *txn = &s->txn;
 
@@ -3563,7 +3563,7 @@
  * because it expects the request to be parsed. It returns zero if it needs to
  * read more data, or 1 once it has completed its analysis.
  */
-int http_process_request_body(struct session *s, struct buffer *req, int an_bit)
+int http_process_request_body(struct session *s, struct channel *req, int an_bit)
 {
 	struct http_txn *txn = &s->txn;
 	struct http_msg *msg = &s->txn.req;
@@ -3702,7 +3702,7 @@
 
 	char *hdr_name = be->server_id_hdr_name;
 	int hdr_name_len = be->server_id_hdr_len;
-	struct buffer *req = txn->req.buf;
+	struct channel *req = txn->req.buf;
 	char *hdr_val;
 	unsigned int old_o, old_i;
 
@@ -3881,7 +3881,7 @@
  */
 int http_sync_req_state(struct session *s)
 {
-	struct buffer *buf = s->req;
+	struct channel *buf = s->req;
 	struct http_txn *txn = &s->txn;
 	unsigned int old_flags = buf->flags;
 	unsigned int old_state = txn->req.msg_state;
@@ -4002,7 +4002,7 @@
  */
 int http_sync_res_state(struct session *s)
 {
-	struct buffer *buf = s->rep;
+	struct channel *buf = s->rep;
 	struct http_txn *txn = &s->txn;
 	unsigned int old_flags = buf->flags;
 	unsigned int old_state = txn->rsp.msg_state;
@@ -4202,7 +4202,7 @@
  * bytes of pending data + the headers if not already done (between sol and sov).
  * It eventually adjusts sol to match sov after the data in between have been sent.
  */
-int http_request_forward_body(struct session *s, struct buffer *req, int an_bit)
+int http_request_forward_body(struct session *s, struct channel *req, int an_bit)
 {
 	struct http_txn *txn = &s->txn;
 	struct http_msg *msg = &s->txn.req;
@@ -4468,7 +4468,7 @@
  * when it has nothing left to do, and may remove any analyser when it wants to
  * abort.
  */
-int http_wait_for_response(struct session *s, struct buffer *rep, int an_bit)
+int http_wait_for_response(struct session *s, struct channel *rep, int an_bit)
 {
 	struct http_txn *txn = &s->txn;
 	struct http_msg *msg = &txn->rsp;
@@ -4897,7 +4897,7 @@
  * and updates t->rep->analysers. It might make sense to explode it into several
  * other functions. It works like process_request (see indications above).
  */
-int http_process_res_common(struct session *t, struct buffer *rep, int an_bit, struct proxy *px)
+int http_process_res_common(struct session *t, struct channel *rep, int an_bit, struct proxy *px)
 {
 	struct http_txn *txn = &t->txn;
 	struct http_msg *msg = &txn->rsp;
@@ -5269,7 +5269,7 @@
  * bytes of pending data + the headers if not already done (between sol and sov).
  * It eventually adjusts sol to match sov after the data in between have been sent.
  */
-int http_response_forward_body(struct session *s, struct buffer *res, int an_bit)
+int http_response_forward_body(struct session *s, struct channel *res, int an_bit)
 {
 	struct http_txn *txn = &s->txn;
 	struct http_msg *msg = &s->txn.rsp;
@@ -5498,7 +5498,7 @@
  * Since it can manage the switch to another backend, it updates the per-proxy
  * DENY stats.
  */
-int apply_filter_to_req_headers(struct session *t, struct buffer *req, struct hdr_exp *exp)
+int apply_filter_to_req_headers(struct session *t, struct channel *req, struct hdr_exp *exp)
 {
 	char term;
 	char *cur_ptr, *cur_end, *cur_next;
@@ -5632,7 +5632,7 @@
  * Since it can manage the switch to another backend, it updates the per-proxy
  * DENY stats.
  */
-int apply_filter_to_req_line(struct session *t, struct buffer *req, struct hdr_exp *exp)
+int apply_filter_to_req_line(struct session *t, struct channel *req, struct hdr_exp *exp)
 {
 	char term;
 	char *cur_ptr, *cur_end;
@@ -5749,7 +5749,7 @@
  * unparsable request. Since it can manage the switch to another backend, it
  * updates the per-proxy DENY stats.
  */
-int apply_filters_to_request(struct session *s, struct buffer *req, struct proxy *px)
+int apply_filters_to_request(struct session *s, struct channel *req, struct proxy *px)
 {
 	struct http_txn *txn = &s->txn;
 	struct hdr_exp *exp;
@@ -5914,7 +5914,7 @@
  *   - there are non-space chars before <from> ;
  *   - there is a CR/LF at or after <next>.
  */
-int del_hdr_value(struct buffer *buf, char **from, char *next)
+int del_hdr_value(struct channel *buf, char **from, char *next)
 {
 	char *prev = *from;
 
@@ -5956,7 +5956,7 @@
  * of the multiple very crappy and ambiguous syntaxes we have to support. it
  * highly recommended not to touch this part without a good reason !
  */
-void manage_client_side_cookies(struct session *t, struct buffer *req)
+void manage_client_side_cookies(struct session *t, struct channel *req)
 {
 	struct http_txn *txn = &t->txn;
 	int preserve_hdr;
@@ -6405,7 +6405,7 @@
 /* Iterate the same filter through all response headers contained in <rtr>.
  * Returns 1 if this filter can be stopped upon return, otherwise 0.
  */
-int apply_filter_to_resp_headers(struct session *t, struct buffer *rtr, struct hdr_exp *exp)
+int apply_filter_to_resp_headers(struct session *t, struct channel *rtr, struct hdr_exp *exp)
 {
 	char term;
 	char *cur_ptr, *cur_end, *cur_next;
@@ -6504,7 +6504,7 @@
  * Returns 0 if nothing has been done, 1 if the filter has been applied,
  * or -1 if a replacement resulted in an invalid status line.
  */
-int apply_filter_to_sts_line(struct session *t, struct buffer *rtr, struct hdr_exp *exp)
+int apply_filter_to_sts_line(struct session *t, struct channel *rtr, struct hdr_exp *exp)
 {
 	char term;
 	char *cur_ptr, *cur_end;
@@ -6587,7 +6587,7 @@
  * Returns 0 if everything is alright, or -1 in case a replacement lead to an
  * unparsable response.
  */
-int apply_filters_to_response(struct session *s, struct buffer *rtr, struct proxy *px)
+int apply_filters_to_response(struct session *s, struct channel *rtr, struct proxy *px)
 {
 	struct http_txn *txn = &s->txn;
 	struct hdr_exp *exp;
@@ -6644,7 +6644,7 @@
  * desirable to call it only when needed. This function is also used when we
  * just need to know if there is a cookie (eg: for check-cache).
  */
-void manage_server_side_cookies(struct session *t, struct buffer *res)
+void manage_server_side_cookies(struct session *t, struct channel *res)
 {
 	struct http_txn *txn = &t->txn;
 	struct server *srv;
@@ -7007,7 +7007,7 @@
 /*
  * Check if response is cacheable or not. Updates t->flags.
  */
-void check_response_for_cacheability(struct session *t, struct buffer *rtr)
+void check_response_for_cacheability(struct session *t, struct channel *rtr)
 {
 	struct http_txn *txn = &t->txn;
 	char *p1, *p2;
@@ -7258,7 +7258,7 @@
                               struct http_msg *msg,
 			      int state, struct proxy *other_end)
 {
-	struct buffer *buf = msg->buf;
+	struct channel *buf = msg->buf;
 	int len1, len2;
 
 	es->len = MIN(buf->i, sizeof(es->buf));
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index 6c411af..57339c6 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -785,7 +785,7 @@
  * function may be called for frontend rules and backend rules. It only relies
  * on the backend pointer so this works for both cases.
  */
-int tcp_inspect_request(struct session *s, struct buffer *req, int an_bit)
+int tcp_inspect_request(struct session *s, struct channel *req, int an_bit)
 {
 	struct tcp_rule *rule;
 	struct stksess *ts;
@@ -905,7 +905,7 @@
  * response. It relies on buffers flags, and updates s->rep->analysers. The
  * function may be called for backend rules.
  */
-int tcp_inspect_response(struct session *s, struct buffer *rep, int an_bit)
+int tcp_inspect_response(struct session *s, struct channel *rep, int an_bit)
 {
 	struct tcp_rule *rule;
 	int partial;
@@ -1583,7 +1583,7 @@
 	unsigned int len_size = arg_p[1].data.uint;
 	unsigned int buf_offset;
 	unsigned int buf_size = 0;
-	struct buffer *b;
+	struct channel *b;
 	int i;
 
 	/* Format is (len offset, len size, buf offset) or (len offset, len size) */
@@ -1638,7 +1638,7 @@
 {
 	unsigned int buf_offset = arg_p[0].data.uint;
 	unsigned int buf_size = arg_p[1].data.uint;
-	struct buffer *b;
+	struct channel *b;
 
 	if (!l4)
 		return 0;
diff --git a/src/session.c b/src/session.c
index 6612f0a..3984104 100644
--- a/src/session.c
+++ b/src/session.c
@@ -533,8 +533,8 @@
  */
 static int sess_update_st_con_tcp(struct session *s, struct stream_interface *si)
 {
-	struct buffer *req = si->ob;
-	struct buffer *rep = si->ib;
+	struct channel *req = si->ob;
+	struct channel *rep = si->ib;
 
 	/* If we got an error, or if nothing happened and the connection timed
 	 * out, we must give up. The CER state handler will take care of retry
@@ -683,8 +683,8 @@
  */
 static void sess_establish(struct session *s, struct stream_interface *si)
 {
-	struct buffer *req = si->ob;
-	struct buffer *rep = si->ib;
+	struct channel *req = si->ob;
+	struct channel *rep = si->ib;
 
 	if (target_srv(&s->target))
 		health_adjust(target_srv(&s->target), HANA_STATUS_L4_OK);
@@ -954,7 +954,7 @@
  * It returns 1 if the processing can continue on next analysers, or zero if it
  * either needs more data or wants to immediately abort the request.
  */
-static int process_switching_rules(struct session *s, struct buffer *req, int an_bit)
+static int process_switching_rules(struct session *s, struct channel *req, int an_bit)
 {
 	struct persist_rule *prst_rule;
 
@@ -1051,7 +1051,7 @@
  * it then returns 1. The data must already be present in the buffer otherwise
  * they won't match. It always returns 1.
  */
-static int process_server_rules(struct session *s, struct buffer *req, int an_bit)
+static int process_server_rules(struct session *s, struct channel *req, int an_bit)
 {
 	struct proxy *px = s->be;
 	struct server_rule *rule;
@@ -1100,7 +1100,7 @@
  * it then returns 1. The data must already be present in the buffer otherwise
  * they won't match. It always returns 1.
  */
-static int process_sticking_rules(struct session *s, struct buffer *req, int an_bit)
+static int process_sticking_rules(struct session *s, struct channel *req, int an_bit)
 {
 	struct proxy    *px   = s->be;
 	struct sticking_rule  *rule;
@@ -1189,7 +1189,7 @@
  * then returns 1. The data must already be present in the buffer otherwise
  * they won't match. It always returns 1.
  */
-static int process_store_rules(struct session *s, struct buffer *rep, int an_bit)
+static int process_store_rules(struct session *s, struct channel *rep, int an_bit)
 {
 	struct proxy    *px   = s->be;
 	struct sticking_rule  *rule;
diff --git a/src/sock_raw.c b/src/sock_raw.c
index 991b46b..272935a 100644
--- a/src/sock_raw.c
+++ b/src/sock_raw.c
@@ -74,7 +74,7 @@
  * This function automatically allocates a pipe from the pipe pool. It also
  * carefully ensures to clear b->pipe whenever it leaves the pipe empty.
  */
-static int sock_raw_splice_in(struct buffer *b, struct stream_interface *si)
+static int sock_raw_splice_in(struct channel *b, struct stream_interface *si)
 {
 	static int splice_detects_close;
 	int fd = si_fd(si);
@@ -216,7 +216,7 @@
 {
 	int fd = conn->t.sock.fd;
 	struct stream_interface *si = container_of(conn, struct stream_interface, conn);
-	struct buffer *b = si->ib;
+	struct channel *b = si->ib;
 	int ret, max, cur_read;
 	int read_poll = MAX_READ_POLL_LOOPS;
 
@@ -452,7 +452,7 @@
 static int sock_raw_write_loop(struct connection *conn)
 {
 	struct stream_interface *si = container_of(conn, struct stream_interface, conn);
-	struct buffer *b = si->ob;
+	struct channel *b = si->ob;
 	int write_poll = MAX_WRITE_POLL_LOOPS;
 	int ret, max;
 
diff --git a/src/stream_interface.c b/src/stream_interface.c
index 17f2447..08560a9 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -354,7 +354,7 @@
 /* default chk_rcv function for scheduled tasks */
 static void stream_int_chk_rcv(struct stream_interface *si)
 {
-	struct buffer *ib = si->ib;
+	struct channel *ib = si->ib;
 
 	DPRINTF(stderr, "%s: si=%p, si->state=%d ib->flags=%08x ob->flags=%08x\n",
 		__FUNCTION__,
@@ -379,7 +379,7 @@
 /* default chk_snd function for scheduled tasks */
 static void stream_int_chk_snd(struct stream_interface *si)
 {
-	struct buffer *ob = si->ob;
+	struct channel *ob = si->ob;
 
 	DPRINTF(stderr, "%s: si=%p, si->state=%d ib->flags=%08x ob->flags=%08x\n",
 		__FUNCTION__,
@@ -482,7 +482,7 @@
 {
 	int fd = conn->t.sock.fd;
 	struct stream_interface *si = container_of(conn, struct stream_interface, conn);
-	struct buffer *b = si->ob;
+	struct channel *b = si->ob;
 
 	/* we might have been called just after an asynchronous shutw */
 	if (b->flags & BF_SHUTW)
@@ -664,8 +664,8 @@
  */
 void stream_int_update_conn(struct stream_interface *si)
 {
-	struct buffer *ib = si->ib;
-	struct buffer *ob = si->ob;
+	struct channel *ib = si->ib;
+	struct channel *ob = si->ob;
 
 	if (si->conn.flags & CO_FL_HANDSHAKE) {
 		/* a handshake is in progress */
@@ -742,7 +742,7 @@
  */
 void stream_int_chk_rcv_conn(struct stream_interface *si)
 {
-	struct buffer *ib = si->ib;
+	struct channel *ib = si->ib;
 
 	if (unlikely(si->state != SI_ST_EST || (ib->flags & BF_SHUTR)))
 		return;
@@ -773,7 +773,7 @@
  */
 void stream_int_chk_snd_conn(struct stream_interface *si)
 {
-	struct buffer *ob = si->ob;
+	struct channel *ob = si->ob;
 
 	if (unlikely(si->state != SI_ST_EST || (ob->flags & BF_SHUTW)))
 		return;
@@ -872,7 +872,7 @@
 void si_conn_send_cb(struct connection *conn)
 {
 	struct stream_interface *si = container_of(conn, struct stream_interface, conn);
-	struct buffer *b = si->ob;
+	struct channel *b = si->ob;
 
 	if (conn->flags & CO_FL_ERROR)
 		goto out_error;
