From b55f57b820d4a6cc5968feb0edf39d30d5aac729 Mon Sep 17 00:00:00 2001 From: Masakazu Kitajo Date: Fri, 21 Aug 2020 16:17:02 +0900 Subject: [PATCH] Don't make an error on duplicated RETIRE_CONNECTION frames --- iocore/net/quic/QUICAltConnectionManager.cc | 9 ++++----- iocore/net/quic/QUICAltConnectionManager.h | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/iocore/net/quic/QUICAltConnectionManager.cc b/iocore/net/quic/QUICAltConnectionManager.cc index f1cb4078af7..5226a1deefa 100644 --- a/iocore/net/quic/QUICAltConnectionManager.cc +++ b/iocore/net/quic/QUICAltConnectionManager.cc @@ -135,18 +135,15 @@ QUICAltConnectionManager::_init_alt_connection_ids() this->_need_advertise = true; } -bool +void QUICAltConnectionManager::_update_alt_connection_id(uint64_t chosen_seq_num) { for (int i = 0; i < this->_remote_active_cid_limit; ++i) { if (this->_alt_quic_connection_ids_local[i].seq_num == chosen_seq_num) { this->_alt_quic_connection_ids_local[i] = this->_generate_next_alt_con_info(); this->_need_advertise = true; - return true; } } - - return false; } QUICConnectionErrorUPtr @@ -184,9 +181,11 @@ QUICAltConnectionManager::_retire_remote_connection_id(const QUICRetireConnectio { QUICConnectionErrorUPtr error = nullptr; - if (!this->_update_alt_connection_id(frame.seq_num())) { + if (frame.seq_num() > this->_alt_quic_connection_id_seq_num) { error = std::make_unique(QUICTransErrorCode::PROTOCOL_VIOLATION, "received unused sequence number", QUICFrameType::RETIRE_CONNECTION_ID); + } else { + this->_update_alt_connection_id(frame.seq_num()); } return error; } diff --git a/iocore/net/quic/QUICAltConnectionManager.h b/iocore/net/quic/QUICAltConnectionManager.h index 6c559328179..ade5f8942d9 100644 --- a/iocore/net/quic/QUICAltConnectionManager.h +++ b/iocore/net/quic/QUICAltConnectionManager.h @@ -110,7 +110,7 @@ class QUICAltConnectionManager : public QUICFrameHandler, public QUICFrameGenera AltConnectionInfo _generate_next_alt_con_info(); void _init_alt_connection_ids(); - bool _update_alt_connection_id(uint64_t chosen_seq_num); + void _update_alt_connection_id(uint64_t chosen_seq_num); void _records_new_connection_id_frame(QUICEncryptionLevel level, const QUICNewConnectionIdFrame &frame); void _records_retire_connection_id_frame(QUICEncryptionLevel, const QUICRetireConnectionIdFrame &frame);