Replace direct calls to Quic*AddressImpl() with helper methods

[email protected]

Change-Id: I9860fcc880bc1c8a4ceaf94c80dddef69ce383aa
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1637665
Reviewed-by: Ryan Hamilton <[email protected]>
Commit-Queue: Victor Vasiliev <[email protected]>
Cr-Commit-Position: refs/heads/master@{#665161}
diff --git a/net/quic/address_utils.h b/net/quic/address_utils.h
index f067db7..c6314ce 100644
--- a/net/quic/address_utils.h
+++ b/net/quic/address_utils.h
@@ -1,3 +1,7 @@
+// Copyright (c) 2019 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
 #ifndef NET_QUIC_ADDRESS_UTILS_H_
 #define NET_QUIC_ADDRESS_UTILS_H_
 
@@ -43,6 +47,39 @@
   }
 }
 
+inline quic::QuicSocketAddress ToQuicSocketAddress(IPEndPoint address) {
+  if (address.address().empty()) {
+    return quic::QuicSocketAddress();
+  }
+
+  sockaddr_storage result;
+  socklen_t size = sizeof(result);
+  bool success =
+      address.ToSockAddr(reinterpret_cast<sockaddr*>(&result), &size);
+  DCHECK(success);
+  return quic::QuicSocketAddress(result);
+}
+
+inline quic::QuicIpAddress ToQuicIpAddress(net::IPAddress address) {
+  if (address.IsIPv4()) {
+    in_addr result;
+    static_assert(sizeof(result) == IPAddress::kIPv4AddressSize,
+                  "Address size mismatch");
+    memcpy(&result, address.bytes().data(), IPAddress::kIPv4AddressSize);
+    return quic::QuicIpAddress(result);
+  }
+  if (address.IsIPv6()) {
+    in6_addr result;
+    static_assert(sizeof(result) == IPAddress::kIPv6AddressSize,
+                  "Address size mismatch");
+    memcpy(&result, address.bytes().data(), IPAddress::kIPv6AddressSize);
+    return quic::QuicIpAddress(result);
+  }
+
+  DCHECK(address.empty());
+  return quic::QuicIpAddress();
+}
+
 }  // namespace net
 
 #endif  // NET_QUIC_ADDRESS_UTILS_H_
diff --git a/net/quic/bidirectional_stream_quic_impl_unittest.cc b/net/quic/bidirectional_stream_quic_impl_unittest.cc
index 3256fa844..cb3561e 100644
--- a/net/quic/bidirectional_stream_quic_impl_unittest.cc
+++ b/net/quic/bidirectional_stream_quic_impl_unittest.cc
@@ -23,6 +23,7 @@
 #include "net/log/net_log_event_type.h"
 #include "net/log/test_net_log.h"
 #include "net/log/test_net_log_util.h"
+#include "net/quic/address_utils.h"
 #include "net/quic/mock_crypto_client_stream_factory.h"
 #include "net/quic/quic_chromium_alarm_factory.h"
 #include "net/quic/quic_chromium_connection_helper.h"
@@ -462,10 +463,8 @@
   }
 
   void ProcessPacket(std::unique_ptr<quic::QuicReceivedPacket> packet) {
-    connection_->ProcessUdpPacket(
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(self_addr_)),
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(peer_addr_)),
-        *packet);
+    connection_->ProcessUdpPacket(ToQuicSocketAddress(self_addr_),
+                                  ToQuicSocketAddress(peer_addr_), *packet);
   }
 
   // Configures the test fixture to use the list of expected writes.
@@ -494,9 +493,8 @@
         new QuicChromiumConnectionHelper(&clock_, &random_generator_));
     alarm_factory_.reset(new QuicChromiumAlarmFactory(runner_.get(), &clock_));
     connection_ = new quic::QuicConnection(
-        connection_id_,
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(peer_addr_)),
-        helper_.get(), alarm_factory_.get(),
+        connection_id_, ToQuicSocketAddress(peer_addr_), helper_.get(),
+        alarm_factory_.get(),
         new QuicChromiumPacketWriter(socket.get(), runner_.get()),
         true /* owns_writer */, quic::Perspective::IS_CLIENT,
         quic::test::SupportedVersions(version_));
diff --git a/net/quic/quic_chromium_client_session_test.cc b/net/quic/quic_chromium_client_session_test.cc
index 8e3f623..5cc15a2 100644
--- a/net/quic/quic_chromium_client_session_test.cc
+++ b/net/quic/quic_chromium_client_session_test.cc
@@ -20,6 +20,7 @@
 #include "net/http/transport_security_state_test_util.h"
 #include "net/log/net_log_source.h"
 #include "net/log/test_net_log.h"
+#include "net/quic/address_utils.h"
 #include "net/quic/crypto/proof_verifier_chromium.h"
 #include "net/quic/mock_crypto_client_stream_factory.h"
 #include "net/quic/mock_quic_data.h"
@@ -138,8 +139,8 @@
         socket.get(), base::ThreadTaskRunnerHandle::Get().get());
     quic::QuicConnection* connection = new quic::QuicConnection(
         quic::QuicUtils::CreateRandomConnectionId(&random_),
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(kIpEndPoint)),
-        &helper_, &alarm_factory_, writer, true, quic::Perspective::IS_CLIENT,
+        ToQuicSocketAddress(kIpEndPoint), &helper_, &alarm_factory_, writer,
+        true, quic::Perspective::IS_CLIENT,
         quic::test::SupportedVersions(version_));
     session_.reset(new TestingQuicChromiumClientSession(
         connection, std::move(socket),
diff --git a/net/quic/quic_chromium_packet_reader.cc b/net/quic/quic_chromium_packet_reader.cc
index 36083a43..4f7ec5b 100644
--- a/net/quic/quic_chromium_packet_reader.cc
+++ b/net/quic/quic_chromium_packet_reader.cc
@@ -10,6 +10,7 @@
 #include "base/single_thread_task_runner.h"
 #include "base/threading/thread_task_runner_handle.h"
 #include "net/base/net_errors.h"
+#include "net/quic/address_utils.h"
 #include "net/third_party/quiche/src/quic/platform/api/quic_clock.h"
 
 namespace net {
@@ -93,10 +94,8 @@
   IPEndPoint peer_address;
   socket_->GetLocalAddress(&local_address);
   socket_->GetPeerAddress(&peer_address);
-  return visitor_->OnPacket(
-      packet,
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(local_address)),
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(peer_address)));
+  return visitor_->OnPacket(packet, ToQuicSocketAddress(local_address),
+                            ToQuicSocketAddress(peer_address));
 }
 
 void QuicChromiumPacketReader::OnReadComplete(int result) {
diff --git a/net/quic/quic_connectivity_probing_manager_test.cc b/net/quic/quic_connectivity_probing_manager_test.cc
index 2d4f7fe0..45d12ef4 100644
--- a/net/quic/quic_connectivity_probing_manager_test.cc
+++ b/net/quic/quic_connectivity_probing_manager_test.cc
@@ -7,6 +7,7 @@
 #include "base/stl_util.h"
 #include "base/test/test_mock_time_task_runner.h"
 #include "net/log/test_net_log.h"
+#include "net/quic/address_utils.h"
 #include "net/socket/socket_test_util.h"
 #include "net/test/gtest_util.h"
 #include "net/third_party/quiche/src/quic/test_tools/mock_clock.h"
@@ -26,12 +27,12 @@
 const IPEndPoint kIpEndPoint =
     IPEndPoint(IPAddress::IPv4AllZeros(), quic::test::kTestPort);
 const quic::QuicSocketAddress testPeerAddress =
-    quic::QuicSocketAddress(quic::QuicSocketAddressImpl(kIpEndPoint));
+    ToQuicSocketAddress(kIpEndPoint);
 
 const IPEndPoint newIpEndPoint =
     IPEndPoint(IPAddress::IPv4AllZeros(), quic::test::kTestPort + 1);
 const quic::QuicSocketAddress newPeerAddress =
-    quic::QuicSocketAddress(quic::QuicSocketAddressImpl(newIpEndPoint));
+    ToQuicSocketAddress(newIpEndPoint);
 }  // anonymous namespace
 
 class MockQuicChromiumClientSession
@@ -102,8 +103,7 @@
     EXPECT_THAT(socket_->Connect(kIpEndPoint), IsOk());
     IPEndPoint self_address;
     socket_->GetLocalAddress(&self_address);
-    self_address_ =
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(self_address));
+    self_address_ = ToQuicSocketAddress(self_address);
     // Create packet writer and reader for probing.
     writer_.reset(
         new QuicChromiumPacketWriter(socket_.get(), test_task_runner_.get()));
diff --git a/net/quic/quic_http_stream_test.cc b/net/quic/quic_http_stream_test.cc
index 5138485..f794486 100644
--- a/net/quic/quic_http_stream_test.cc
+++ b/net/quic/quic_http_stream_test.cc
@@ -29,6 +29,7 @@
 #include "net/log/net_log_event_type.h"
 #include "net/log/test_net_log.h"
 #include "net/log/test_net_log_util.h"
+#include "net/quic/address_utils.h"
 #include "net/quic/crypto/proof_verifier_chromium.h"
 #include "net/quic/mock_crypto_client_stream_factory.h"
 #include "net/quic/quic_chromium_alarm_factory.h"
@@ -91,15 +92,14 @@
                      QuicChromiumConnectionHelper* helper,
                      QuicChromiumAlarmFactory* alarm_factory,
                      quic::QuicPacketWriter* writer)
-      : quic::QuicConnection(
-            connection_id,
-            quic::QuicSocketAddress(quic::QuicSocketAddressImpl(address)),
-            helper,
-            alarm_factory,
-            writer,
-            true /* owns_writer */,
-            quic::Perspective::IS_CLIENT,
-            versions) {}
+      : quic::QuicConnection(connection_id,
+                             ToQuicSocketAddress(address),
+                             helper,
+                             alarm_factory,
+                             writer,
+                             true /* owns_writer */,
+                             quic::Perspective::IS_CLIENT,
+                             versions) {}
 
   void SetSendAlgorithm(quic::SendAlgorithmInterface* send_algorithm) {
     quic::test::QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm);
@@ -249,10 +249,8 @@
   }
 
   void ProcessPacket(std::unique_ptr<quic::QuicReceivedPacket> packet) {
-    connection_->ProcessUdpPacket(
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(self_addr_)),
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(peer_addr_)),
-        *packet);
+    connection_->ProcessUdpPacket(ToQuicSocketAddress(self_addr_),
+                                  ToQuicSocketAddress(peer_addr_), *packet);
   }
 
   // Configures the test fixture to use the list of expected writes.
diff --git a/net/quic/quic_proxy_client_socket_unittest.cc b/net/quic/quic_proxy_client_socket_unittest.cc
index 9f3b438..d0d1ffb8 100644
--- a/net/quic/quic_proxy_client_socket_unittest.cc
+++ b/net/quic/quic_proxy_client_socket_unittest.cc
@@ -22,6 +22,7 @@
 #include "net/http/transport_security_state.h"
 #include "net/log/test_net_log.h"
 #include "net/log/test_net_log_util.h"
+#include "net/quic/address_utils.h"
 #include "net/quic/crypto/proof_verifier_chromium.h"
 #include "net/quic/mock_crypto_client_stream_factory.h"
 #include "net/quic/mock_quic_data.h"
@@ -192,9 +193,8 @@
     QuicChromiumPacketWriter* writer = new QuicChromiumPacketWriter(
         socket.get(), base::ThreadTaskRunnerHandle::Get().get());
     quic::QuicConnection* connection = new quic::QuicConnection(
-        connection_id_,
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(peer_addr_)),
-        helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */,
+        connection_id_, net::ToQuicSocketAddress(peer_addr_), helper_.get(),
+        alarm_factory_.get(), writer, true /* owns_writer */,
         quic::Perspective::IS_CLIENT, quic::test::SupportedVersions(version_));
     connection->set_visitor(&visitor_);
     quic::test::QuicConnectionPeer::SetSendAlgorithm(connection,
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 7a73796..7280c3e 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -1821,8 +1821,8 @@
   QuicChromiumPacketWriter* writer =
       new QuicChromiumPacketWriter(socket.get(), task_runner_);
   quic::QuicConnection* connection = new quic::QuicConnection(
-      connection_id, quic::QuicSocketAddress(quic::QuicSocketAddressImpl(addr)),
-      helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */,
+      connection_id, ToQuicSocketAddress(addr), helper_.get(),
+      alarm_factory_.get(), writer, true /* owns_writer */,
       quic::Perspective::IS_CLIENT,
       quic::ParsedQuicVersionVector{
           quic::ParsedQuicVersion(quic::PROTOCOL_QUIC_CRYPTO, quic_version)});
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 4c90979..2850d4d0 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -1354,8 +1354,7 @@
                                             "192.168.0.1", "");
   IPEndPoint alt_address = IPEndPoint(IPAddress(1, 2, 3, 4), 443);
   quic::QuicConfig config;
-  config.SetAlternateServerAddressToSend(
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(alt_address)));
+  config.SetAlternateServerAddressToSend(ToQuicSocketAddress(alt_address));
 
   VerifyServerMigration(config, alt_address);
 
@@ -8731,8 +8730,7 @@
   // Add alternate IPv4 server address to config.
   IPEndPoint alt_address = IPEndPoint(IPAddress(1, 2, 3, 4), 123);
   quic::QuicConfig config;
-  config.SetAlternateServerAddressToSend(
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(alt_address)));
+  config.SetAlternateServerAddressToSend(ToQuicSocketAddress(alt_address));
   VerifyServerMigration(config, alt_address);
 }
 
@@ -8744,8 +8742,7 @@
   IPEndPoint alt_address = IPEndPoint(
       IPAddress(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), 123);
   quic::QuicConfig config;
-  config.SetAlternateServerAddressToSend(
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(alt_address)));
+  config.SetAlternateServerAddressToSend(ToQuicSocketAddress(alt_address));
   VerifyServerMigration(config, alt_address);
 }
 
@@ -8756,8 +8753,7 @@
   // Add alternate IPv4 server address to config.
   IPEndPoint alt_address = IPEndPoint(IPAddress(1, 2, 3, 4), 123);
   quic::QuicConfig config;
-  config.SetAlternateServerAddressToSend(
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(alt_address)));
+  config.SetAlternateServerAddressToSend(ToQuicSocketAddress(alt_address));
   IPEndPoint expected_address(
       ConvertIPv4ToIPv4MappedIPv6(alt_address.address()), alt_address.port());
   VerifyServerMigration(config, expected_address);
@@ -8774,8 +8770,7 @@
   IPEndPoint alt_address = IPEndPoint(
       IPAddress(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16), 123);
   quic::QuicConfig config;
-  config.SetAlternateServerAddressToSend(
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(alt_address)));
+  config.SetAlternateServerAddressToSend(ToQuicSocketAddress(alt_address));
 
   ProofVerifyDetailsChromium verify_details = DefaultProofVerifyDetails();
   crypto_client_stream_factory_.AddProofVerifyDetails(&verify_details);
diff --git a/net/tools/quic/quic_client_message_loop_network_helper.cc b/net/tools/quic/quic_client_message_loop_network_helper.cc
index 486aab9..4c1b6c9c 100644
--- a/net/tools/quic/quic_client_message_loop_network_helper.cc
+++ b/net/tools/quic/quic_client_message_loop_network_helper.cc
@@ -85,8 +85,7 @@
     LOG(ERROR) << "GetLocalAddress failed: " << ErrorToShortString(rc);
     return false;
   }
-  client_address_ =
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(address));
+  client_address_ = ToQuicSocketAddress(address);
 
   socket_.swap(socket);
   packet_reader_.reset(new QuicChromiumPacketReader(
diff --git a/net/tools/quic/quic_simple_client_bin.cc b/net/tools/quic/quic_simple_client_bin.cc
index 125ccc0..ffced83f 100644
--- a/net/tools/quic/quic_simple_client_bin.cc
+++ b/net/tools/quic/quic_simple_client_bin.cc
@@ -47,6 +47,7 @@
 #include "net/cert/ct_policy_enforcer.h"
 #include "net/cert/multi_log_ct_verifier.h"
 #include "net/http/transport_security_state.h"
+#include "net/quic/address_utils.h"
 #include "net/quic/crypto/proof_verifier_chromium.h"
 #include "net/spdy/spdy_http_utils.h"
 #include "net/third_party/quiche/src/quic/core/quic_error_codes.h"
@@ -103,8 +104,7 @@
                    << "' : " << net::ErrorToShortString(rv);
         return nullptr;
       }
-      ip_addr =
-          quic::QuicIpAddress(quic::QuicIpAddressImpl(addresses[0].address()));
+      ip_addr = net::ToQuicIpAddress(addresses[0].address());
     }
 
     quic::QuicServerId server_id(host, port, false);
diff --git a/net/tools/quic/quic_simple_server.cc b/net/tools/quic/quic_simple_server.cc
index 159c413..c5ad9cf 100644
--- a/net/tools/quic/quic_simple_server.cc
+++ b/net/tools/quic/quic_simple_server.cc
@@ -13,6 +13,7 @@
 #include "net/base/ip_endpoint.h"
 #include "net/base/net_errors.h"
 #include "net/log/net_log_source.h"
+#include "net/quic/address_utils.h"
 #include "net/socket/udp_server_socket.h"
 #include "net/third_party/quiche/src/quic/core/crypto/crypto_handshake.h"
 #include "net/third_party/quiche/src/quic/core/crypto/quic_random.h"
@@ -211,10 +212,8 @@
 
   quic::QuicReceivedPacket packet(read_buffer_->data(), result,
                                   helper_->GetClock()->Now(), false);
-  dispatcher_->ProcessPacket(
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(server_address_)),
-      quic::QuicSocketAddress(quic::QuicSocketAddressImpl(client_address_)),
-      packet);
+  dispatcher_->ProcessPacket(ToQuicSocketAddress(server_address_),
+                             ToQuicSocketAddress(client_address_), packet);
 
   StartReading();
 }
diff --git a/net/tools/quic/quic_simple_server_test.cc b/net/tools/quic/quic_simple_server_test.cc
index 6f2fcabe..1a9cf12b 100644
--- a/net/tools/quic/quic_simple_server_test.cc
+++ b/net/tools/quic/quic_simple_server_test.cc
@@ -5,6 +5,7 @@
 #include "net/tools/quic/quic_simple_server.h"
 
 #include "base/stl_util.h"
+#include "net/quic/address_utils.h"
 #include "net/third_party/quiche/src/quic/core/crypto/quic_random.h"
 #include "net/third_party/quiche/src/quic/core/quic_crypto_stream.h"
 #include "net/third_party/quiche/src/quic/core/quic_utils.h"
@@ -48,10 +49,8 @@
 
   void DispatchPacket(const quic::QuicReceivedPacket& packet) {
     IPEndPoint client_addr, server_addr;
-    dispatcher_.ProcessPacket(
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(server_addr)),
-        quic::QuicSocketAddress(quic::QuicSocketAddressImpl(client_addr)),
-        packet);
+    dispatcher_.ProcessPacket(ToQuicSocketAddress(server_addr),
+                              ToQuicSocketAddress(client_addr), packet);
   }
 
  protected: