MINOR: quic: Modify qc_build_cfrms() to support any frame

This function was responsible of building CRYPTO frames to fill as much as
possible a packet passed as argument. This patch makes it support any frame
except STREAM frames whose lengths are highly variable.
diff --git a/src/xprt_quic.c b/src/xprt_quic.c
index 6f111ba..8c08a18 100644
--- a/src/xprt_quic.c
+++ b/src/xprt_quic.c
@@ -3588,57 +3588,77 @@
 	 */
 	if (!conn->tx.nb_pto_dgrams)
 		room = QUIC_MIN(room, quic_path_prep_data(conn->path) - headlen);
-	TRACE_PROTO("************** CRYPTO frames build (headlen)",
+	TRACE_PROTO("************** frames build (headlen)",
 	            QUIC_EV_CONN_BCFRMS, conn->conn, &headlen);
 	mt_list_for_each_entry_safe(cf, &qel->pktns->tx.frms, mt_list, tmp1, tmp2) {
 		/* header length, data length, frame length. */
-		size_t hlen, dlen, cflen;
+		size_t hlen, dlen, flen;
 
-		TRACE_PROTO("          New CRYPTO frame build (room, len)",
-		            QUIC_EV_CONN_BCFRMS, conn->conn, &room, len);
 		if (!room)
 			break;
 
-		/* Compute the length of this CRYPTO frame header */
-		hlen = 1 + quic_int_getsize(cf->crypto.offset);
-		/* Compute the data length of this CRyPTO frame. */
-		dlen = max_stream_data_size(room, *len + hlen, cf->crypto.len);
-		TRACE_PROTO(" CRYPTO data length (hlen, crypto.len, dlen)",
-		            QUIC_EV_CONN_BCFRMS, conn->conn, &hlen, &cf->crypto.len, &dlen);
-		if (!dlen)
-			break;
+		switch (cf->type) {
+		case QUIC_FT_CRYPTO:
+			TRACE_PROTO("          New CRYPTO frame build (room, len)",
+						QUIC_EV_CONN_BCFRMS, conn->conn, &room, len);
+			/* Compute the length of this CRYPTO frame header */
+			hlen = 1 + quic_int_getsize(cf->crypto.offset);
+			/* Compute the data length of this CRyPTO frame. */
+			dlen = max_stream_data_size(room, *len + hlen, cf->crypto.len);
+			TRACE_PROTO(" CRYPTO data length (hlen, crypto.len, dlen)",
+						QUIC_EV_CONN_BCFRMS, conn->conn, &hlen, &cf->crypto.len, &dlen);
+			if (!dlen)
+				break;
 
-		pkt->cdata_len += dlen;
-		/* CRYPTO frame length. */
-		cflen = hlen + quic_int_getsize(dlen) + dlen;
-		TRACE_PROTO("                 CRYPTO frame length (cflen)",
-		            QUIC_EV_CONN_BCFRMS, conn->conn, &cflen);
-		/* Add the CRYPTO data length and its encoded length to the packet
-		 * length and the length of this length.
-		 */
-		*len += cflen;
-		room -= cflen;
-		if (dlen == cf->crypto.len) {
-			/* <cf> CRYPTO data have been consumed. */
-			MT_LIST_DELETE_SAFE(tmp1);
-			LIST_APPEND(&pkt->frms, &cf->list);
-		}
-		else {
-			struct quic_frame *new_cf;
+			pkt->cdata_len += dlen;
+			/* CRYPTO frame length. */
+			flen = hlen + quic_int_getsize(dlen) + dlen;
+			TRACE_PROTO("                 CRYPTO frame length (flen)",
+						QUIC_EV_CONN_BCFRMS, conn->conn, &flen);
+			/* Add the CRYPTO data length and its encoded length to the packet
+			 * length and the length of this length.
+			 */
+			*len += flen;
+			room -= flen;
+			if (dlen == cf->crypto.len) {
+				/* <cf> CRYPTO data have been consumed. */
+				MT_LIST_DELETE_SAFE(tmp1);
+				LIST_APPEND(&pkt->frms, &cf->list);
+			}
+			else {
+				struct quic_frame *new_cf;
+
+				new_cf = pool_alloc(pool_head_quic_frame);
+				if (!new_cf) {
+					TRACE_PROTO("No memory for new crypto frame", QUIC_EV_CONN_BCFRMS, conn->conn);
+					return 0;
+				}
 
-			new_cf = pool_alloc(pool_head_quic_frame);
-			if (!new_cf) {
-				TRACE_PROTO("No memory for new crypto frame", QUIC_EV_CONN_BCFRMS, conn->conn);
-				return 0;
+				new_cf->type = QUIC_FT_CRYPTO;
+				new_cf->crypto.len = dlen;
+				new_cf->crypto.offset = cf->crypto.offset;
+				new_cf->crypto.qel = qel;
+				LIST_APPEND(&pkt->frms, &new_cf->list);
+				/* Consume <dlen> bytes of the current frame. */
+				cf->crypto.len -= dlen;
+				cf->crypto.offset += dlen;
 			}
+			break;
 
-			new_cf->type = QUIC_FT_CRYPTO;
-			new_cf->crypto.len = dlen;
-			new_cf->crypto.offset = cf->crypto.offset;
-			LIST_APPEND(&pkt->frms, &new_cf->list);
-			/* Consume <dlen> bytes of the current frame. */
-			cf->crypto.len -= dlen;
-			cf->crypto.offset += dlen;
+		case QUIC_FT_STREAM_8 ... QUIC_FT_STREAM_F:
+			break;
+
+		default:
+			flen = qc_frm_len(cf);
+			BUG_ON(!flen);
+			if (flen > room)
+				continue;
+
+			*len += flen;
+			room -= flen;
+			MT_LIST_DELETE_SAFE(tmp1);
+			LIST_APPEND(&pkt->frms, &cf->list);
+			break;
 		}
 		ret = 1;
 	}