MINOR: mux-h1: Introduce H1C_F_IS_BACK flag on the H1 connection

This flag is only set on the backend side and is tested instead of calling
conn_is_back() function.
diff --git a/src/mux_h1.c b/src/mux_h1.c
index 6d48813..2fbd8a9 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -58,6 +58,7 @@
 
 #define H1C_F_WAIT_OPPOSITE  0x00100000 /* Don't read more data for now, waiting sync with opposite side */
 #define H1C_F_WANT_SPLICE    0x00200000 /* Don't read into a bufffer because we want to use or we are using splicing */
+#define H1C_F_IS_BACK        0x00400000 /* Set on outgoing connection */
 /*
  * H1 Stream flags (32 bits)
  */
@@ -274,7 +275,7 @@
 		return;
 
 	/* Display frontend/backend info by default */
-	chunk_appendf(&trace_buf, " : [%c]", (conn_is_back(h1c->conn) ? 'B' : 'F'));
+	chunk_appendf(&trace_buf, " : [%c]", ((h1c->flags & H1C_F_IS_BACK) ? 'B' : 'F'));
 
 	/* Display request and response states if h1s is defined */
 	if (h1s)
@@ -474,7 +475,7 @@
 							      : h1c->timeout));
 			task_queue(h1c->task);
 			TRACE_DEVEL("refreshing connection's timeout", H1_EV_H1C_SEND, h1c->conn);
-		} else if ((h1c->flags & (H1C_F_CS_IDLE|H1C_F_WAIT_NEXT_REQ)) && !conn_is_back(h1c->conn)) {
+		} else if ((h1c->flags & (H1C_F_CS_IDLE|H1C_F_WAIT_NEXT_REQ)) && !(h1c->flags & H1C_F_IS_BACK)) {
 			/* front connections waiting for a stream need a timeout. client timeout by
 			 * default but http-keep-alive if defined
 			 */
@@ -500,7 +501,7 @@
 {
 	const struct h1m *h1m;
 
-	h1m = conn_is_back(h1s->h1c->conn) ? &h1s->res : &h1s->req;
+	h1m = ((h1s->h1c->flags & H1C_F_IS_BACK) ? &h1s->res : &h1s->req);
 	if (h1m->state == H1_MSG_DONE)
 		return !(h1s->flags & H1S_F_PARSING_DONE);
 
@@ -576,7 +577,7 @@
 		h1s->flags |= H1S_F_NOT_FIRST;
 	h1c->flags &= ~(H1C_F_CS_IDLE|H1C_F_WAIT_NEXT_REQ);
 
-	if (!conn_is_back(h1c->conn)) {
+	if (!(h1c->flags & H1C_F_IS_BACK)) {
 		if (h1c->px->options2 & PR_O2_REQBUG_OK)
 			h1s->req.err_pos = -1;
 
@@ -676,7 +677,7 @@
 	h1c->wait_event.events   = 0;
 
 	if (conn_is_back(conn)) {
-		h1c->flags |= H1C_F_WAIT_OPPOSITE;
+		h1c->flags |= (H1C_F_IS_BACK|H1C_F_WAIT_OPPOSITE);
 		h1c->shut_timeout = h1c->timeout = proxy->timeout.server;
 		if (tick_isset(proxy->timeout.serverfin))
 			h1c->shut_timeout = proxy->timeout.serverfin;
@@ -992,7 +993,7 @@
 
 static void h1_process_input_conn_mode(struct h1s *h1s, struct h1m *h1m, struct htx *htx)
 {
-	if (!conn_is_back(h1s->h1c->conn))
+	if (!(h1s->h1c->flags & H1C_F_IS_BACK))
 		h1_set_cli_conn_mode(h1s, h1m);
 	else
 		h1_set_srv_conn_mode(h1s, h1m);
@@ -1000,7 +1001,7 @@
 
 static void h1_process_output_conn_mode(struct h1s *h1s, struct h1m *h1m, struct ist *conn_val)
 {
-	if (!conn_is_back(h1s->h1c->conn))
+	if (!(h1s->h1c->flags & H1C_F_IS_BACK))
 		h1_set_cli_conn_mode(h1s, h1m);
 	else
 		h1_set_srv_conn_mode(h1s, h1m);
@@ -1132,7 +1133,7 @@
 	h1s->req.state = H1_MSG_TUNNEL;
 	TRACE_STATE("switch H1 request in tunnel mode", H1_EV_TX_DATA|H1_EV_TX_HDRS, h1s->h1c->conn, h1s);
 
-	if (!conn_is_back(h1s->h1c->conn)) {
+	if (!(h1s->h1c->flags & H1C_F_IS_BACK)) {
 		h1s->flags &= ~H1S_F_PARSING_DONE;
 		if (h1s->res.state < H1_MSG_DONE) {
 			h1s->h1c->flags |= H1C_F_WAIT_OPPOSITE;
@@ -1160,7 +1161,7 @@
 	h1s->res.state = H1_MSG_TUNNEL;
 	TRACE_STATE("switch H1 response in tunnel mode", H1_EV_TX_DATA|H1_EV_TX_HDRS, h1s->h1c->conn, h1s);
 
-	if (conn_is_back(h1s->h1c->conn)) {
+	if (h1s->h1c->flags & H1C_F_IS_BACK) {
 		h1s->flags &= ~H1S_F_PARSING_DONE;
 		/* On protocol switching, switch the request to tunnel mode if it is in
 		 * DONE state. Otherwise we will wait the end of the request to switch
@@ -1405,7 +1406,7 @@
 	htx = htx_from_buf(buf);
 	TRACE_ENTER(H1_EV_RX_DATA, h1c->conn, h1s, htx, (size_t[]){count});
 
-	if (!conn_is_back(h1c->conn)) {
+	if (!(h1c->flags & H1C_F_IS_BACK)) {
 		h1m = &h1s->req;
 		errflag = H1S_F_REQ_ERROR;
 	}
@@ -1561,7 +1562,7 @@
 		goto end;
 	}
 
-	if (!conn_is_back(h1c->conn)) {
+	if (!(h1c->flags & H1C_F_IS_BACK)) {
 		h1m = &h1s->res;
 		errflag = H1S_F_RES_ERROR;
 	}
@@ -2042,8 +2043,8 @@
 		b_slow_realign(&h1c->ibuf, trash.area, 0);
 
 	/* avoid useless reads after first responses */
-	if (h1s && ((!conn_is_back(conn) && h1s->req.state == H1_MSG_RQBEFORE) ||
-		    (conn_is_back(conn) && h1s->res.state == H1_MSG_RPBEFORE)))
+	if (h1s && ((!(h1c->flags & H1C_F_IS_BACK) && h1s->req.state == H1_MSG_RQBEFORE) ||
+		    ((h1c->flags & H1C_F_IS_BACK) && h1s->res.state == H1_MSG_RPBEFORE)))
 		flags |= CO_RFL_READ_ONCE;
 
 	max = buf_room_for_htx_data(&h1c->ibuf);
@@ -2182,7 +2183,7 @@
 		if (h1c->flags & (H1C_F_CS_ERROR|H1C_F_CS_SHUTDOWN) ||
 		    conn->flags & (CO_FL_ERROR|CO_FL_SOCK_RD_SH|CO_FL_SOCK_WR_SH))
 			goto release;
-		if (!conn_is_back(conn) && (h1c->flags & H1C_F_CS_IDLE)) {
+		if (!(h1c->flags & H1C_F_IS_BACK) && (h1c->flags & H1C_F_CS_IDLE)) {
 			TRACE_STATE("K/A incoming connection, create new H1 stream", H1_EV_H1C_WAKE, conn);
 			if (!h1s_create(h1c, NULL, NULL))
 				goto release;
@@ -2451,7 +2452,7 @@
 	is_not_first = h1s->flags & H1S_F_NOT_FIRST;
 	h1s_destroy(h1s);
 
-	if (conn_is_back(h1c->conn) && (h1c->flags & H1C_F_CS_IDLE)) {
+	if ((h1c->flags & H1C_F_IS_BACK) && (h1c->flags & H1C_F_CS_IDLE)) {
 		/* If there are any excess server data in the input buffer,
 		 * release it and close the connection ASAP (some data may
 		 * remain in the output buffer). This happens if a server sends
@@ -2675,7 +2676,7 @@
 {
 	struct h1s *h1s = cs->ctx;
 	struct h1c *h1c = h1s->h1c;
-	struct h1m *h1m = (!conn_is_back(cs->conn) ? &h1s->req : &h1s->res);
+	struct h1m *h1m = (!(h1c->flags & H1C_F_IS_BACK) ? &h1s->req : &h1s->res);
 	size_t ret = 0;
 
 	TRACE_ENTER(H1_EV_STRM_RECV, h1c->conn, h1s, 0, (size_t[]){count});
@@ -2756,23 +2757,24 @@
 static int h1_rcv_pipe(struct conn_stream *cs, struct pipe *pipe, unsigned int count)
 {
 	struct h1s *h1s = cs->ctx;
-	struct h1m *h1m = (!conn_is_back(cs->conn) ? &h1s->req : &h1s->res);
+	struct h1c *h1c = h1s->h1c;
+	struct h1m *h1m = (!(h1c->flags & H1C_F_IS_BACK) ? &h1s->req : &h1s->res);
 	int ret = 0;
 
 	TRACE_ENTER(H1_EV_STRM_RECV, cs->conn, h1s, 0, (size_t[]){count});
 
 	if ((h1m->flags & H1_MF_CHNK) || (h1m->state != H1_MSG_DATA && h1m->state != H1_MSG_TUNNEL)) {
-		h1s->h1c->flags &= ~H1C_F_WANT_SPLICE;
+		h1c->flags &= ~H1C_F_WANT_SPLICE;
 		TRACE_STATE("Allow xprt rcv_buf on !(msg_data|msg_tunnel)", H1_EV_STRM_RECV, cs->conn, h1s);
-		if (!(h1s->h1c->wait_event.events & SUB_RETRY_RECV)) {
+		if (!(h1c->wait_event.events & SUB_RETRY_RECV)) {
 			TRACE_STATE("restart receiving data, subscribing", H1_EV_STRM_RECV, cs->conn, h1s);
-			cs->conn->xprt->subscribe(cs->conn, cs->conn->xprt_ctx, SUB_RETRY_RECV, &h1s->h1c->wait_event);
+			cs->conn->xprt->subscribe(cs->conn, cs->conn->xprt_ctx, SUB_RETRY_RECV, &h1c->wait_event);
 		}
 		goto end;
 	}
 
-	if (!(h1s->h1c->flags & H1C_F_WANT_SPLICE)) {
-		h1s->h1c->flags |= H1C_F_WANT_SPLICE;
+	if (!(h1c->flags & H1C_F_WANT_SPLICE)) {
+		h1c->flags |= H1C_F_WANT_SPLICE;
 		TRACE_STATE("Block xprt rcv_buf to perform splicing", H1_EV_STRM_RECV, cs->conn, h1s);
 	}
 	if (h1s_data_pending(h1s)) {
@@ -2780,7 +2782,7 @@
 		goto end;
 	}
 
-	if (!h1_recv_allowed(h1s->h1c)) {
+	if (!h1_recv_allowed(h1c)) {
 		TRACE_DEVEL("leaving on !recv_allowed", H1_EV_STRM_RECV, cs->conn, h1s);
 		goto end;
 	}
@@ -2791,7 +2793,7 @@
 	if (h1m->state == H1_MSG_DATA && ret >= 0) {
 		h1m->curr_len -= ret;
 		if (!h1m->curr_len) {
-			h1s->h1c->flags &= ~H1C_F_WANT_SPLICE;
+			h1c->flags &= ~H1C_F_WANT_SPLICE;
 			TRACE_STATE("Allow xprt rcv_buf on !curr_len", H1_EV_STRM_RECV, cs->conn, h1s);
 		}
 	}
@@ -2799,14 +2801,14 @@
   end:
 	if (conn_xprt_read0_pending(cs->conn)) {
 		h1s->flags |= H1S_F_REOS;
-		h1s->h1c->flags &= ~H1C_F_WANT_SPLICE;
+		h1c->flags &= ~H1C_F_WANT_SPLICE;
 		TRACE_STATE("Allow xprt rcv_buf on read0", H1_EV_STRM_RECV, cs->conn, h1s);
 	}
 
 	if ((h1s->flags & H1S_F_REOS) ||
 	    (h1m->state != H1_MSG_TUNNEL && h1m->state != H1_MSG_DATA) ||
 	    (h1m->state == H1_MSG_DATA && !h1m->curr_len)) {
-		TRACE_STATE("notify the mux can't use splicing anymore", H1_EV_STRM_RECV, h1s->h1c->conn, h1s);
+		TRACE_STATE("notify the mux can't use splicing anymore", H1_EV_STRM_RECV, h1c->conn, h1s);
 		cs->flags &= ~CS_FL_MAY_SPLICE;
 	}