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