aboutsummaryrefslogtreecommitdiff
path: root/src/event/ngx_event_quic.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/event/ngx_event_quic.c')
-rw-r--r--src/event/ngx_event_quic.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c
index 918e8f716..44360a1bc 100644
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -4564,6 +4564,27 @@ ngx_quic_stream_cleanup_handler(void *data)
return;
}
+ if ((qs->id & NGX_QUIC_STREAM_SERVER_INITIATED) == 0
+ || (qs->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) == 0)
+ {
+ if (!c->read->eof && !c->read->error) {
+ frame = ngx_quic_alloc_frame(pc, 0);
+ if (frame == NULL) {
+ return;
+ }
+
+ frame->level = ssl_encryption_application;
+ frame->type = NGX_QUIC_FT_STOP_SENDING;
+ frame->u.stop_sending.id = qs->id;
+ frame->u.stop_sending.error_code = 0x100; /* HTTP/3 no error */
+
+ ngx_sprintf(frame->info, "STOP_SENDING id:0x%xL err:0x%xL level:%d",
+ qs->id, frame->u.stop_sending.error_code, frame->level);
+
+ ngx_quic_queue_frame(qc, frame);
+ }
+ }
+
if ((qs->id & NGX_QUIC_STREAM_SERVER_INITIATED) == 0) {
frame = ngx_quic_alloc_frame(pc, 0);
if (frame == NULL) {