Allow QUIC applications to access path validation context and explicitly cancel path validation.
This will allow Chrome to avoid double probing and handle packet writer error properly.
PiperOrigin-RevId: 347647587
Change-Id: If099f6045f08f27f905b6f9dc2e26d25f8f2f0ee
diff --git a/quic/core/quic_connection.cc b/quic/core/quic_connection.cc
index 1a39ec5..1599d10 100644
--- a/quic/core/quic_connection.cc
+++ b/quic/core/quic_connection.cc
@@ -4000,7 +4000,7 @@
// Cancel the alarms so they don't trigger any action now that the
// connection is closed.
CancelAllAlarms();
- path_validator_.CancelPathValidation();
+ CancelPathValidation();
}
void QuicConnection::CancelAllAlarms() {
@@ -5447,6 +5447,14 @@
return path_validator_.HasPendingPathValidation();
}
+QuicPathValidationContext* QuicConnection::GetPathValidationContext() const {
+ return path_validator_.GetContext();
+}
+
+void QuicConnection::CancelPathValidation() {
+ path_validator_.CancelPathValidation();
+}
+
void QuicConnection::MigratePath(const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address,
QuicPacketWriter* writer,
diff --git a/quic/core/quic_connection.h b/quic/core/quic_connection.h
index 3424735..f272a6a 100644
--- a/quic/core/quic_connection.h
+++ b/quic/core/quic_connection.h
@@ -1156,6 +1156,10 @@
bool HasPendingPathValidation() const;
+ QuicPathValidationContext* GetPathValidationContext() const;
+
+ void CancelPathValidation();
+
void MigratePath(const QuicSocketAddress& self_address,
const QuicSocketAddress& peer_address,
QuicPacketWriter* writer,
diff --git a/quic/core/quic_path_validator.cc b/quic/core/quic_path_validator.cc
index e24e053..fe9e046 100644
--- a/quic/core/quic_path_validator.cc
+++ b/quic/core/quic_path_validator.cc
@@ -94,6 +94,10 @@
return path_context_ != nullptr;
}
+QuicPathValidationContext* QuicPathValidator::GetContext() const {
+ return path_context_.get();
+}
+
const QuicPathFrameBuffer& QuicPathValidator::GeneratePathChallengePayload() {
probing_data_.push_back(QuicPathFrameBuffer());
random_->RandBytes(probing_data_.back().data(), sizeof(QuicPathFrameBuffer));
diff --git a/quic/core/quic_path_validator.h b/quic/core/quic_path_validator.h
index 2f30579..b9c9c5d 100644
--- a/quic/core/quic_path_validator.h
+++ b/quic/core/quic_path_validator.h
@@ -106,6 +106,8 @@
bool HasPendingPathValidation() const;
+ QuicPathValidationContext* GetContext() const;
+
// Send another PATH_CHALLENGE on the same path. After retrying
// |kMaxRetryTimes| times, fail the current path validation.
void OnRetryTimeout();