aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2020-12-10 14:54:53 +0000
committerRoman Arutyunyan <arut@nginx.com>2020-12-10 14:54:53 +0000
commit4fd02c58391ed65a4567e16bee6d198670f2539a (patch)
tree4f285e16871bdd7895f58d2653eb6c39220c811b /src
parent6f9efd423ed225bf1cf25f173aaf99cbedc57e3f (diff)
downloadnginx-4fd02c58391ed65a4567e16bee6d198670f2539a.tar.gz
nginx-4fd02c58391ed65a4567e16bee6d198670f2539a.zip
QUIC: send and process ack_delay for Initial and Handshake levels.
Previously, this only worked for Application level because before quic-transport-30, there were the following constraints: Because the receiver doesn't use the ACK Delay for Initial and Handshake packets, a sender SHOULD send a value of 0. When adjusting an RTT sample using peer-reported acknowledgement delays, an endpoint ... MUST ignore the ACK Delay field of the ACK frame for packets sent in the Initial and Handshake packet number space.
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_quic.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/src/event/ngx_event_quic.c b/src/event/ngx_event_quic.c
index fef428625..349fbb311 100644
--- a/src/event/ngx_event_quic.c
+++ b/src/event/ngx_event_quic.c
@@ -3024,14 +3024,9 @@ ngx_quic_send_ack(ngx_connection_t *c, ngx_quic_send_ctx_t *ctx)
qc = ngx_quic_get_connection(c);
- if (ctx->level == ssl_encryption_application) {
- ack_delay = ngx_current_msec - ctx->largest_received;
- ack_delay *= 1000;
- ack_delay >>= qc->ctp.ack_delay_exponent;
-
- } else {
- ack_delay = 0;
- }
+ ack_delay = ngx_current_msec - ctx->largest_received;
+ ack_delay *= 1000;
+ ack_delay >>= qc->ctp.ack_delay_exponent;
frame = ngx_quic_alloc_frame(c);
if (frame == NULL) {
@@ -3379,13 +3374,10 @@ ngx_quic_rtt_sample(ngx_connection_t *c, ngx_quic_ack_frame_t *ack,
} else {
qc->min_rtt = ngx_min(qc->min_rtt, latest_rtt);
+ ack_delay = ack->delay * (1 << qc->ctp.ack_delay_exponent) / 1000;
- if (level == ssl_encryption_application) {
- ack_delay = ack->delay * (1 << qc->ctp.ack_delay_exponent) / 1000;
+ if (c->ssl->handshaked) {
ack_delay = ngx_min(ack_delay, qc->ctp.max_ack_delay);
-
- } else {
- ack_delay = 0;
}
adjusted_rtt = latest_rtt;