Mercurial > hg > nginx
changeset 8876:1ead7d64e993 quic
QUIC: send RESET_STREAM in response to STOP_SENDING.
As per RFC 9000:
An endpoint that receives a STOP_SENDING frame MUST send a RESET_STREAM
frame if the stream is in the "Ready" or "Send" state.
An endpoint SHOULD copy the error code from the STOP_SENDING frame to
the RESET_STREAM frame it sends, but it can use any application error code.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Tue, 21 Sep 2021 16:24:33 +0300 |
parents | 13cb758e6ac0 |
children | b5296bd8631c |
files | src/event/quic/ngx_event_quic_streams.c |
diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/quic/ngx_event_quic_streams.c Wed Sep 22 14:02:56 2021 +0300 +++ b/src/event/quic/ngx_event_quic_streams.c Tue Sep 21 16:24:33 2021 +0300 @@ -1253,6 +1253,7 @@ ngx_quic_handle_stop_sending_frame(ngx_connection_t *c, ngx_quic_header_t *pkt, ngx_quic_stop_sending_frame_t *f) { + ngx_pool_t *pool; ngx_event_t *wev; ngx_connection_t *sc; ngx_quic_stream_t *qs; @@ -1282,16 +1283,23 @@ sc = qs->connection; - wev = sc->write; - wev->error = 1; - wev->ready = 1; + if (ngx_quic_reset_stream(sc, f->error_code) != NGX_OK) { + pool = sc->pool; + + ngx_close_connection(sc); + ngx_destroy_pool(pool); + + return NGX_ERROR; + } return ngx_quic_init_stream(qs); } + if (ngx_quic_reset_stream(qs->connection, f->error_code) != NGX_OK) { + return NGX_ERROR; + } + wev = qs->connection->write; - wev->error = 1; - wev->ready = 1; if (wev->active) { wev->handler(wev);