MINOR: htx: add function to set EOM reliably

Implement a new HTX utility function htx_set_eom(). If the HTX message
is empty, it will first add a dummy EOT block. This is a small trick
needed to ensure readers will detect the HTX buffer as not empty and
retrieve the EOM flag.

Replace the H2 code related by a htx_set_eom() invocation. QUIC also has
the same code which will be replaced in the next commit.

This should be backported up to 2.7 before the related QUIC patch.
diff --git a/include/haproxy/htx.h b/include/haproxy/htx.h
index e80ecad..59e885a 100644
--- a/include/haproxy/htx.h
+++ b/include/haproxy/htx.h
@@ -758,6 +758,24 @@
 	return !(htx->flags & HTX_FL_EOM);
 }
 
+/* Set EOM flag in <htx>. This function is useful if the HTX message is empty.
+ * In this case, an EOT block is appended first to ensure the EOM will be
+ * forwarded as expected. This is a workaround as it is not possibly currently
+ * to push an empty HTX DATA block.
+ *
+ * Returns 1 on success else 0.
+ */
+static inline int htx_set_eom(struct htx *htx)
+{
+	if (htx_is_empty(htx)) {
+		if (!htx_add_endof(htx, HTX_BLK_EOT))
+			return 0;
+	}
+
+	htx->flags |= HTX_FL_EOM;
+	return 1;
+}
+
 /* Copy an HTX message stored in the buffer <msg> to <htx>. We take care to
  * not overwrite existing data. All the message is copied or nothing. It returns
  * 1 on success and 0 on error.
diff --git a/src/mux_h2.c b/src/mux_h2.c
index 949ffb3..b531c61 100644
--- a/src/mux_h2.c
+++ b/src/mux_h2.c
@@ -5095,18 +5095,9 @@
 		 * EOM was already reported.
 		 */
 		if ((h2c->flags & H2_CF_IS_BACK) || !(h2s->flags & H2_SF_TUNNEL_ABRT)) {
-			/* If we receive an empty DATA frame with ES flag while the HTX
-			 * message is empty, we must be sure to push a block to be sure
-			 * the HTX EOM flag will be handled on the other side. It is a
-			 * workaround because for now it is not possible to push empty
-			 * HTX DATA block. And without this block, there is no way to
-			 * "commit" the end of the message.
-			 */
-			if (htx_is_empty(htx)) {
-				if (!htx_add_endof(htx, HTX_BLK_EOT))
-					goto fail;
-			}
-			htx->flags |= HTX_FL_EOM;
+			/* htx may be empty if receiving an empty DATA frame. */
+			if (!htx_set_eom(htx))
+				goto fail;
 		}
 	}