Allow quic_client to override connection ID lengths
This'll help us debug interop issues with other implementations that use different connection ID lengths.
Tools-only change
PiperOrigin-RevId: 310983301
Change-Id: Ic30aed247e8999a7189a4783048e6ec821942aff
diff --git a/quic/tools/quic_client_base.cc b/quic/tools/quic_client_base.cc
index 4b51184..11edb19 100644
--- a/quic/tools/quic_client_base.cc
+++ b/quic/tools/quic_client_base.cc
@@ -37,7 +37,9 @@
connection_error_(QUIC_NO_ERROR),
connected_or_attempting_connect_(false),
network_helper_(std::move(network_helper)),
- connection_debug_visitor_(nullptr) {}
+ connection_debug_visitor_(nullptr),
+ server_connection_id_length_(kQuicDefaultConnectionIdLength),
+ client_connection_id_length_(0) {}
QuicClientBase::~QuicClientBase() = default;
@@ -306,11 +308,11 @@
}
QuicConnectionId QuicClientBase::GenerateNewConnectionId() {
- return QuicUtils::CreateRandomConnectionId();
+ return QuicUtils::CreateRandomConnectionId(server_connection_id_length_);
}
QuicConnectionId QuicClientBase::GetClientConnectionId() {
- return EmptyQuicConnectionId();
+ return QuicUtils::CreateRandomConnectionId(client_connection_id_length_);
}
bool QuicClientBase::CanReconnectWithDifferentVersion(
diff --git a/quic/tools/quic_client_base.h b/quic/tools/quic_client_base.h
index 6c1e09a..0a40b82 100644
--- a/quic/tools/quic_client_base.h
+++ b/quic/tools/quic_client_base.h
@@ -230,6 +230,14 @@
connection_debug_visitor_ = connection_debug_visitor;
}
+ void set_server_connection_id_length(uint8_t server_connection_id_length) {
+ server_connection_id_length_ = server_connection_id_length;
+ }
+
+ void set_client_connection_id_length(uint8_t client_connection_id_length) {
+ client_connection_id_length_ = client_connection_id_length;
+ }
+
protected:
// TODO(rch): Move GetNumSentClientHellosFromSession and
// GetNumReceivedServerConfigUpdatesFromSession into a new/better
@@ -352,6 +360,14 @@
// The debug visitor set on the connection right after it is constructed.
// Not owned, must be valid for the lifetime of the QuicClientBase instance.
QuicConnectionDebugVisitor* connection_debug_visitor_;
+
+ // GenerateNewConnectionId creates a random connection ID of this length.
+ // Defaults to 8.
+ uint8_t server_connection_id_length_;
+
+ // GetClientConnectionId creates a random connection ID of this length.
+ // Defaults to 0.
+ uint8_t client_connection_id_length_;
};
} // namespace quic
diff --git a/quic/tools/quic_toy_client.cc b/quic/tools/quic_toy_client.cc
index 5733e0b..0018f05 100644
--- a/quic/tools/quic_toy_client.cc
+++ b/quic/tools/quic_toy_client.cc
@@ -165,6 +165,16 @@
false,
"If true, do not change local port after each request.");
+DEFINE_QUIC_COMMAND_LINE_FLAG(int32_t,
+ server_connection_id_length,
+ -1,
+ "Length of the server connection ID used.");
+
+DEFINE_QUIC_COMMAND_LINE_FLAG(int32_t,
+ client_connection_id_length,
+ -1,
+ "Length of the client connection ID used.");
+
namespace quic {
QuicToyClient::QuicToyClient(ClientFactory* client_factory)
@@ -235,6 +245,16 @@
client->set_initial_max_packet_length(
initial_mtu != 0 ? initial_mtu : quic::kDefaultMaxPacketSize);
client->set_drop_response_body(GetQuicFlag(FLAGS_drop_response_body));
+ const int32_t server_connection_id_length =
+ GetQuicFlag(FLAGS_server_connection_id_length);
+ if (server_connection_id_length >= 0) {
+ client->set_server_connection_id_length(server_connection_id_length);
+ }
+ const int32_t client_connection_id_length =
+ GetQuicFlag(FLAGS_client_connection_id_length);
+ if (client_connection_id_length >= 0) {
+ client->set_client_connection_id_length(client_connection_id_length);
+ }
if (!client->Initialize()) {
std::cerr << "Failed to initialize client." << std::endl;
return 1;