summaryrefslogtreecommitdiff
path: root/ssl/quic/quic_stream_map.c
diff options
context:
space:
mode:
Diffstat (limited to 'ssl/quic/quic_stream_map.c')
-rw-r--r--ssl/quic/quic_stream_map.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/ssl/quic/quic_stream_map.c b/ssl/quic/quic_stream_map.c
index a9c616ea9f..2f58b2a51a 100644
--- a/ssl/quic/quic_stream_map.c
+++ b/ssl/quic/quic_stream_map.c
@@ -271,14 +271,12 @@ void ossl_quic_stream_map_update_state(QUIC_STREAM_MAP *qsm, QUIC_STREAM *s)
should_be_active
= allowed_by_stream_limit
- && !s->peer_stop_sending
- && !s->peer_reset_stream
- && ((s->rstream != NULL
- && (s->want_max_stream_data
- || ossl_quic_rxfc_has_cwm_changed(&s->rxfc, 0)))
+ && ((!s->peer_reset_stream && s->rstream != NULL
+ && (s->want_max_stream_data
+ || ossl_quic_rxfc_has_cwm_changed(&s->rxfc, 0)))
|| s->want_stop_sending
|| s->want_reset_stream
- || stream_has_data_to_send(s));
+ || (!s->peer_stop_sending && stream_has_data_to_send(s)));
if (should_be_active)
stream_map_mark_active(qsm, s);
@@ -286,6 +284,20 @@ void ossl_quic_stream_map_update_state(QUIC_STREAM_MAP *qsm, QUIC_STREAM *s)
stream_map_mark_inactive(qsm, s);
}
+void ossl_quic_stream_map_reset_stream_send_part(QUIC_STREAM_MAP *qsm,
+ QUIC_STREAM *qs,
+ uint64_t aec)
+{
+ if (qs->reset_stream)
+ return;
+
+ qs->reset_stream = 1;
+ qs->reset_stream_aec = aec;
+ qs->want_reset_stream = 1;
+
+ ossl_quic_stream_map_update_state(qsm, qs);
+}
+
QUIC_STREAM *ossl_quic_stream_map_peek_accept_queue(QUIC_STREAM_MAP *qsm)
{
return accept_head(&qsm->accept_list);