diff options
Diffstat (limited to 'chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager.cc')
-rw-r--r-- | chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager.cc | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager.cc b/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager.cc index 17f7a725cd3..a3909f3109b 100644 --- a/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager.cc +++ b/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager.cc @@ -11,6 +11,7 @@ #include "quiche/quic/core/quic_error_codes.h" #include "quiche/quic/core/quic_utils.h" #include "quiche/quic/platform/api/quic_flag_utils.h" +#include "quiche/quic/platform/api/quic_flags.h" #include "quiche/common/platform/api/quiche_logging.h" namespace quic { @@ -278,7 +279,7 @@ QuicSelfIssuedConnectionIdManager::QuicSelfIssuedConnectionIdManager( const QuicConnectionId& initial_connection_id, const QuicClock* clock, QuicAlarmFactory* alarm_factory, QuicConnectionIdManagerVisitorInterface* visitor, - QuicConnectionContext* context) + QuicConnectionContext* context, ConnectionIdGeneratorInterface& generator) : active_connection_id_limit_(active_connection_id_limit), clock_(clock), visitor_(visitor), @@ -286,7 +287,8 @@ QuicSelfIssuedConnectionIdManager::QuicSelfIssuedConnectionIdManager( new RetireSelfIssuedConnectionIdAlarmDelegate(this, context))), last_connection_id_(initial_connection_id), next_connection_id_sequence_number_(1u), - last_connection_id_consumed_by_self_sequence_number_(0u) { + last_connection_id_consumed_by_self_sequence_number_(0u), + connection_id_generator_(generator) { active_connection_ids_.emplace_back(initial_connection_id, 0u); } @@ -303,18 +305,33 @@ absl::optional<QuicNewConnectionIdFrame> QuicSelfIssuedConnectionIdManager::MaybeIssueNewConnectionId() { const bool check_cid_collision_when_issue_new_cid = GetQuicReloadableFlag(quic_check_cid_collision_when_issue_new_cid); - QuicConnectionId new_cid = GenerateNewConnectionId(last_connection_id_); + absl::optional<QuicConnectionId> new_cid; + if (GetQuicReloadableFlag( + quic_connection_uses_abstract_connection_id_generator)) { + QUIC_RELOADABLE_FLAG_COUNT( + quic_connection_uses_abstract_connection_id_generator); + new_cid = + connection_id_generator_.GenerateNextConnectionId(last_connection_id_); + } else { + new_cid = GenerateNewConnectionId(last_connection_id_); + } + if (!new_cid.has_value()) { + QUIC_BUG_IF(quic_bug_469887433_1, + !GetQuicReloadableFlag( + quic_connection_uses_abstract_connection_id_generator)); + return {}; + } if (check_cid_collision_when_issue_new_cid) { QUIC_RELOADABLE_FLAG_COUNT_N(quic_check_cid_collision_when_issue_new_cid, 1, 2); - if (!visitor_->MaybeReserveConnectionId(new_cid)) { + if (!visitor_->MaybeReserveConnectionId(*new_cid)) { QUIC_RELOADABLE_FLAG_COUNT_N(quic_check_cid_collision_when_issue_new_cid, 2, 2); return {}; } } QuicNewConnectionIdFrame frame; - frame.connection_id = new_cid; + frame.connection_id = *new_cid; frame.sequence_number = next_connection_id_sequence_number_++; frame.stateless_reset_token = QuicUtils::GenerateStatelessResetToken(frame.connection_id); |