diff --git a/include/haproxy/http_ana-t.h b/include/haproxy/http_ana-t.h index 50fbd3de8..89d41dd7b 100644 --- a/include/haproxy/http_ana-t.h +++ b/include/haproxy/http_ana-t.h @@ -89,6 +89,7 @@ #define HTTP_MSGF_COMPRESSING 0x00000020 /* data compression is in progress */ #define HTTP_MSGF_BODYLESS 0x00000040 /* The message has no body (content-length = 0) */ +#define HTTP_MSGF_CONN_UPG 0x00000080 /* The message contains "Connection: Upgrade" header */ /* Maximum length of the cache secondary key (sum of all the possible parts of * the secondary key). The actual keys might be smaller for some diff --git a/include/haproxy/htx-t.h b/include/haproxy/htx-t.h index fb015752f..f14bb25e5 100644 --- a/include/haproxy/htx-t.h +++ b/include/haproxy/htx-t.h @@ -137,7 +137,7 @@ #define HTX_SL_F_SCHM_HTTPS 0x00000200 /* The scheme HTTPS should be used */ #define HTX_SL_F_HAS_AUTHORITY 0x00000400 /* The request authority is explicitly specified */ #define HTX_SL_F_NORMALIZED_URI 0x00000800 /* The received URI is normalized (an implicit absolute-uri form) */ - +#define HTX_SL_F_CONN_UPG 0x00001000 /* The message contains "connection: upgrade" header */ /* HTX flags */ #define HTX_FL_NONE 0x00000000 diff --git a/src/h1_htx.c b/src/h1_htx.c index 30e2b229e..dc6accabb 100644 --- a/src/h1_htx.c +++ b/src/h1_htx.c @@ -148,6 +148,8 @@ static unsigned int h1m_htx_sl_flags(struct h1m *h1m) } if (h1m->state == H1_MSG_TUNNEL) flags |= HTX_SL_F_BODYLESS; + if (h1m->flags & H1_MF_CONN_UPG) + flags |= HTX_SL_F_CONN_UPG; return flags; } diff --git a/src/http_ana.c b/src/http_ana.c index 7816ad563..96753c0ef 100644 --- a/src/http_ana.c +++ b/src/http_ana.c @@ -166,6 +166,8 @@ int http_wait_for_request(struct stream *s, struct channel *req, int an_bit) msg->flags |= HTTP_MSGF_TE_CHNK; if (sl->flags & HTX_SL_F_BODYLESS) msg->flags |= HTTP_MSGF_BODYLESS; + if (sl->flags & HTX_SL_F_CONN_UPG) + msg->flags |= HTTP_MSGF_CONN_UPG; /* we can make use of server redirect on GET and HEAD */ if (txn->meth == HTTP_METH_GET || txn->meth == HTTP_METH_HEAD) @@ -1558,6 +1560,8 @@ int http_wait_for_response(struct stream *s, struct channel *rep, int an_bit) } if (sl->flags & HTX_SL_F_BODYLESS) msg->flags |= HTTP_MSGF_BODYLESS; + if (sl->flags & HTX_SL_F_CONN_UPG) + msg->flags |= HTTP_MSGF_CONN_UPG; n = txn->status / 100; if (n < 1 || n > 5)