Mercurial > hg > nginx-quic
diff src/event/ngx_event_quic_transport.h @ 7774: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 |
line wrap: on
line diff
--- a/src/event/ngx_event_quic_transport.h +++ b/src/event/ngx_event_quic_transport.h @@ -97,7 +97,6 @@ typedef struct { - ngx_uint_t pn; uint64_t largest; uint64_t delay; uint64_t range_count; @@ -204,7 +203,13 @@ typedef struct ngx_quic_frame_s struct ngx_quic_frame_s { ngx_uint_t type; enum ssl_encryption_level_t level; - ngx_quic_frame_t *next; + ngx_queue_t queue; + uint64_t pnum; + ngx_msec_t first; + ngx_msec_t last; + ngx_uint_t need_ack; + /* unsigned need_ack:1; */ + u_char *data; union { ngx_quic_ack_frame_t ack; @@ -250,6 +255,9 @@ typedef struct { uint64_t pn; u_char *plaintext; ngx_str_t payload; /* decrypted data */ + + ngx_uint_t need_ack; + /* unsigned need_ack:1; */ } ngx_quic_header_t; @@ -269,7 +277,7 @@ ngx_int_t ngx_quic_parse_handshake_heade ssize_t ngx_quic_parse_frame(ngx_quic_header_t *pkt, u_char *start, u_char *end, ngx_quic_frame_t *frame); -ssize_t ngx_quic_create_frame(u_char *p, u_char *end, ngx_quic_frame_t *f); +ssize_t ngx_quic_create_frame(u_char *p, ngx_quic_frame_t *f); ngx_int_t ngx_quic_parse_transport_params(u_char *p, u_char *end, ngx_quic_tp_t *tp, ngx_log_t *log);