Mercurial > hg > nginx-quic
comparison src/event/quic/ngx_event_quic_migration.c @ 8690:a951e0809044 quic
QUIC: fixed PATH_RESPONSE frame expansion.
The PATH_RESPONSE frame must be expanded to 1200, except the case
when anti-amplification limit is in effect, i.e. on unvalidated paths.
Previously, the anti-amplification limit was always applied.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Thu, 11 Nov 2021 15:15:07 +0300 |
parents | ad046179eb91 |
children | 50d73bf20e73 |
comparison
equal
deleted
inserted
replaced
8689:fc8980f01477 | 8690:a951e0809044 |
---|---|
45 */ | 45 */ |
46 qsock = ngx_quic_get_socket(c); | 46 qsock = ngx_quic_get_socket(c); |
47 path = qsock->path; | 47 path = qsock->path; |
48 | 48 |
49 /* | 49 /* |
50 * An endpoint MUST expand datagrams that contain a PATH_RESPONSE frame | |
51 * to at least the smallest allowed maximum datagram size of 1200 bytes. | |
52 * ... | |
50 * An endpoint MUST NOT expand the datagram containing the PATH_RESPONSE | 53 * An endpoint MUST NOT expand the datagram containing the PATH_RESPONSE |
51 * if the resulting data exceeds the anti-amplification limit. | 54 * if the resulting data exceeds the anti-amplification limit. |
52 */ | 55 */ |
53 max = path->received * 3; | 56 if (path->state != NGX_QUIC_PATH_VALIDATED) { |
54 max = (path->sent >= max) ? 0 : max - path->sent; | 57 max = path->received * 3; |
55 pad = ngx_min(1200, max); | 58 max = (path->sent >= max) ? 0 : max - path->sent; |
59 pad = ngx_min(1200, max); | |
60 | |
61 } else { | |
62 pad = 1200; | |
63 } | |
56 | 64 |
57 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen); | 65 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen); |
58 if (sent < 0) { | 66 if (sent < 0) { |
59 return NGX_ERROR; | 67 return NGX_ERROR; |
60 } | 68 } |