summaryrefslogtreecommitdiff
path: root/chromium/net/third_party/quiche/src/quiche/quic/core/quic_connection_id_manager.cc
diff options
context:
space:
mode:
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.cc27
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);