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();