Mercurial > hg > nginx
changeset 8566:9588a2782c62 quic
QUIC: speeding up handshake completion.
As per quic-recovery draft, section-6.2.3: resend CRYPTO frames
when receiving an Initial packet containing duplicate CRYPTO data.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 01 Oct 2020 12:10:22 +0100 |
parents | 0e12c4aca3ab |
children | 4983357258d7 |
files | src/event/ngx_event_quic.c |
diffstat | 1 files changed, 15 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/event/ngx_event_quic.c Thu Oct 01 12:09:47 2020 +0100 +++ b/src/event/ngx_event_quic.c Thu Oct 01 12:10:22 2020 +0100 @@ -2661,7 +2661,7 @@ == NGX_DONE) { /* old/duplicate data range */ - return NGX_OK; + return handler == ngx_quic_crypto_input ? NGX_DECLINED : NGX_OK; } /* intersecting data range, frame modified */ @@ -2844,6 +2844,7 @@ ngx_quic_frame_t *frame) { uint64_t last; + ngx_int_t rc; ngx_quic_connection_t *qc; ngx_quic_crypto_frame_t *f; ngx_quic_frames_stream_t *fs; @@ -2860,8 +2861,19 @@ return NGX_ERROR; } - return ngx_quic_handle_ordered_frame(c, fs, frame, ngx_quic_crypto_input, - NULL); + rc = ngx_quic_handle_ordered_frame(c, fs, frame, ngx_quic_crypto_input, + NULL); + if (rc != NGX_DECLINED) { + return rc; + } + + /* speeding up handshake completion */ + + if (pkt->level == ssl_encryption_initial) { + ngx_quic_resend_frames(c, ngx_quic_get_send_ctx(qc, pkt->level)); + } + + return NGX_OK; }