BUG/MEDIUM: mux-h1: Be able to handle trailers when C-L header was specified

The commit 2eb5243e7 ("BUG/MEDIUM: mux-h1: Set outgoing message to DONE when
payload length is reached") introduced a regression. An internal error is
reported when we try to forward a message with trailers while the
content-length header was specified. Indeed, this case does not exist for H1
messages but it is possible in H2.

This patch should solve the issue #1684. It must be backported as far as
2.4.

(cherry picked from commit d934e8d963fe1b88edc22a7277a7389005dd7856)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
(cherry picked from commit 93b865a56be1550c298651cf3973fd296a944a62)
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
diff --git a/src/mux_h1.c b/src/mux_h1.c
index ae0fdde..ead91a8 100644
--- a/src/mux_h1.c
+++ b/src/mux_h1.c
@@ -2245,13 +2245,8 @@
 			  trailers:
 				h1m->state = H1_MSG_TRAILERS;
 
-				/* If the message is not chunked, ignore
-				 * trailers. It may happen with H2 messages. */
-				if (!(h1m->flags & H1_MF_CHNK)) {
-					if (type == HTX_BLK_EOT)
-						goto done;
-					break;
-				}
+				if (!(h1m->flags & H1_MF_CHNK))
+					goto done;
 
 				if ((h1m->flags & H1_MF_RESP) && (h1s->flags & H1S_F_BODYLESS_RESP)) {
 					TRACE_PROTO("Skip trailers for bodyless response", H1_EV_TX_DATA|H1_EV_TX_BODY, h1c->conn, h1s, chn_htx);
@@ -2280,15 +2275,15 @@
 				break;
 
 			case H1_MSG_DONE:
+				/* If the message is not chunked, ignore
+				 * trailers. It may happen with H2 messages. */
+				if ((type == HTX_BLK_TLR || type == HTX_BLK_EOT) && !(h1m->flags & H1_MF_CHNK))
+					break;
+
 				TRACE_STATE("unexpected data xferred in done state", H1_EV_TX_DATA|H1_EV_H1C_ERR|H1_EV_H1S_ERR, h1c->conn, h1s);
 				goto error; /* For now return an error */
 
 			  done:
-				if (!(chn_htx->flags & HTX_FL_EOM) && (!(h1m->flags & H1_MF_CLEN) || h1m->curr_len)) {
-					TRACE_STATE("No EOM flags in done state", H1_EV_TX_DATA|H1_EV_H1C_ERR|H1_EV_H1S_ERR, h1c->conn, h1s);
-					goto error; /* For now return an error */
-				}
-
 				h1m->state = H1_MSG_DONE;
 				if (!(h1m->flags & H1_MF_RESP) && h1s->meth == HTTP_METH_CONNECT) {
 					h1s->flags |= H1S_F_TX_BLK;