diff --git a/src/connection.c b/src/connection.c index ac098d371..b55890ae2 100644 --- a/src/connection.c +++ b/src/connection.c @@ -1309,6 +1309,8 @@ static int cfg_parse_pp2_never_send_local(char **args, int section_type, struct /* return the major HTTP version as 1 or 2 depending on how the request arrived * before being processed. + * + * WARNING: Should be updated if a new major HTTP version is added. */ static int smp_fetch_fc_http_major(const struct arg *args, struct sample *smp, const char *kw, void *private) @@ -1316,8 +1318,18 @@ smp_fetch_fc_http_major(const struct arg *args, struct sample *smp, const char * struct connection *conn = (kw[0] != 'b') ? objt_conn(smp->sess->origin) : smp->strm ? cs_conn(objt_cs(smp->strm->si[1].end)) : NULL; + /* No connection or a connection with a RAW muxx */ + if (!conn || (conn->mux && !(conn->mux->flags & MX_FL_HTX))) + return 0; + + /* No mux install, this may change */ + if (!conn->mux) { + smp->flags |= SMP_F_MAY_CHANGE; + return 0; + } + smp->data.type = SMP_T_SINT; - smp->data.u.sint = (conn && strcmp(conn_get_mux_name(conn), "H2") == 0) ? 2 : 1; + smp->data.u.sint = (strcmp(conn_get_mux_name(conn), "H2") == 0) ? 2 : 1; return 1; }