summaryrefslogtreecommitdiffstats
path: root/src/qmux_http.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmux_http.c')
-rw-r--r--src/qmux_http.c29
1 files changed, 9 insertions, 20 deletions
diff --git a/src/qmux_http.c b/src/qmux_http.c
index edf26b1..092eb15 100644
--- a/src/qmux_http.c
+++ b/src/qmux_http.c
@@ -78,6 +78,15 @@ size_t qcs_http_snd_buf(struct qcs *qcs, struct buffer *buf, size_t count,
TRACE_ENTER(QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
htx = htxbuf(buf);
+
+ /* Extra care required for HTTP/1 responses without Content-Length nor
+ * chunked encoding. In this case, shutw callback will be use to signal
+ * the end of the message. QC_SF_UNKNOWN_PL_LENGTH is set to prevent a
+ * RESET_STREAM emission in this case.
+ */
+ if (htx->extra && htx->extra == HTX_UNKOWN_PAYLOAD_LENGTH)
+ qcs->flags |= QC_SF_UNKNOWN_PL_LENGTH;
+
eom = (htx->flags & HTX_FL_EOM);
ret = qcs->qcc->app_ops->snd_buf(qcs, buf, count);
*fin = (eom && !b_data(buf));
@@ -86,23 +95,3 @@ size_t qcs_http_snd_buf(struct qcs *qcs, struct buffer *buf, size_t count,
return ret;
}
-
-/* QUIC MUX snd_buf reset. HTX data stored in <buf> of length <count> will be
- * cleared. This can be used when data should not be transmitted any longer.
- *
- * Return the size in bytes of cleared data.
- */
-size_t qcs_http_reset_buf(struct qcs *qcs, struct buffer *buf, size_t count)
-{
- struct htx *htx;
-
- TRACE_ENTER(QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
-
- htx = htx_from_buf(buf);
- htx_reset(htx);
- htx_to_buf(htx, buf);
-
- TRACE_LEAVE(QMUX_EV_STRM_SEND, qcs->qcc->conn, qcs);
-
- return count;
-}