mirror of
https://github.com/nginx/nginx.git
synced 2024-11-21 16:28:40 +00:00
QUIC: fixed using of retired connection id (ticket #2289).
RFC 9000 19.16 The sequence number specified in a RETIRE_CONNECTION_ID frame MUST NOT refer to the Destination Connection ID field of the packet in which the frame is contained. Before the patch, the RETIRE_CONNECTION_ID frame was sent before switching to the new client id. If retired client id was currently in use, this lead to violation of the spec.
This commit is contained in:
parent
e6949057ea
commit
ea55dbccb2
@ -77,6 +77,7 @@ ngx_int_t
|
||||
ngx_quic_handle_new_connection_id_frame(ngx_connection_t *c,
|
||||
ngx_quic_new_conn_id_frame_t *f)
|
||||
{
|
||||
uint64_t seq;
|
||||
ngx_str_t id;
|
||||
ngx_queue_t *q;
|
||||
ngx_quic_client_id_t *cid, *item;
|
||||
@ -173,10 +174,7 @@ retire:
|
||||
}
|
||||
|
||||
/* this connection id must be retired */
|
||||
|
||||
if (ngx_quic_send_retire_connection_id(c, cid->seqnum) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
seq = cid->seqnum;
|
||||
|
||||
if (cid->refcnt) {
|
||||
/* we are going to retire client id which is in use */
|
||||
@ -187,6 +185,10 @@ retire:
|
||||
} else {
|
||||
ngx_quic_unref_client_id(c, cid);
|
||||
}
|
||||
|
||||
if (ngx_quic_send_retire_connection_id(c, seq) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
|
Loading…
Reference in New Issue
Block a user