comparison src/event/quic/ngx_event_quic_migration.c @ 8901: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
8900:fc8980f01477 8901: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 }