MEDIUM: mux: Add an optional "reset" method.

Add a new method to mux, "reset", that is used to let the mux know the
connection attempt failed, and we're about to retry, so it just have to
reinit itself. Currently only the H1 mux needs it.
diff --git a/src/backend.c b/src/backend.c
index f494773..34a04c3 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -1293,7 +1293,7 @@
 			return SF_ERR_INTERNAL;
 	}
 
-	if (!conn_xprt_ready(srv_conn)) {
+	if (!conn_xprt_ready(srv_conn) && !srv_conn->mux) {
 		/* the target was only on the stream, assign it to the SI now */
 		srv_conn->target = s->target;
 
@@ -1361,6 +1361,10 @@
 
 		assign_tproxy_address(s);
 	}
+	else if (!conn_xprt_ready(srv_conn)) {
+		if (srv_conn->mux->reset)
+			srv_conn->mux->reset(srv_conn);
+	}
 	else
 		s->flags |= SF_SRV_REUSED;
 
diff --git a/src/mux_h1.c b/src/mux_h1.c
index da5d5c1..5ca3c28 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -1824,6 +1824,13 @@
 	return NULL;
 }
 
+static void h1_reset(struct connection *conn)
+{
+	struct h1c *h1c = conn->mux_ctx;
+
+	/* Reset the flags, and let the mux know we're waiting for a connection */
+	h1c->flags = H1C_F_CS_WAIT_CONN;
+}
 
 static int h1_wake(struct connection *conn)
 {
@@ -2171,6 +2178,7 @@
 	.unsubscribe = h1_unsubscribe,
 	.shutr       = h1_shutr,
 	.shutw       = h1_shutw,
+	.reset       = h1_reset,
 	.flags       = MX_FL_NONE,
 	.name        = "h1",
 };