Mercurial > hg > nginx
comparison src/event/ngx_event_quic_transport.c @ 8596:38c7dd720774 quic
QUIC: added ACK frame range support.
The history of acknowledged packet is kept in send context as ranges.
Up to NGX_QUIC_MAX_RANGES ranges is stored.
As a result, instead of separate ack frames, single frame with ranges
is sent.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Tue, 20 Oct 2020 18:53:00 +0300 |
parents | ee06a813756c |
children | b3d9e57d0f62 |
comparison
equal
deleted
inserted
replaced
8595:96798101c3aa | 8596:38c7dd720774 |
---|---|
1267 | 1267 |
1268 | 1268 |
1269 static size_t | 1269 static size_t |
1270 ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack) | 1270 ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack) |
1271 { | 1271 { |
1272 size_t len; | 1272 size_t len; |
1273 u_char *start; | 1273 u_char *start; |
1274 | 1274 ngx_uint_t i; |
1275 /* minimal ACK packet */ | 1275 ngx_quic_ack_range_t *ranges; |
1276 | |
1277 ranges = (ngx_quic_ack_range_t *) ack->ranges_start; | |
1276 | 1278 |
1277 if (p == NULL) { | 1279 if (p == NULL) { |
1278 len = ngx_quic_varint_len(NGX_QUIC_FT_ACK); | 1280 len = ngx_quic_varint_len(NGX_QUIC_FT_ACK); |
1279 len += ngx_quic_varint_len(ack->largest); | 1281 len += ngx_quic_varint_len(ack->largest); |
1280 len += ngx_quic_varint_len(ack->delay); | 1282 len += ngx_quic_varint_len(ack->delay); |
1281 len += ngx_quic_varint_len(0); | 1283 len += ngx_quic_varint_len(ack->range_count); |
1282 len += ngx_quic_varint_len(ack->first_range); | 1284 len += ngx_quic_varint_len(ack->first_range); |
1285 | |
1286 for (i = 0; i < ack->range_count; i++) { | |
1287 len += ngx_quic_varint_len(ranges[i].gap); | |
1288 len += ngx_quic_varint_len(ranges[i].range); | |
1289 } | |
1283 | 1290 |
1284 return len; | 1291 return len; |
1285 } | 1292 } |
1286 | 1293 |
1287 start = p; | 1294 start = p; |
1288 | 1295 |
1289 ngx_quic_build_int(&p, NGX_QUIC_FT_ACK); | 1296 ngx_quic_build_int(&p, NGX_QUIC_FT_ACK); |
1290 ngx_quic_build_int(&p, ack->largest); | 1297 ngx_quic_build_int(&p, ack->largest); |
1291 ngx_quic_build_int(&p, ack->delay); | 1298 ngx_quic_build_int(&p, ack->delay); |
1292 ngx_quic_build_int(&p, 0); | 1299 ngx_quic_build_int(&p, ack->range_count); |
1293 ngx_quic_build_int(&p, ack->first_range); | 1300 ngx_quic_build_int(&p, ack->first_range); |
1301 | |
1302 for (i = 0; i < ack->range_count; i++) { | |
1303 ngx_quic_build_int(&p, ranges[i].gap); | |
1304 ngx_quic_build_int(&p, ranges[i].range); | |
1305 } | |
1294 | 1306 |
1295 return p - start; | 1307 return p - start; |
1296 } | 1308 } |
1297 | 1309 |
1298 | 1310 |