]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: connection: create conn_get_best_mux_entry()
authorWilly Tarreau <w@1wt.eu>
Sun, 2 Dec 2018 12:04:43 +0000 (13:04 +0100)
committerWilly Tarreau <w@1wt.eu>
Sun, 2 Dec 2018 12:12:16 +0000 (13:12 +0100)
We currently have conn_get_best_mux() to return the best mux for a
given protocol name, side and proxy mode. But we need the mux entry
as well in order to fix the bind_conf and servers at the end of the
config parsing. Let's split the function in two parts. It's worth
noting that the <conn> argument is never used anymore so this part
is eligible to some cleanup.

include/proto/connection.h

index 696432280b740195580c12bd9df7b2b58cbb742f..e2fae5f8f56cd73a6413754b9a3b0b47e047619b 100644 (file)
@@ -930,15 +930,15 @@ static inline void list_mux_proto(FILE *out)
        }
 }
 
-/* returns the first mux in the list matching the exact same <mux_proto> and
- * compatible with the <proto_side> (FE or BE) and the <proto_mode> (TCP or
+/* returns the first mux entry in the list matching the exact same <mux_proto>
+ * and compatible with the <proto_side> (FE or BE) and the <proto_mode> (TCP or
  * HTTP). <mux_proto> can be empty. Will fall back to the first compatible mux
  * with exactly the same <proto_mode> or with an empty name. May return
  * null if the code improperly registered the default mux to use as a fallback.
  */
-static inline const struct mux_ops *conn_get_best_mux(struct connection *conn,
-                                                     const struct ist mux_proto,
-                                                     int proto_side, int proto_mode)
+static inline const struct mux_proto_list *conn_get_best_mux_entry(
+        const struct ist mux_proto,
+        int proto_side, int proto_mode)
 {
        struct mux_proto_list *item;
        struct mux_proto_list *fallback = NULL;
@@ -947,14 +947,31 @@ static inline const struct mux_ops *conn_get_best_mux(struct connection *conn,
                if (!(item->side & proto_side) || !(item->mode & proto_mode))
                        continue;
                if (istlen(mux_proto) && isteq(mux_proto, item->token))
-                       return item->mux;
+                       return item;
                else if (!istlen(item->token)) {
                        if (!fallback || (item->mode == proto_mode && fallback->mode != proto_mode))
                                fallback = item;
                }
        }
-       return (fallback ? fallback->mux : NULL);
+       return fallback;
+
+}
+
+/* returns the first mux in the list matching the exact same <mux_proto> and
+ * compatible with the <proto_side> (FE or BE) and the <proto_mode> (TCP or
+ * HTTP). <mux_proto> can be empty. Will fall back to the first compatible mux
+ * with exactly the same <proto_mode> or with an empty name. May return
+ * null if the code improperly registered the default mux to use as a fallback.
+ */
+static inline const struct mux_ops *conn_get_best_mux(struct connection *conn,
+                                                     const struct ist mux_proto,
+                                                     int proto_side, int proto_mode)
+{
+       const struct mux_proto_list *item;
+
+       item = conn_get_best_mux_entry(mux_proto, proto_side, proto_mode);
 
+       return item ? item->mux : NULL;
 }
 
 /* returns 0 if the connection is valid and is a frontend connection, otherwise