Mercurial > hg > nginx
comparison src/event/ngx_event_quic_transport.c @ 8587:61f1c6ac8967 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 | Wed, 14 Oct 2020 23:21:36 +0300 |
parents | b95aa1cb8f98 |
children | 93be5658a250 |
comparison
equal
deleted
inserted
replaced
8586:7621ffaa79b3 | 8587:61f1c6ac8967 |
---|---|
1257 | 1257 |
1258 | 1258 |
1259 static size_t | 1259 static size_t |
1260 ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack) | 1260 ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack) |
1261 { | 1261 { |
1262 size_t len; | 1262 size_t len; |
1263 u_char *start; | 1263 u_char *start; |
1264 | 1264 ngx_uint_t i; |
1265 /* minimal ACK packet */ | 1265 ngx_quic_ack_range_t *ranges; |
1266 | |
1267 ranges = (ngx_quic_ack_range_t *) ack->ranges_start; | |
1266 | 1268 |
1267 if (p == NULL) { | 1269 if (p == NULL) { |
1268 len = ngx_quic_varint_len(NGX_QUIC_FT_ACK); | 1270 len = ngx_quic_varint_len(NGX_QUIC_FT_ACK); |
1269 len += ngx_quic_varint_len(ack->largest); | 1271 len += ngx_quic_varint_len(ack->largest); |
1270 len += ngx_quic_varint_len(ack->delay); | 1272 len += ngx_quic_varint_len(ack->delay); |
1271 len += ngx_quic_varint_len(0); | 1273 len += ngx_quic_varint_len(ack->range_count); |
1272 len += ngx_quic_varint_len(ack->first_range); | 1274 len += ngx_quic_varint_len(ack->first_range); |
1275 | |
1276 for (i = 0; i < ack->range_count; i++) { | |
1277 len += ngx_quic_varint_len(ranges[i].gap); | |
1278 len += ngx_quic_varint_len(ranges[i].range); | |
1279 } | |
1273 | 1280 |
1274 return len; | 1281 return len; |
1275 } | 1282 } |
1276 | 1283 |
1277 start = p; | 1284 start = p; |
1278 | 1285 |
1279 ngx_quic_build_int(&p, NGX_QUIC_FT_ACK); | 1286 ngx_quic_build_int(&p, NGX_QUIC_FT_ACK); |
1280 ngx_quic_build_int(&p, ack->largest); | 1287 ngx_quic_build_int(&p, ack->largest); |
1281 ngx_quic_build_int(&p, ack->delay); | 1288 ngx_quic_build_int(&p, ack->delay); |
1282 ngx_quic_build_int(&p, 0); | 1289 ngx_quic_build_int(&p, ack->range_count); |
1283 ngx_quic_build_int(&p, ack->first_range); | 1290 ngx_quic_build_int(&p, ack->first_range); |
1291 | |
1292 for (i = 0; i < ack->range_count; i++) { | |
1293 ngx_quic_build_int(&p, ranges[i].gap); | |
1294 ngx_quic_build_int(&p, ranges[i].range); | |
1295 } | |
1284 | 1296 |
1285 return p - start; | 1297 return p - start; |
1286 } | 1298 } |
1287 | 1299 |
1288 | 1300 |