Add QUIC connection options for testing:
- CHP1: Add 1-packet padding to CHLO.
- CHP2: Add 2-packet padding to CHLO.
PiperOrigin-RevId: 681031206
diff --git a/quiche/quic/core/crypto/crypto_protocol.h b/quiche/quic/core/crypto/crypto_protocol.h
index d76547d..48e98d5 100644
--- a/quiche/quic/core/crypto/crypto_protocol.h
+++ b/quiche/quic/core/crypto/crypto_protocol.h
@@ -472,6 +472,10 @@
// Universal tags
const QuicTag kPAD = TAG('P', 'A', 'D', '\0'); // Padding
+// Client Hello Padding tags, for experiments.
+const QuicTag kCHP1 = TAG('C', 'H', 'P', '1'); // 1-packet padding to CHLO.
+const QuicTag kCHP2 = TAG('C', 'H', 'P', '2'); // 2-packet padding to CHLO.
+
// Stats collection tags
const QuicTag kEPID = TAG('E', 'P', 'I', 'D'); // Endpoint identifier.
diff --git a/quiche/quic/core/http/end_to_end_test.cc b/quiche/quic/core/http/end_to_end_test.cc
index 452586c..8732d4b 100644
--- a/quiche/quic/core/http/end_to_end_test.cc
+++ b/quiche/quic/core/http/end_to_end_test.cc
@@ -1211,8 +1211,7 @@
TEST_P(EndToEndTest, TestDispatcherAckWithTwoPacketCHLO) {
SetQuicFlag(quic_allow_chlo_buffering, true);
SetQuicFlag(quic_dispatcher_max_ack_sent_per_connection, 1);
- std::string google_handshake_message(kEthernetMTU, 'a');
- client_config_.SetGoogleHandshakeMessageToSend(google_handshake_message);
+ client_extra_copts_.push_back(kCHP1);
ASSERT_TRUE(Initialize());
if (!version_.HasIetfQuicFrames()) {
return;
@@ -1359,8 +1358,7 @@
TEST_P(EndToEndTest, TestDispatcherAckWithThreePacketCHLO) {
SetQuicFlag(quic_allow_chlo_buffering, true);
SetQuicFlag(quic_dispatcher_max_ack_sent_per_connection, 2);
- std::string google_handshake_message(2 * kEthernetMTU, 'a');
- client_config_.SetGoogleHandshakeMessageToSend(google_handshake_message);
+ client_extra_copts_.push_back(kCHP2);
ASSERT_TRUE(Initialize());
if (!version_.HasIetfQuicFrames()) {
return;
diff --git a/quiche/quic/core/quic_session.cc b/quiche/quic/core/quic_session.cc
index 66d8935..afdb44b 100644
--- a/quiche/quic/core/quic_session.cc
+++ b/quiche/quic/core/quic_session.cc
@@ -172,6 +172,15 @@
connection_->SetSessionNotifier(this);
connection_->SetDataProducer(this);
connection_->SetUnackedMapInitialCapacity();
+ if (perspective_ == Perspective::IS_CLIENT) {
+ if (config_.HasClientSentConnectionOption(kCHP1, perspective_)) {
+ config_.SetGoogleHandshakeMessageToSend(
+ std::string(kDefaultMaxPacketSize, '0'));
+ } else if (config_.HasClientSentConnectionOption(kCHP2, perspective_)) {
+ config_.SetGoogleHandshakeMessageToSend(
+ std::string(kDefaultMaxPacketSize * 2, '0'));
+ }
+ }
connection_->SetFromConfig(config_);
if (perspective_ == Perspective::IS_CLIENT) {
if (config_.HasClientRequestedIndependentOption(kAFFE, perspective_) &&
@@ -1862,6 +1871,11 @@
MaybeSendAddressToken();
}
}
+ if (perspective_ == Perspective::IS_CLIENT &&
+ (config_.HasClientSentConnectionOption(kCHP1, perspective_) ||
+ config_.HasClientSentConnectionOption(kCHP2, perspective_))) {
+ config_.ClearGoogleHandshakeMessage();
+ }
}
bool QuicSession::MaybeSendAddressToken() {