From 20814ff1fcb7067d0d434cdbf00a34daeb22e193 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 15 Sep 2017 11:43:32 +0200 Subject: [PATCH] MINOR: frontend: don't retrieve ALPN on the critical path 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 | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/frontend.c b/src/frontend.c index be40e5f8f..e03e0995e 100644 --- a/src/frontend.c +++ b/src/frontend.c @@ -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] = ""; + 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))) {