Mercurial > hg > nginx
diff src/event/ngx_event_quic_transport.c @ 8613:867c189f875d quic
QUIC: unified range format for rx and tx ACK frames.
Previously, tx ACK frames held ranges in an array of ngx_quic_ack_range_t,
while rx ACK frames held ranges in the serialized format. Now serialized format
is used for both types of frames.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Tue, 27 Oct 2020 13:24:00 +0000 |
parents | f32740ddd484 |
children | 340cd26158fb |
line wrap: on
line diff
--- a/src/event/ngx_event_quic_transport.c Tue Oct 27 00:14:24 2020 +0300 +++ b/src/event/ngx_event_quic_transport.c Tue Oct 27 13:24:00 2020 +0000 @@ -1119,6 +1119,27 @@ } +size_t +ngx_quic_create_ack_range(u_char *p, uint64_t gap, uint64_t range) +{ + size_t len; + u_char *start; + + if (p == NULL) { + len = ngx_quic_varint_len(gap); + len += ngx_quic_varint_len(range); + return len; + } + + start = p; + + ngx_quic_build_int(&p, gap); + ngx_quic_build_int(&p, range); + + return p - start; +} + + ssize_t ngx_quic_create_frame(u_char *p, ngx_quic_frame_t *f) { @@ -1187,12 +1208,8 @@ static size_t ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack) { - size_t len; - u_char *start; - ngx_uint_t i; - ngx_quic_ack_range_t *ranges; - - ranges = (ngx_quic_ack_range_t *) ack->ranges_start; + size_t len; + u_char *start; if (p == NULL) { len = ngx_quic_varint_len(NGX_QUIC_FT_ACK); @@ -1200,11 +1217,7 @@ len += ngx_quic_varint_len(ack->delay); len += ngx_quic_varint_len(ack->range_count); len += ngx_quic_varint_len(ack->first_range); - - for (i = 0; i < ack->range_count; i++) { - len += ngx_quic_varint_len(ranges[i].gap); - len += ngx_quic_varint_len(ranges[i].range); - } + len += ack->ranges_end - ack->ranges_start; return len; } @@ -1216,11 +1229,7 @@ ngx_quic_build_int(&p, ack->delay); ngx_quic_build_int(&p, ack->range_count); ngx_quic_build_int(&p, ack->first_range); - - for (i = 0; i < ack->range_count; i++) { - ngx_quic_build_int(&p, ranges[i].gap); - ngx_quic_build_int(&p, ranges[i].range); - } + p = ngx_cpymem(p, ack->ranges_start, ack->ranges_end - ack->ranges_start); return p - start; }