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