]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: frontend: don't retrieve ALPN on the critical path
authorWilly Tarreau <w@1wt.eu>
Fri, 15 Sep 2017 09:43:32 +0000 (11:43 +0200)
committerWilly Tarreau <w@1wt.eu>
Fri, 15 Sep 2017 09:49:27 +0000 (11:49 +0200)
It's pointless to read it on each and every accept(), as we only need
it for reporting in debugging mode a few lines later. Let's move this
part to the relevant block.

src/frontend.c

index be40e5f8fd2892925b16b10dd347e9401909cebb..e03e0995ee3207642988b6bf2ca0d0f4e50821a3 100644 (file)
@@ -56,14 +56,6 @@ int frontend_accept(struct stream *s)
        struct connection *conn = objt_conn(sess->origin);
        struct listener *l = sess->listener;
        struct proxy *fe = sess->fe;
-       const char *alpn_str = NULL;
-       int alpn_len;
-
-       /* check if we're in HTTP mode, directly connected to the connection,
-        * and with ALPN advertising H2.
-        */
-       if (conn && conn->owner == &s->si[0])
-               conn_get_alpn(conn, &alpn_str, &alpn_len);
 
        if ((fe->mode == PR_MODE_TCP || fe->mode == PR_MODE_HTTP)
            && (!LIST_ISEMPTY(&fe->logsrvs))) {
@@ -102,13 +94,19 @@ int frontend_accept(struct stream *s)
                     (!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)))) {
                char pn[INET6_ADDRSTRLEN];
                char alpn[16] = "<none>";
+               const char *alpn_str = NULL;
+               int alpn_len;
 
                conn_get_from_addr(conn);
 
-               if (alpn_str) {
-                       int len = MIN(alpn_len, sizeof(alpn) - 1);
-                       memcpy(alpn, alpn_str, len);
-                       alpn[len] = 0;
+               /* try to report the ALPN value when available (also works for NPN) */
+
+               if (conn && conn->owner == &s->si[0]) {
+                       if (conn_get_alpn(conn, &alpn_str, &alpn_len) && alpn_str) {
+                               int len = MIN(alpn_len, sizeof(alpn) - 1);
+                               memcpy(alpn, alpn_str, len);
+                               alpn[len] = 0;
+                       }
                }
 
                switch (addr_to_str(&conn->addr.from, pn, sizeof(pn))) {