MINOR: htx/http-ana: Save info about Upgrade option in the Connection header
Add an HTX start-line flag and its counterpart into the HTTP message to
track the presence of the Upgrade option into the Connection header. This
way, without parsing the Connection header again, it will be easy to know if
a client asks for a protocol upgrade and if the server agrees to do so. It
will also be easy to perform some conformance checks when a
101-switching-protocols is received.
diff --git a/include/haproxy/http_ana-t.h b/include/haproxy/http_ana-t.h
index 50fbd3d..89d41dd 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 fb01575..f14bb25 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 30e2b22..dc6acca 100644
--- a/src/h1_htx.c
+++ b/src/h1_htx.c
@@ -148,6 +148,8 @@
}
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 7816ad5..96753c0 100644
--- a/src/http_ana.c
+++ b/src/http_ana.c
@@ -166,6 +166,8 @@
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 @@
}
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)