| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/browser/local_discovery/endpoint_resolver.h" | 5 #include "chrome/browser/local_discovery/endpoint_resolver.h" | 
| 6 | 6 | 
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" | 
| 8 #include "base/debug/dump_without_crashing.h" | 8 #include "base/debug/dump_without_crashing.h" | 
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" | 
| 10 #include "chrome/browser/local_discovery/service_discovery_shared_client.h" | 10 #include "chrome/browser/local_discovery/service_discovery_shared_client.h" | 
| 11 #include "chrome/common/chrome_switches.h" | 11 #include "chrome/common/chrome_switches.h" | 
| 12 #include "net/base/ip_address.h" |  | 
| 13 #include "net/base/ip_endpoint.h" | 12 #include "net/base/ip_endpoint.h" | 
|  | 13 #include "net/base/net_util.h" | 
| 14 | 14 | 
| 15 namespace local_discovery { | 15 namespace local_discovery { | 
| 16 | 16 | 
| 17 EndpointResolver::EndpointResolver() { | 17 EndpointResolver::EndpointResolver() { | 
| 18   service_discovery_client_ = ServiceDiscoverySharedClient::GetInstance(); | 18   service_discovery_client_ = ServiceDiscoverySharedClient::GetInstance(); | 
| 19 } | 19 } | 
| 20 | 20 | 
| 21 EndpointResolver::~EndpointResolver() {} | 21 EndpointResolver::~EndpointResolver() {} | 
| 22 | 22 | 
| 23 void EndpointResolver::Start(const std::string& service_name, | 23 void EndpointResolver::Start(const std::string& service_name, | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 34     const ServiceDescription& description) { | 34     const ServiceDescription& description) { | 
| 35   if (result != ServiceResolver::STATUS_SUCCESS) | 35   if (result != ServiceResolver::STATUS_SUCCESS) | 
| 36     return callback.Run(net::IPEndPoint()); | 36     return callback.Run(net::IPEndPoint()); | 
| 37 | 37 | 
| 38   Start(description.address, callback); | 38   Start(description.address, callback); | 
| 39 } | 39 } | 
| 40 | 40 | 
| 41 void EndpointResolver::Start(const net::HostPortPair& address, | 41 void EndpointResolver::Start(const net::HostPortPair& address, | 
| 42                              const ResultCallback& callback) { | 42                              const ResultCallback& callback) { | 
| 43 #if defined(OS_MACOSX) | 43 #if defined(OS_MACOSX) | 
| 44   net::IPAddress ip_address; | 44   net::IPAddressNumber ip_address; | 
| 45   if (!net::IPAddress::FromIPLiteral(address.host(), &ip_address)) { | 45   if (!net::ParseIPLiteralToNumber(address.host(), &ip_address)) { | 
| 46     NOTREACHED() << address.ToString(); | 46     NOTREACHED() << address.ToString(); | 
| 47     // Unexpected, but could be a reason for crbug.com/513505 | 47     // Unexpected, but could be a reason for crbug.com/513505 | 
| 48     base::debug::DumpWithoutCrashing(); | 48     base::debug::DumpWithoutCrashing(); | 
| 49     return callback.Run(net::IPEndPoint()); | 49     return callback.Run(net::IPEndPoint()); | 
| 50   } | 50   } | 
| 51 | 51 | 
| 52   // OSX already has IP there. | 52   // OSX already has IP there. | 
| 53   callback.Run(net::IPEndPoint(ip_address, address.port())); | 53   callback.Run(net::IPEndPoint(ip_address, address.port())); | 
| 54 #else   // OS_MACOSX | 54 #else   // OS_MACOSX | 
| 55   net::AddressFamily address_family = net::ADDRESS_FAMILY_UNSPECIFIED; | 55   net::AddressFamily address_family = net::ADDRESS_FAMILY_UNSPECIFIED; | 
| 56   if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 56   if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| 57           switches::kPrivetIPv6Only)) { | 57           switches::kPrivetIPv6Only)) { | 
| 58     address_family = net::ADDRESS_FAMILY_IPV6; | 58     address_family = net::ADDRESS_FAMILY_IPV6; | 
| 59   } | 59   } | 
| 60 | 60 | 
| 61   domain_resolver_ = service_discovery_client_->CreateLocalDomainResolver( | 61   domain_resolver_ = service_discovery_client_->CreateLocalDomainResolver( | 
| 62       address.host(), address_family, | 62       address.host(), address_family, | 
| 63       base::Bind(&EndpointResolver::DomainResolveComplete, | 63       base::Bind(&EndpointResolver::DomainResolveComplete, | 
| 64                  base::Unretained(this), address.port(), callback)); | 64                  base::Unretained(this), address.port(), callback)); | 
| 65   domain_resolver_->Start(); | 65   domain_resolver_->Start(); | 
| 66 #endif  // OS_MACOSX | 66 #endif  // OS_MACOSX | 
| 67 } | 67 } | 
| 68 | 68 | 
| 69 void EndpointResolver::DomainResolveComplete( | 69 void EndpointResolver::DomainResolveComplete( | 
| 70     uint16_t port, | 70     uint16_t port, | 
| 71     const ResultCallback& callback, | 71     const ResultCallback& callback, | 
| 72     bool success, | 72     bool success, | 
| 73     const net::IPAddress& address_ipv4, | 73     const net::IPAddressNumber& address_ipv4, | 
| 74     const net::IPAddress& address_ipv6) { | 74     const net::IPAddressNumber& address_ipv6) { | 
| 75   if (!success) | 75   if (!success) | 
| 76     return callback.Run(net::IPEndPoint()); | 76     return callback.Run(net::IPEndPoint()); | 
| 77 | 77 | 
| 78   net::IPAddress address = address_ipv4; | 78   net::IPAddressNumber address = address_ipv4; | 
| 79   if (!address.IsValid()) | 79   if (address.empty()) | 
| 80     address = address_ipv6; | 80     address = address_ipv6; | 
| 81 | 81 | 
| 82   DCHECK(address.IsValid()); | 82   DCHECK(!address.empty()); | 
| 83 | 83 | 
| 84   callback.Run(net::IPEndPoint(address, port)); | 84   callback.Run(net::IPEndPoint(address, port)); | 
| 85 } | 85 } | 
| 86 | 86 | 
| 87 }  // namespace local_discovery | 87 }  // namespace local_discovery | 
| OLD | NEW | 
|---|