Allow --host and url to refer to different hosts in quic_client_interop_test_bin

Occasionally it's useful to connect to a server with one hostname but use a
different hostname for the rest of the connection. This allows the host
specified by --host to determine what IP address to connect to, and the host
in the URL to determine what gets sent in SNI, :authority, and anywhere else
a hostname is used. If one of those two is missing, it will default to the
other.

Test tools only

PiperOrigin-RevId: 311444304
Change-Id: I7092e4031031dd41a816bf7befe0e67c5e35645d
diff --git a/quic/tools/quic_client_interop_test_bin.cc b/quic/tools/quic_client_interop_test_bin.cc
index c256161..803e313 100644
--- a/quic/tools/quic_client_interop_test_bin.cc
+++ b/quic/tools/quic_client_interop_test_bin.cc
@@ -262,7 +262,9 @@
   AttemptResumption(client.get());
 }
 
-std::set<Feature> ServerSupport(std::string host, int port) {
+std::set<Feature> ServerSupport(std::string dns_host,
+                                std::string url_host,
+                                int port) {
   // Enable IETF version support.
   QuicVersionInitializeSupportForIetfDraft();
   ParsedQuicVersion version = UnsupportedQuicVersion();
@@ -279,13 +281,13 @@
 
   // Build the client, and try to connect.
   QuicSocketAddress addr =
-      tools::LookupAddress(host, quiche::QuicheStrCat(port));
+      tools::LookupAddress(dns_host, quiche::QuicheStrCat(port));
   if (!addr.IsInitialized()) {
-    QUIC_LOG(ERROR) << "Failed to resolve " << host;
+    QUIC_LOG(ERROR) << "Failed to resolve " << dns_host;
     return std::set<Feature>();
   }
-  QuicServerId server_id(host, port, false);
-  std::string authority = quiche::QuicheStrCat(host, ":", port);
+  QuicServerId server_id(url_host, port, false);
+  std::string authority = quiche::QuicheStrCat(url_host, ":", port);
 
   QuicClientInteropRunner runner;
 
@@ -308,13 +310,15 @@
     quic::QuicPrintCommandLineFlagHelp(usage);
     exit(1);
   }
-  std::string host = GetQuicFlag(FLAGS_host);
+  std::string dns_host = GetQuicFlag(FLAGS_host);
+  std::string url_host = "";
   int port = GetQuicFlag(FLAGS_port);
 
   if (!args.empty()) {
     quic::QuicUrl url(args[0], "https");
-    if (host.empty()) {
-      host = url.host();
+    url_host = url.host();
+    if (dns_host.empty()) {
+      dns_host = url_host;
     }
     if (port == 0) {
       port = url.port();
@@ -323,13 +327,16 @@
   if (port == 0) {
     port = 443;
   }
-  if (host.empty()) {
+  if (dns_host.empty()) {
     quic::QuicPrintCommandLineFlagHelp(usage);
     exit(1);
   }
+  if (url_host.empty()) {
+    url_host = dns_host;
+  }
 
-  auto supported_features = quic::ServerSupport(host, port);
-  std::cout << "Results for " << host << ":" << port << std::endl;
+  auto supported_features = quic::ServerSupport(dns_host, url_host, port);
+  std::cout << "Results for " << url_host << ":" << port << std::endl;
   int current_row = 1;
   for (auto feature : supported_features) {
     if (current_row < 2 && feature >= quic::Feature::kRebinding) {