Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/dns/address_sorter_posix.h" | 5 #include "net/dns/address_sorter_posix.h" |
| 6 | 6 |
| 7 #include <netinet/in.h> | 7 #include <netinet/in.h> |
| 8 | 8 |
| 9 #if defined(OS_MACOSX) || defined(OS_BSD) | 9 #if defined(OS_MACOSX) || defined(OS_BSD) |
| 10 #include <sys/socket.h> // Must be included before ifaddrs.h. | 10 #include <sys/socket.h> // Must be included before ifaddrs.h. |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 263 } // namespace | 263 } // namespace |
| 264 | 264 |
| 265 AddressSorterPosix::AddressSorterPosix(ClientSocketFactory* socket_factory) | 265 AddressSorterPosix::AddressSorterPosix(ClientSocketFactory* socket_factory) |
| 266 : socket_factory_(socket_factory), | 266 : socket_factory_(socket_factory), |
| 267 precedence_table_(LoadPolicy(kDefaultPrecedenceTable, | 267 precedence_table_(LoadPolicy(kDefaultPrecedenceTable, |
| 268 arraysize(kDefaultPrecedenceTable))), | 268 arraysize(kDefaultPrecedenceTable))), |
| 269 label_table_(LoadPolicy(kDefaultLabelTable, | 269 label_table_(LoadPolicy(kDefaultLabelTable, |
| 270 arraysize(kDefaultLabelTable))), | 270 arraysize(kDefaultLabelTable))), |
| 271 ipv4_scope_table_(LoadPolicy(kDefaultIPv4ScopeTable, | 271 ipv4_scope_table_(LoadPolicy(kDefaultIPv4ScopeTable, |
| 272 arraysize(kDefaultIPv4ScopeTable))) { | 272 arraysize(kDefaultIPv4ScopeTable))) { |
| 273 NetworkChangeNotifier::AddIPAddressObserver(this); | 273 NetworkChangeNotifier::AddNetworkChangeObserver(this); |
| 274 OnIPAddressChanged(); | 274 OnNetworkChanged(NetworkChangeNotifier::CONNECTION_NONE); |
| 275 } | 275 } |
| 276 | 276 |
| 277 AddressSorterPosix::~AddressSorterPosix() { | 277 AddressSorterPosix::~AddressSorterPosix() { |
| 278 NetworkChangeNotifier::RemoveIPAddressObserver(this); | 278 NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
| 279 } | 279 } |
| 280 | 280 |
| 281 void AddressSorterPosix::Sort(const AddressList& list, | 281 void AddressSorterPosix::Sort(const AddressList& list, |
| 282 const CallbackType& callback) const { | 282 const CallbackType& callback) const { |
| 283 DCHECK(CalledOnValidThread()); | 283 DCHECK(CalledOnValidThread()); |
| 284 ScopedVector<DestinationInfo> sort_list; | 284 ScopedVector<DestinationInfo> sort_list; |
| 285 | 285 |
| 286 for (size_t i = 0; i < list.size(); ++i) { | 286 for (size_t i = 0; i < list.size(); ++i) { |
| 287 scoped_ptr<DestinationInfo> info(new DestinationInfo()); | 287 scoped_ptr<DestinationInfo> info(new DestinationInfo()); |
| 288 info->address = list[i].address(); | 288 info->address = list[i].address(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 333 | 333 |
| 334 std::stable_sort(sort_list.begin(), sort_list.end(), CompareDestinations); | 334 std::stable_sort(sort_list.begin(), sort_list.end(), CompareDestinations); |
| 335 | 335 |
| 336 AddressList result; | 336 AddressList result; |
| 337 for (size_t i = 0; i < sort_list.size(); ++i) | 337 for (size_t i = 0; i < sort_list.size(); ++i) |
| 338 result.push_back(IPEndPoint(sort_list[i]->address, 0 /* port */)); | 338 result.push_back(IPEndPoint(sort_list[i]->address, 0 /* port */)); |
| 339 | 339 |
| 340 callback.Run(true, result); | 340 callback.Run(true, result); |
| 341 } | 341 } |
| 342 | 342 |
| 343 void AddressSorterPosix::OnIPAddressChanged() { | 343 void AddressSorterPosix::OnNetworkChanged( |
| 344 NetworkChangeNotifier::ConnectionType type) { | |
| 344 DCHECK(CalledOnValidThread()); | 345 DCHECK(CalledOnValidThread()); |
| 346 if (type != NetworkChangeNotifier::CONNECTION_NONE) | |
|
szym
2013/01/20 06:52:08
I suggest a comment:
// Update the map on the "des
| |
| 347 return; | |
| 345 source_map_.clear(); | 348 source_map_.clear(); |
| 346 #if defined(OS_LINUX) | 349 #if defined(OS_LINUX) |
| 347 const internal::AddressTrackerLinux* tracker = | 350 const internal::AddressTrackerLinux* tracker = |
| 348 NetworkChangeNotifier::GetAddressTracker(); | 351 NetworkChangeNotifier::GetAddressTracker(); |
| 349 if (!tracker) | 352 if (!tracker) |
| 350 return; | 353 return; |
| 351 typedef internal::AddressTrackerLinux::AddressMap AddressMap; | 354 typedef internal::AddressTrackerLinux::AddressMap AddressMap; |
| 352 AddressMap map = tracker->GetAddressMap(); | 355 AddressMap map = tracker->GetAddressMap(); |
| 353 for (AddressMap::const_iterator it = map.begin(); it != map.end(); ++it) { | 356 for (AddressMap::const_iterator it = map.begin(); it != map.end(); ++it) { |
| 354 const IPAddressNumber& address = it->first; | 357 const IPAddressNumber& address = it->first; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 419 } | 422 } |
| 420 | 423 |
| 421 // static | 424 // static |
| 422 scoped_ptr<AddressSorter> AddressSorter::CreateAddressSorter() { | 425 scoped_ptr<AddressSorter> AddressSorter::CreateAddressSorter() { |
| 423 return scoped_ptr<AddressSorter>( | 426 return scoped_ptr<AddressSorter>( |
| 424 new AddressSorterPosix(ClientSocketFactory::GetDefaultFactory())); | 427 new AddressSorterPosix(ClientSocketFactory::GetDefaultFactory())); |
| 425 } | 428 } |
| 426 | 429 |
| 427 } // namespace net | 430 } // namespace net |
| 428 | 431 |
| OLD | NEW |