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