diff options
Diffstat (limited to 'chromium/net/third_party/quiche/src/quic/core/quic_connection_id_manager.h')
-rw-r--r-- | chromium/net/third_party/quiche/src/quic/core/quic_connection_id_manager.h | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/chromium/net/third_party/quiche/src/quic/core/quic_connection_id_manager.h b/chromium/net/third_party/quiche/src/quic/core/quic_connection_id_manager.h index b933a69f158..5e7fc8ccf72 100644 --- a/chromium/net/third_party/quiche/src/quic/core/quic_connection_id_manager.h +++ b/chromium/net/third_party/quiche/src/quic/core/quic_connection_id_manager.h @@ -13,6 +13,7 @@ #include <cstddef> #include <memory> +#include "absl/types/optional.h" #include "quic/core/frames/quic_new_connection_id_frame.h" #include "quic/core/frames/quic_retire_connection_id_frame.h" #include "quic/core/quic_alarm.h" @@ -68,13 +69,19 @@ class QUIC_EXPORT_PRIVATE QuicPeerIssuedConnectionIdManager { QuicErrorCode OnNewConnectionIdFrame(const QuicNewConnectionIdFrame& frame, std::string* error_detail); + bool HasUnusedConnectionId() const { + return !unused_connection_id_data_.empty(); + } + // Returns the data associated with an unused connection Id. After the call, // the Id is marked as used. Returns nullptr if there is no unused connection // Id. const QuicConnectionIdData* ConsumeOneUnusedConnectionId(); - // Add the connection Id to the pending retirement connection Id list. - void PrepareToRetireActiveConnectionId(const QuicConnectionId& cid); + // Add each active connection Id that is no longer on path to the pending + // retirement connection Id list. + void MaybeRetireUnusedConnectionIds( + const std::vector<QuicConnectionId>& active_connection_ids_on_path); bool IsConnectionIdActive(const QuicConnectionId& cid) const; @@ -90,6 +97,10 @@ class QUIC_EXPORT_PRIVATE QuicPeerIssuedConnectionIdManager { private: friend class test::QuicConnectionIdManagerPeer; + // Add the connection Id to the pending retirement connection Id list and + // schedule an alarm if needed. + void PrepareToRetireActiveConnectionId(const QuicConnectionId& cid); + bool IsConnectionIdNew(const QuicNewConnectionIdFrame& frame); void PrepareToRetireConnectionIdPriorTo( @@ -135,6 +146,17 @@ class QUIC_EXPORT_PRIVATE QuicSelfIssuedConnectionIdManager { // Sends new connection IDs if more can be sent. void MaybeSendNewConnectionIds(); + // The two functions are called on the client side to associate a client + // connection ID with a new probing/migration path when client uses + // non-empty connection ID. + bool HasConnectionIdToConsume() const; + absl::optional<QuicConnectionId> ConsumeOneConnectionId(); + + // Returns true if the given connection ID is issued by the + // QuicSelfIssuedConnectionIdManager and not retired locally yet. Called to + // tell if a received packet has a valid connection ID. + bool IsConnectionIdInUse(const QuicConnectionId& cid) const; + virtual QuicConnectionId GenerateNewConnectionId( const QuicConnectionId& old_connection_id) const; @@ -162,6 +184,8 @@ class QUIC_EXPORT_PRIVATE QuicSelfIssuedConnectionIdManager { // State of the last issued connection Id. QuicConnectionId last_connection_id_; uint64_t next_connection_id_sequence_number_; + // The sequence number of last connection ID consumed. + uint64_t last_connection_id_consumed_by_self_sequence_number_; }; } // namespace quic |