Remove direct access to impl() methods of Quic{Ip,Socket}Address
[email protected]
Change-Id: I4c27347c6a5a1f165e18df1ab9139163ef630464
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1608265
Commit-Queue: Victor Vasiliev <[email protected]>
Reviewed-by: Ryan Hamilton <[email protected]>
Cr-Commit-Position: refs/heads/master@{#659769}
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 5e93f8d..002c4ecf 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -958,6 +958,7 @@
"proxy_resolution/proxy_resolver_winhttp.cc",
"proxy_resolution/proxy_resolver_winhttp.h",
"proxy_resolution/proxy_retry_info.h",
+ "quic/address_utils.h",
"quic/bidirectional_stream_quic_impl.cc",
"quic/bidirectional_stream_quic_impl.h",
"quic/crypto/proof_source_chromium.cc",
diff --git a/net/base/ip_endpoint.cc b/net/base/ip_endpoint.cc
index b3866b9..e6115c4 100644
--- a/net/base/ip_endpoint.cc
+++ b/net/base/ip_endpoint.cc
@@ -181,4 +181,8 @@
return address_ == other.address_ && port_ == other.port_;
}
+bool IPEndPoint::operator!=(const IPEndPoint& that) const {
+ return !(*this == that);
+}
+
} // namespace net
diff --git a/net/base/ip_endpoint.h b/net/base/ip_endpoint.h
index f7bb248f..fd635b6 100644
--- a/net/base/ip_endpoint.h
+++ b/net/base/ip_endpoint.h
@@ -65,6 +65,7 @@
bool operator<(const IPEndPoint& that) const;
bool operator==(const IPEndPoint& that) const;
+ bool operator!=(const IPEndPoint& that) const;
private:
IPAddress address_;
diff --git a/net/quic/address_utils.h b/net/quic/address_utils.h
new file mode 100644
index 0000000..f067db7
--- /dev/null
+++ b/net/quic/address_utils.h
@@ -0,0 +1,48 @@
+#ifndef NET_QUIC_ADDRESS_UTILS_H_
+#define NET_QUIC_ADDRESS_UTILS_H_
+
+#include "net/base/ip_address.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_ip_address.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_ip_address_family.h"
+#include "net/third_party/quiche/src/quic/platform/api/quic_socket_address.h"
+
+namespace net {
+
+inline IPEndPoint ToIPEndPoint(quic::QuicSocketAddress address) {
+ if (!address.IsInitialized()) {
+ return IPEndPoint();
+ }
+
+ IPEndPoint result;
+ sockaddr_storage storage = address.generic_address();
+ const bool success = result.FromSockAddr(
+ reinterpret_cast<const sockaddr*>(&storage), sizeof(storage));
+ DCHECK(success);
+ return result;
+}
+
+inline IPAddress ToIPAddress(quic::QuicIpAddress address) {
+ if (!address.IsInitialized()) {
+ return IPAddress();
+ }
+
+ switch (address.address_family()) {
+ case quic::IpAddressFamily::IP_V4: {
+ in_addr raw_address = address.GetIPv4();
+ return IPAddress(reinterpret_cast<const uint8_t*>(&raw_address),
+ sizeof(raw_address));
+ }
+ case quic::IpAddressFamily::IP_V6: {
+ in6_addr raw_address = address.GetIPv6();
+ return IPAddress(reinterpret_cast<const uint8_t*>(&raw_address),
+ sizeof(raw_address));
+ }
+ default:
+ DCHECK_EQ(address.address_family(), quic::IpAddressFamily::IP_UNSPEC);
+ return IPAddress();
+ }
+}
+
+} // namespace net
+
+#endif // NET_QUIC_ADDRESS_UTILS_H_
diff --git a/net/quic/quic_chromium_client_session.cc b/net/quic/quic_chromium_client_session.cc
index cd0e1af..fdeda72 100644
--- a/net/quic/quic_chromium_client_session.cc
+++ b/net/quic/quic_chromium_client_session.cc
@@ -27,6 +27,7 @@
#include "net/http/transport_security_state.h"
#include "net/log/net_log_event_type.h"
#include "net/log/net_log_source_type.h"
+#include "net/quic/address_utils.h"
#include "net/quic/crypto/proof_verifier_chromium.h"
#include "net/quic/quic_chromium_connection_helper.h"
#include "net/quic/quic_chromium_packet_writer.h"
@@ -491,7 +492,7 @@
if (!session_)
return ERR_CONNECTION_CLOSED;
- *address = session_->peer_address().impl().socket_address();
+ *address = ToIPEndPoint(session_->peer_address());
return OK;
}
@@ -500,7 +501,7 @@
if (!session_)
return ERR_CONNECTION_CLOSED;
- *address = session_->self_address().impl().socket_address();
+ *address = ToIPEndPoint(session_->self_address());
return OK;
}
@@ -1173,7 +1174,7 @@
}
bool QuicChromiumClientSession::GetRemoteEndpoint(IPEndPoint* endpoint) {
- *endpoint = peer_address().impl().socket_address();
+ *endpoint = ToIPEndPoint(peer_address());
return true;
}
@@ -1472,7 +1473,7 @@
// Server has sent an alternate address to connect to.
IPEndPoint new_address =
- config()->ReceivedAlternateServerAddress().impl().socket_address();
+ ToIPEndPoint(config()->ReceivedAlternateServerAddress());
IPEndPoint old_address;
GetDefaultSocket()->GetPeerAddress(&old_address);
@@ -1864,7 +1865,7 @@
NetLogEventType::QUIC_CONNECTION_MIGRATION_TRIGGERED,
NetLogQuicConnectionMigrationTriggerCallback("WriteError"));
MigrationResult result =
- Migrate(new_network, connection()->peer_address().impl().socket_address(),
+ Migrate(new_network, ToIPEndPoint(connection()->peer_address()),
/*close_session_on_error=*/false, migration_net_log);
migration_net_log.EndEvent(
NetLogEventType::QUIC_CONNECTION_MIGRATION_TRIGGERED);
@@ -2203,7 +2204,7 @@
probing_manager_.CancelProbing(network, peer_address());
MigrationResult result =
- Migrate(network, connection()->peer_address().impl().socket_address(),
+ Migrate(network, ToIPEndPoint(connection()->peer_address()),
/*close_session_on_error=*/true, net_log_);
if (result == MigrationResult::FAILURE)
return;
@@ -2509,9 +2510,9 @@
// Create and configure socket on |network|.
std::unique_ptr<DatagramClientSocket> probing_socket =
stream_factory_->CreateSocket(net_log_.net_log(), net_log_.source());
- if (stream_factory_->ConfigureSocket(
- probing_socket.get(), peer_address.impl().socket_address(), network,
- session_key_.socket_tag()) != OK) {
+ if (stream_factory_->ConfigureSocket(probing_socket.get(),
+ ToIPEndPoint(peer_address), network,
+ session_key_.socket_tag()) != OK) {
HistogramAndLogMigrationFailure(
migration_net_log, MIGRATION_STATUS_INTERNAL_ERROR, connection_id(),
"Socket configuration failed");
diff --git a/net/quic/quic_connection_logger.cc b/net/quic/quic_connection_logger.cc
index 833a3b9..79ae9d9 100644
--- a/net/quic/quic_connection_logger.cc
+++ b/net/quic/quic_connection_logger.cc
@@ -22,6 +22,7 @@
#include "net/log/net_log.h"
#include "net/log/net_log_capture_mode.h"
#include "net/log/net_log_event_type.h"
+#include "net/quic/address_utils.h"
#include "net/quic/quic_address_mismatch.h"
#include "net/third_party/quiche/src/quic/core/crypto/crypto_handshake_message.h"
#include "net/third_party/quiche/src/quic/core/crypto/crypto_protocol.h"
@@ -38,10 +39,11 @@
namespace {
-base::Value NetLogQuicPacketCallback(const IPEndPoint* self_address,
- const IPEndPoint* peer_address,
- size_t packet_size,
- NetLogCaptureMode /* capture_mode */) {
+base::Value NetLogQuicPacketCallback(
+ const quic::QuicSocketAddress* self_address,
+ const quic::QuicSocketAddress* peer_address,
+ size_t packet_size,
+ NetLogCaptureMode /* capture_mode */) {
base::DictionaryValue dict;
dict.SetString("self_address", self_address->ToString());
dict.SetString("peer_address", peer_address->ToString());
@@ -223,7 +225,7 @@
base::Value NetLogQuicPublicResetPacketCallback(
const IPEndPoint* server_hello_address,
- const IPEndPoint* public_reset_address,
+ const quic::QuicSocketAddress* public_reset_address,
NetLogCaptureMode /* capture_mode */) {
base::DictionaryValue dict;
dict.SetString("server_hello_address", server_hello_address->ToString());
@@ -540,10 +542,10 @@
const quic::QuicSocketAddress& peer_address,
const quic::QuicEncryptedPacket& packet) {
if (local_address_from_self_.GetFamily() == ADDRESS_FAMILY_UNSPECIFIED) {
- local_address_from_self_ = self_address.impl().socket_address();
+ local_address_from_self_ = ToIPEndPoint(self_address);
UMA_HISTOGRAM_ENUMERATION(
"Net.QuicSession.ConnectionTypeFromSelf",
- GetRealAddressFamily(self_address.impl().socket_address().address()),
+ GetRealAddressFamily(ToIPEndPoint(self_address).address()),
ADDRESS_FAMILY_LAST);
}
@@ -551,11 +553,9 @@
last_received_packet_size_ = packet.length();
if (!net_log_is_capturing_)
return;
- net_log_.AddEvent(
- NetLogEventType::QUIC_SESSION_PACKET_RECEIVED,
- base::Bind(&NetLogQuicPacketCallback,
- &self_address.impl().socket_address(),
- &peer_address.impl().socket_address(), packet.length()));
+ net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PACKET_RECEIVED,
+ base::Bind(&NetLogQuicPacketCallback, &self_address,
+ &peer_address, packet.length()));
}
void QuicConnectionLogger::OnUnauthenticatedHeader(
@@ -737,13 +737,13 @@
void QuicConnectionLogger::OnPublicResetPacket(
const quic::QuicPublicResetPacket& packet) {
UpdatePublicResetAddressMismatchHistogram(
- local_address_from_shlo_, packet.client_address.impl().socket_address());
+ local_address_from_shlo_, ToIPEndPoint(packet.client_address));
if (!net_log_is_capturing_)
return;
- net_log_.AddEvent(NetLogEventType::QUIC_SESSION_PUBLIC_RESET_PACKET_RECEIVED,
- base::Bind(&NetLogQuicPublicResetPacketCallback,
- &local_address_from_shlo_,
- &packet.client_address.impl().socket_address()));
+ net_log_.AddEvent(
+ NetLogEventType::QUIC_SESSION_PUBLIC_RESET_PACKET_RECEIVED,
+ base::Bind(&NetLogQuicPublicResetPacketCallback,
+ &local_address_from_shlo_, &packet.client_address));
}
void QuicConnectionLogger::OnVersionNegotiationPacket(
@@ -763,7 +763,7 @@
if (message.GetStringPiece(quic::kCADR, &address) &&
decoder.Decode(address.data(), address.size())) {
local_address_from_shlo_ =
- IPEndPoint(decoder.ip().impl().ip_address(), decoder.port());
+ IPEndPoint(ToIPAddress(decoder.ip()), decoder.port());
UMA_HISTOGRAM_ENUMERATION(
"Net.QuicSession.ConnectionTypeFromPeer",
GetRealAddressFamily(local_address_from_shlo_.address()),
diff --git a/net/quic/quic_connectivity_probing_manager.cc b/net/quic/quic_connectivity_probing_manager.cc
index 5ce272a..7f33513 100644
--- a/net/quic/quic_connectivity_probing_manager.cc
+++ b/net/quic/quic_connectivity_probing_manager.cc
@@ -9,6 +9,7 @@
#include "base/strings/string_number_conversions.h"
#include "base/values.h"
#include "net/log/net_log.h"
+#include "net/quic/address_utils.h"
namespace net {
@@ -173,7 +174,7 @@
<< local_address.ToString() << ", to peer ip:port "
<< peer_address_.ToString();
- if (quic::QuicSocketAddressImpl(local_address) != self_address.impl() ||
+ if (local_address != ToIPEndPoint(self_address) ||
peer_address_ != peer_address) {
DVLOG(1) << "Received probing response from peer ip:port "
<< peer_address.ToString() << ", to self ip:port "
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index b5c361f..40bd5be 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -36,6 +36,7 @@
#include "net/log/net_log_capture_mode.h"
#include "net/log/net_log_event_type.h"
#include "net/log/net_log_source_type.h"
+#include "net/quic/address_utils.h"
#include "net/quic/crypto/proof_verifier_chromium.h"
#include "net/quic/properties_based_quic_server_info.h"
#include "net/quic/quic_chromium_alarm_factory.h"
@@ -412,7 +413,7 @@
bool DoesPeerAddressMatchWithFreshAddressList() {
std::vector<net::IPEndPoint> endpoints =
fresh_resolve_host_request_->GetAddressResults().value().endpoints();
- IPEndPoint stale_address = session_->peer_address().impl().socket_address();
+ IPEndPoint stale_address = ToIPEndPoint(session_->peer_address());
if (std::find(endpoints.begin(), endpoints.end(), stale_address) !=
endpoints.end()) {
@@ -889,8 +890,7 @@
DCHECK(!factory_->HasActiveSession(key_.session_key()));
// There may well now be an active session for this IP. If so, use the
// existing session instead.
- AddressList address(
- session_->connection()->peer_address().impl().socket_address());
+ AddressList address(ToIPEndPoint(session_->connection()->peer_address()));
if (factory_->HasMatchingIpSession(key_, address)) {
LogConnectionIpPooling(true);
session_->connection()->CloseConnection(
@@ -1898,7 +1898,7 @@
active_sessions_[key.session_key()] = session;
session_aliases_[session].insert(key);
const IPEndPoint peer_address =
- session->connection()->peer_address().impl().socket_address();
+ ToIPEndPoint(session->connection()->peer_address());
DCHECK(!base::ContainsKey(ip_aliases_[peer_address], session));
ip_aliases_[peer_address].insert(session);
DCHECK(!base::ContainsKey(session_peer_ip_, session));
diff --git a/net/quic/quic_stream_factory_test.cc b/net/quic/quic_stream_factory_test.cc
index 00821bda..6de7e444 100644
--- a/net/quic/quic_stream_factory_test.cc
+++ b/net/quic/quic_stream_factory_test.cc
@@ -27,6 +27,7 @@
#include "net/http/http_util.h"
#include "net/http/transport_security_state.h"
#include "net/http/transport_security_state_test_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"
@@ -9324,9 +9325,7 @@
std::unique_ptr<HttpStream> stream = CreateStream(&request);
EXPECT_TRUE(stream.get());
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kNonCachedIPAddress);
+ EXPECT_EQ(session->peer_address().host().ToString(), kNonCachedIPAddress);
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -9373,9 +9372,7 @@
EXPECT_TRUE(stream.get());
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kNonCachedIPAddress);
+ EXPECT_EQ(session->peer_address().host().ToString(), kNonCachedIPAddress);
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -9431,9 +9428,8 @@
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kCachedIPAddress.ToString());
+ EXPECT_EQ(session->peer_address().host().ToString(),
+ kCachedIPAddress.ToString());
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -9499,9 +9495,8 @@
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kCachedIPAddress.ToString());
+ EXPECT_EQ(session->peer_address().host().ToString(),
+ kCachedIPAddress.ToString());
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -9563,9 +9558,8 @@
EXPECT_TRUE(stream.get());
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kCachedIPAddress.ToString());
+ EXPECT_EQ(session->peer_address().host().ToString(),
+ kCachedIPAddress.ToString());
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -9634,9 +9628,7 @@
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kNonCachedIPAddress);
+ EXPECT_EQ(session->peer_address().host().ToString(), kNonCachedIPAddress);
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -9708,9 +9700,7 @@
EXPECT_TRUE(stream.get());
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kNonCachedIPAddress);
+ EXPECT_EQ(session->peer_address().host().ToString(), kNonCachedIPAddress);
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -9779,9 +9769,7 @@
EXPECT_TRUE(stream.get());
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kNonCachedIPAddress);
+ EXPECT_EQ(session->peer_address().host().ToString(), kNonCachedIPAddress);
EXPECT_TRUE(quic_data.AllReadDataConsumed());
EXPECT_TRUE(quic_data.AllWriteDataConsumed());
@@ -10002,9 +9990,7 @@
QuicChromiumClientSession* session = GetActiveSession(host_port_pair_);
- EXPECT_EQ(
- session->peer_address().impl().socket_address().ToStringWithoutPort(),
- kNonCachedIPAddress);
+ EXPECT_EQ(session->peer_address().host().ToString(), kNonCachedIPAddress);
EXPECT_TRUE(quic_data2.AllReadDataConsumed());
EXPECT_TRUE(quic_data2.AllWriteDataConsumed());
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 72cf547e..486aab9 100644
--- a/net/tools/quic/quic_client_message_loop_network_helper.cc
+++ b/net/tools/quic/quic_client_message_loop_network_helper.cc
@@ -14,6 +14,7 @@
#include "net/http/http_response_info.h"
#include "net/log/net_log_source.h"
#include "net/log/net_log_with_source.h"
+#include "net/quic/address_utils.h"
#include "net/quic/quic_chromium_alarm_factory.h"
#include "net/quic/quic_chromium_connection_helper.h"
#include "net/quic/quic_chromium_packet_reader.h"
@@ -60,7 +61,7 @@
quic::QuicSocketAddress(quic::QuicIpAddress::Any6(), bind_to_port);
}
- int rc = socket->Connect(server_address.impl().socket_address());
+ int rc = socket->Connect(ToIPEndPoint(server_address));
if (rc != OK) {
LOG(ERROR) << "Connect failed: " << ErrorToShortString(rc);
return false;
diff --git a/net/tools/quic/quic_simple_server_packet_writer.cc b/net/tools/quic/quic_simple_server_packet_writer.cc
index ac952d7..6e71a9d 100644
--- a/net/tools/quic/quic_simple_server_packet_writer.cc
+++ b/net/tools/quic/quic_simple_server_packet_writer.cc
@@ -12,6 +12,7 @@
#include "base/metrics/histogram_functions.h"
#include "net/base/io_buffer.h"
#include "net/base/net_errors.h"
+#include "net/quic/address_utils.h"
#include "net/socket/udp_server_socket.h"
#include "net/third_party/quiche/src/quic/core/quic_dispatcher.h"
@@ -58,8 +59,7 @@
int rv;
if (buf_len <= static_cast<size_t>(std::numeric_limits<int>::max())) {
rv = socket_->SendTo(
- buf.get(), static_cast<int>(buf_len),
- peer_address.impl().socket_address(),
+ buf.get(), static_cast<int>(buf_len), ToIPEndPoint(peer_address),
base::Bind(&QuicSimpleServerPacketWriter::OnWriteComplete,
weak_factory_.GetWeakPtr()));
} else {