Mercurial > hg > nginx
comparison src/event/ngx_event_quic_transport.h @ 8308:e10b4c61420f quic
Implemented retransmission and retransmit queue.
All frames collected to packet are moved into a per-namespace send queue.
QUIC connection has a timer which fires on the closest max_ack_delay time.
The frame is deleted from the queue when a corresponding packet is acknowledged.
The NGX_QUIC_MAX_RETRANSMISSION is a timeout that defines maximum length
of retransmission of a frame.
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Wed, 01 Apr 2020 17:06:26 +0300 |
parents | dc7ac778aafe |
children | fdda518d10ba |
comparison
equal
deleted
inserted
replaced
8307:dc7ac778aafe | 8308:e10b4c61420f |
---|---|
95 #define NGX_QUIC_TP_PREFERRED_ADDRESS 0x0D | 95 #define NGX_QUIC_TP_PREFERRED_ADDRESS 0x0D |
96 #define NGX_QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT 0x0E | 96 #define NGX_QUIC_TP_ACTIVE_CONNECTION_ID_LIMIT 0x0E |
97 | 97 |
98 | 98 |
99 typedef struct { | 99 typedef struct { |
100 ngx_uint_t pn; | |
101 uint64_t largest; | 100 uint64_t largest; |
102 uint64_t delay; | 101 uint64_t delay; |
103 uint64_t range_count; | 102 uint64_t range_count; |
104 uint64_t first_range; | 103 uint64_t first_range; |
105 uint64_t ranges[20]; | 104 uint64_t ranges[20]; |
202 typedef struct ngx_quic_frame_s ngx_quic_frame_t; | 201 typedef struct ngx_quic_frame_s ngx_quic_frame_t; |
203 | 202 |
204 struct ngx_quic_frame_s { | 203 struct ngx_quic_frame_s { |
205 ngx_uint_t type; | 204 ngx_uint_t type; |
206 enum ssl_encryption_level_t level; | 205 enum ssl_encryption_level_t level; |
207 ngx_quic_frame_t *next; | 206 ngx_queue_t queue; |
207 uint64_t pnum; | |
208 ngx_msec_t first; | |
209 ngx_msec_t last; | |
210 ngx_uint_t need_ack; | |
211 /* unsigned need_ack:1; */ | |
212 | |
208 u_char *data; | 213 u_char *data; |
209 union { | 214 union { |
210 ngx_quic_ack_frame_t ack; | 215 ngx_quic_ack_frame_t ack; |
211 ngx_quic_crypto_frame_t crypto; | 216 ngx_quic_crypto_frame_t crypto; |
212 ngx_quic_new_conn_id_frame_t ncid; | 217 ngx_quic_new_conn_id_frame_t ncid; |
248 ngx_str_t dcid; | 253 ngx_str_t dcid; |
249 ngx_str_t scid; | 254 ngx_str_t scid; |
250 uint64_t pn; | 255 uint64_t pn; |
251 u_char *plaintext; | 256 u_char *plaintext; |
252 ngx_str_t payload; /* decrypted data */ | 257 ngx_str_t payload; /* decrypted data */ |
258 | |
259 ngx_uint_t need_ack; | |
260 /* unsigned need_ack:1; */ | |
253 } ngx_quic_header_t; | 261 } ngx_quic_header_t; |
254 | 262 |
255 | 263 |
256 u_char *ngx_quic_error_text(uint64_t error_code); | 264 u_char *ngx_quic_error_text(uint64_t error_code); |
257 | 265 |
267 ngx_int_t ngx_quic_parse_initial_header(ngx_quic_header_t *pkt); | 275 ngx_int_t ngx_quic_parse_initial_header(ngx_quic_header_t *pkt); |
268 ngx_int_t ngx_quic_parse_handshake_header(ngx_quic_header_t *pkt); | 276 ngx_int_t ngx_quic_parse_handshake_header(ngx_quic_header_t *pkt); |
269 | 277 |
270 ssize_t ngx_quic_parse_frame(ngx_quic_header_t *pkt, u_char *start, u_char *end, | 278 ssize_t ngx_quic_parse_frame(ngx_quic_header_t *pkt, u_char *start, u_char *end, |
271 ngx_quic_frame_t *frame); | 279 ngx_quic_frame_t *frame); |
272 ssize_t ngx_quic_create_frame(u_char *p, u_char *end, ngx_quic_frame_t *f); | 280 ssize_t ngx_quic_create_frame(u_char *p, ngx_quic_frame_t *f); |
273 | 281 |
274 ngx_int_t ngx_quic_parse_transport_params(u_char *p, u_char *end, | 282 ngx_int_t ngx_quic_parse_transport_params(u_char *p, u_char *end, |
275 ngx_quic_tp_t *tp, ngx_log_t *log); | 283 ngx_quic_tp_t *tp, ngx_log_t *log); |
276 ssize_t ngx_quic_create_transport_params(u_char *p, u_char *end, | 284 ssize_t ngx_quic_create_transport_params(u_char *p, u_char *end, |
277 ngx_quic_tp_t *tp); | 285 ngx_quic_tp_t *tp); |