Add flag --ip_version_for_host_lookup to quic_client to indicate the preferred IP version of host address, if host lookup is needed. PiperOrigin-RevId: 333753224 Change-Id: I4333bb7bdfdafe592410458718f571c35f8d9abe
diff --git a/quic/tools/quic_client.cc b/quic/tools/quic_client.cc index a9a9320..16499d2 100644 --- a/quic/tools/quic_client.cc +++ b/quic/tools/quic_client.cc
@@ -32,9 +32,12 @@ namespace tools { -QuicSocketAddress LookupAddress(std::string host, std::string port) { +QuicSocketAddress LookupAddress(int address_family_for_lookup, + std::string host, + std::string port) { addrinfo hint; memset(&hint, 0, sizeof(hint)); + hint.ai_family = address_family_for_lookup; hint.ai_protocol = IPPROTO_UDP; addrinfo* info_list = nullptr;
diff --git a/quic/tools/quic_client.h b/quic/tools/quic_client.h index 7ce795d..ff01cec 100644 --- a/quic/tools/quic_client.h +++ b/quic/tools/quic_client.h
@@ -31,7 +31,13 @@ namespace tools { -QuicSocketAddress LookupAddress(std::string host, std::string port); +QuicSocketAddress LookupAddress(int address_family_for_lookup, + std::string host, + std::string port); + +inline QuicSocketAddress LookupAddress(std::string host, std::string port) { + return LookupAddress(0, host, port); +} } // namespace tools
diff --git a/quic/tools/quic_epoll_client_factory.cc b/quic/tools/quic_epoll_client_factory.cc index 38dc582..b7dbb07 100644 --- a/quic/tools/quic_epoll_client_factory.cc +++ b/quic/tools/quic_epoll_client_factory.cc
@@ -20,12 +20,13 @@ std::unique_ptr<QuicSpdyClientBase> QuicEpollClientFactory::CreateClient( std::string host_for_handshake, std::string host_for_lookup, + int address_family_for_lookup, uint16_t port, ParsedQuicVersionVector versions, const QuicConfig& config, std::unique_ptr<ProofVerifier> verifier) { - QuicSocketAddress addr = - tools::LookupAddress(host_for_lookup, quiche::QuicheStrCat(port)); + QuicSocketAddress addr = tools::LookupAddress( + address_family_for_lookup, host_for_lookup, quiche::QuicheStrCat(port)); if (!addr.IsInitialized()) { QUIC_LOG(ERROR) << "Unable to resolve address: " << host_for_lookup; return nullptr;
diff --git a/quic/tools/quic_epoll_client_factory.h b/quic/tools/quic_epoll_client_factory.h index 392bd6c..84dbc98 100644 --- a/quic/tools/quic_epoll_client_factory.h +++ b/quic/tools/quic_epoll_client_factory.h
@@ -16,6 +16,7 @@ std::unique_ptr<QuicSpdyClientBase> CreateClient( std::string host_for_handshake, std::string host_for_lookup, + int address_family_for_lookup, uint16_t port, ParsedQuicVersionVector versions, const QuicConfig& config,
diff --git a/quic/tools/quic_toy_client.cc b/quic/tools/quic_toy_client.cc index b42f967..3bd5834 100644 --- a/quic/tools/quic_toy_client.cc +++ b/quic/tools/quic_toy_client.cc
@@ -41,6 +41,7 @@ // instructions at go/quic_client_binary_update #include "net/third_party/quiche/src/quic/tools/quic_toy_client.h" +#include <sys/socket.h> #include <iostream> #include <memory> @@ -78,6 +79,12 @@ DEFINE_QUIC_COMMAND_LINE_FLAG(int32_t, port, 0, "The port to connect to."); DEFINE_QUIC_COMMAND_LINE_FLAG(std::string, + ip_version_for_host_lookup, + "", + "Only used if host address lookup is needed. " + "4=ipv4; 6=ipv6; otherwise=don't care."); + +DEFINE_QUIC_COMMAND_LINE_FLAG(std::string, body, "", "If set, send a POST with this body."); @@ -259,9 +266,17 @@ ParseQuicTagVector(client_connection_options_string)); } + int address_family_for_lookup = AF_UNSPEC; + if (GetQuicFlag(FLAGS_ip_version_for_host_lookup) == "4") { + address_family_for_lookup = AF_INET; + } else if (GetQuicFlag(FLAGS_ip_version_for_host_lookup) == "6") { + address_family_for_lookup = AF_INET6; + } + // Build the client, and try to connect. std::unique_ptr<QuicSpdyClientBase> client = client_factory_->CreateClient( - url.host(), host, port, versions, config, std::move(proof_verifier)); + url.host(), host, address_family_for_lookup, port, versions, config, + std::move(proof_verifier)); if (client == nullptr) { std::cerr << "Failed to create client." << std::endl;
diff --git a/quic/tools/quic_toy_client.h b/quic/tools/quic_toy_client.h index d9d8eca..bf56bf8 100644 --- a/quic/tools/quic_toy_client.h +++ b/quic/tools/quic_toy_client.h
@@ -24,6 +24,8 @@ virtual std::unique_ptr<QuicSpdyClientBase> CreateClient( std::string host_for_handshake, std::string host_for_lookup, + // AF_INET, AF_INET6, or AF_UNSPEC(=don't care). + int address_family_for_lookup, uint16_t port, ParsedQuicVersionVector versions, const QuicConfig& config,