Mercurial > hg > nginx
comparison 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 |
comparison
equal
deleted
inserted
replaced
8612:b1676cd64dc9 | 8613:867c189f875d |
---|---|
1117 | 1117 |
1118 return p - start; | 1118 return p - start; |
1119 } | 1119 } |
1120 | 1120 |
1121 | 1121 |
1122 size_t | |
1123 ngx_quic_create_ack_range(u_char *p, uint64_t gap, uint64_t range) | |
1124 { | |
1125 size_t len; | |
1126 u_char *start; | |
1127 | |
1128 if (p == NULL) { | |
1129 len = ngx_quic_varint_len(gap); | |
1130 len += ngx_quic_varint_len(range); | |
1131 return len; | |
1132 } | |
1133 | |
1134 start = p; | |
1135 | |
1136 ngx_quic_build_int(&p, gap); | |
1137 ngx_quic_build_int(&p, range); | |
1138 | |
1139 return p - start; | |
1140 } | |
1141 | |
1142 | |
1122 ssize_t | 1143 ssize_t |
1123 ngx_quic_create_frame(u_char *p, ngx_quic_frame_t *f) | 1144 ngx_quic_create_frame(u_char *p, ngx_quic_frame_t *f) |
1124 { | 1145 { |
1125 /* | 1146 /* |
1126 * QUIC-recovery, section 2: | 1147 * QUIC-recovery, section 2: |
1185 | 1206 |
1186 | 1207 |
1187 static size_t | 1208 static size_t |
1188 ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack) | 1209 ngx_quic_create_ack(u_char *p, ngx_quic_ack_frame_t *ack) |
1189 { | 1210 { |
1190 size_t len; | 1211 size_t len; |
1191 u_char *start; | 1212 u_char *start; |
1192 ngx_uint_t i; | |
1193 ngx_quic_ack_range_t *ranges; | |
1194 | |
1195 ranges = (ngx_quic_ack_range_t *) ack->ranges_start; | |
1196 | 1213 |
1197 if (p == NULL) { | 1214 if (p == NULL) { |
1198 len = ngx_quic_varint_len(NGX_QUIC_FT_ACK); | 1215 len = ngx_quic_varint_len(NGX_QUIC_FT_ACK); |
1199 len += ngx_quic_varint_len(ack->largest); | 1216 len += ngx_quic_varint_len(ack->largest); |
1200 len += ngx_quic_varint_len(ack->delay); | 1217 len += ngx_quic_varint_len(ack->delay); |
1201 len += ngx_quic_varint_len(ack->range_count); | 1218 len += ngx_quic_varint_len(ack->range_count); |
1202 len += ngx_quic_varint_len(ack->first_range); | 1219 len += ngx_quic_varint_len(ack->first_range); |
1203 | 1220 len += ack->ranges_end - ack->ranges_start; |
1204 for (i = 0; i < ack->range_count; i++) { | |
1205 len += ngx_quic_varint_len(ranges[i].gap); | |
1206 len += ngx_quic_varint_len(ranges[i].range); | |
1207 } | |
1208 | 1221 |
1209 return len; | 1222 return len; |
1210 } | 1223 } |
1211 | 1224 |
1212 start = p; | 1225 start = p; |
1214 ngx_quic_build_int(&p, NGX_QUIC_FT_ACK); | 1227 ngx_quic_build_int(&p, NGX_QUIC_FT_ACK); |
1215 ngx_quic_build_int(&p, ack->largest); | 1228 ngx_quic_build_int(&p, ack->largest); |
1216 ngx_quic_build_int(&p, ack->delay); | 1229 ngx_quic_build_int(&p, ack->delay); |
1217 ngx_quic_build_int(&p, ack->range_count); | 1230 ngx_quic_build_int(&p, ack->range_count); |
1218 ngx_quic_build_int(&p, ack->first_range); | 1231 ngx_quic_build_int(&p, ack->first_range); |
1219 | 1232 p = ngx_cpymem(p, ack->ranges_start, ack->ranges_end - ack->ranges_start); |
1220 for (i = 0; i < ack->range_count; i++) { | |
1221 ngx_quic_build_int(&p, ranges[i].gap); | |
1222 ngx_quic_build_int(&p, ranges[i].range); | |
1223 } | |
1224 | 1233 |
1225 return p - start; | 1234 return p - start; |
1226 } | 1235 } |
1227 | 1236 |
1228 | 1237 |