MINOR: connection: make the initialization more consistent

Sometimes a connection is prepared before the target is set, sometimes
after. There's no real rule since the few functions involved operate on
different and independent fields. Soon we'll benefit from knowing the
target at the connection layer, in order to figure the associated proxy
and retrieve the various parameters (timeouts etc). This patch slightly
reorders a few calls to conn_prepare() so that we can make sure that the
target is always known to the mux.
diff --git a/include/proto/connection.h b/include/proto/connection.h
index dfaaad7..a683926 100644
--- a/include/proto/connection.h
+++ b/include/proto/connection.h
@@ -579,7 +579,9 @@
 
 /* prepares a connection to work with protocol <proto> and transport <xprt>.
  * The transport's is initialized as well, and the mux and its context are
- * cleared.
+ * cleared. The target is not reinitialized and it is recommended that it is
+ * set prior to calling this function so that the function may make use of it
+ * in the future to refine the mux choice if needed.
  */
 static inline void conn_prepare(struct connection *conn, const struct protocol *proto, const struct xprt_ops *xprt)
 {
diff --git a/src/checks.c b/src/checks.c
index fc13845..28ee4c4 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -1588,13 +1588,9 @@
 	}
 
 	proto = protocol_by_family(conn->addr.to.ss_family);
-
-	conn_prepare(conn, proto, check->xprt);
-	conn_install_mux(conn, &mux_pt_ops, cs);
-	cs_attach(cs, check, &check_conn_cb);
 	conn->target = &s->obj_type;
 
-       if ((conn->addr.to.ss_family == AF_INET) || (conn->addr.to.ss_family == AF_INET6)) {
+	if ((conn->addr.to.ss_family == AF_INET) || (conn->addr.to.ss_family == AF_INET6)) {
 		int i = 0;
 
 		i = srv_check_healthcheck_port(check);
@@ -1607,6 +1603,10 @@
 	/* no client address */
 	clear_addr(&conn->addr.from);
 
+	conn_prepare(conn, proto, check->xprt);
+	conn_install_mux(conn, &mux_pt_ops, cs);
+	cs_attach(cs, check, &check_conn_cb);
+
 	/* only plain tcp-check supports quick ACK */
 	quickack = check->type == 0 || check->type == PR_O2_TCPCHK_CHK;
 
@@ -2766,7 +2766,6 @@
 
 			check->cs = cs;
 			conn = cs->conn;
-			cs_attach(cs, check, &check_conn_cb);
 			conn->target = &s->obj_type;
 
 			/* no client address */
@@ -2796,8 +2795,10 @@
 			else {
 				xprt = xprt_get(XPRT_RAW);
 			}
+
 			conn_prepare(conn, proto, xprt);
 			conn_install_mux(conn, &mux_pt_ops, cs);
+			cs_attach(cs, check, &check_conn_cb);
 
 			ret = SF_ERR_INTERNAL;
 			if (proto->connect)
diff --git a/src/peers.c b/src/peers.c
index f26c3df..1fefa94 100644
--- a/src/peers.c
+++ b/src/peers.c
@@ -1969,12 +1969,13 @@
 	if (unlikely((cs = cs_new(conn)) == NULL))
 		goto out_free_conn;
 
+	conn->target = s->target = &s->be->obj_type;
+	memcpy(&conn->addr.to, &peer->addr, sizeof(conn->addr.to));
+
 	conn_prepare(conn, peer->proto, peer->xprt);
 	conn_install_mux(conn, &mux_pt_ops, cs);
 	si_attach_cs(&s->si[1], cs);
 
-	conn->target = s->target = &s->be->obj_type;
-	memcpy(&conn->addr.to, &peer->addr, sizeof(conn->addr.to));
 	s->do_log = NULL;
 	s->uniq_id = 0;
 
diff --git a/src/session.c b/src/session.c
index c40e4f6..c9d50df 100644
--- a/src/session.c
+++ b/src/session.c
@@ -135,14 +135,13 @@
 	if (unlikely((cli_conn = conn_new()) == NULL))
 		goto out_close;
 
-	conn_prepare(cli_conn, l->proto, l->bind_conf->xprt);
-
 	cli_conn->handle.fd = cfd;
 	cli_conn->addr.from = *addr;
 	cli_conn->flags |= CO_FL_ADDR_FROM_SET;
 	cli_conn->target = &l->obj_type;
 	cli_conn->proxy_netns = l->netns;
 
+	conn_prepare(cli_conn, l->proto, l->bind_conf->xprt);
 	conn_ctrl_init(cli_conn);
 
 	/* wait for a PROXY protocol header */