# HG changeset patch # User Sergey Kandaurov # Date 1644923554 -10800 # Node ID e5f16d886c97c4d7fda6a8fb6da634b9d95081ba # Parent ce6d9cf0f567979e85ea6ab781bb9184340279e3 QUIC: optimized datagram expansion with half-RTT tickets. As shown in RFC 8446, section 2.2, Figure 3, and further specified in section 4.6.1, BoringSSL releases session tickets in Application Data (along with Finished) early, based on a precalculated client Finished transcript, once client signalled early data in extensions. diff -r ce6d9cf0f567 -r e5f16d886c97 src/event/quic/ngx_event_quic_output.c --- a/src/event/quic/ngx_event_quic_output.c Mon Feb 14 10:14:07 2022 +0300 +++ b/src/event/quic/ngx_event_quic_output.c Tue Feb 15 14:12:34 2022 +0300 @@ -476,6 +476,7 @@ static ngx_uint_t ngx_quic_get_padding_level(ngx_connection_t *c) { + ngx_uint_t i; ngx_queue_t *q; ngx_quic_frame_t *f; ngx_quic_send_ctx_t *ctx; @@ -499,13 +500,15 @@ f = ngx_queue_data(q, ngx_quic_frame_t, queue); if (f->need_ack) { - ctx = ngx_quic_get_send_ctx(qc, ssl_encryption_handshake); + for (i = 0; i + 1 < NGX_QUIC_SEND_CTX_LAST; i++) { + ctx = &qc->send_ctx[i + 1]; - if (ngx_queue_empty(&ctx->frames)) { - return 0; + if (ngx_queue_empty(&ctx->frames)) { + break; + } } - return 1; + return i; } }