| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/mdns_client_impl.h" | 5 #include "net/dns/mdns_client_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <queue> | 8 #include <queue> |
| 9 #include <utility> |
| 9 | 10 |
| 10 #include "base/bind.h" | 11 #include "base/bind.h" |
| 11 #include "base/location.h" | 12 #include "base/location.h" |
| 12 #include "base/single_thread_task_runner.h" | 13 #include "base/single_thread_task_runner.h" |
| 13 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
| 14 #include "base/thread_task_runner_handle.h" | 15 #include "base/thread_task_runner_handle.h" |
| 15 #include "base/time/clock.h" | 16 #include "base/time/clock.h" |
| 16 #include "base/time/default_clock.h" | 17 #include "base/time/default_clock.h" |
| 17 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 18 #include "base/timer/timer.h" | 19 #include "base/timer/timer.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 45 | 46 |
| 46 void MDnsSocketFactoryImpl::CreateSockets( | 47 void MDnsSocketFactoryImpl::CreateSockets( |
| 47 std::vector<scoped_ptr<DatagramServerSocket>>* sockets) { | 48 std::vector<scoped_ptr<DatagramServerSocket>>* sockets) { |
| 48 InterfaceIndexFamilyList interfaces(GetMDnsInterfacesToBind()); | 49 InterfaceIndexFamilyList interfaces(GetMDnsInterfacesToBind()); |
| 49 for (size_t i = 0; i < interfaces.size(); ++i) { | 50 for (size_t i = 0; i < interfaces.size(); ++i) { |
| 50 DCHECK(interfaces[i].second == ADDRESS_FAMILY_IPV4 || | 51 DCHECK(interfaces[i].second == ADDRESS_FAMILY_IPV4 || |
| 51 interfaces[i].second == ADDRESS_FAMILY_IPV6); | 52 interfaces[i].second == ADDRESS_FAMILY_IPV6); |
| 52 scoped_ptr<DatagramServerSocket> socket( | 53 scoped_ptr<DatagramServerSocket> socket( |
| 53 CreateAndBindMDnsSocket(interfaces[i].second, interfaces[i].first)); | 54 CreateAndBindMDnsSocket(interfaces[i].second, interfaces[i].first)); |
| 54 if (socket) | 55 if (socket) |
| 55 sockets->push_back(socket.Pass()); | 56 sockets->push_back(std::move(socket)); |
| 56 } | 57 } |
| 57 } | 58 } |
| 58 | 59 |
| 59 MDnsConnection::SocketHandler::SocketHandler( | 60 MDnsConnection::SocketHandler::SocketHandler( |
| 60 scoped_ptr<DatagramServerSocket> socket, | 61 scoped_ptr<DatagramServerSocket> socket, |
| 61 MDnsConnection* connection) | 62 MDnsConnection* connection) |
| 62 : socket_(socket.Pass()), | 63 : socket_(std::move(socket)), |
| 63 connection_(connection), | 64 connection_(connection), |
| 64 response_(dns_protocol::kMaxMulticastSize), | 65 response_(dns_protocol::kMaxMulticastSize), |
| 65 send_in_progress_(false) { | 66 send_in_progress_(false) {} |
| 66 } | |
| 67 | 67 |
| 68 MDnsConnection::SocketHandler::~SocketHandler() { | 68 MDnsConnection::SocketHandler::~SocketHandler() { |
| 69 } | 69 } |
| 70 | 70 |
| 71 int MDnsConnection::SocketHandler::Start() { | 71 int MDnsConnection::SocketHandler::Start() { |
| 72 IPEndPoint end_point; | 72 IPEndPoint end_point; |
| 73 int rv = socket_->GetLocalAddress(&end_point); | 73 int rv = socket_->GetLocalAddress(&end_point); |
| 74 if (rv != OK) | 74 if (rv != OK) |
| 75 return rv; | 75 return rv; |
| 76 DCHECK(end_point.GetFamily() == ADDRESS_FAMILY_IPV4 || | 76 DCHECK(end_point.GetFamily() == ADDRESS_FAMILY_IPV4 || |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 } | 264 } |
| 265 } | 265 } |
| 266 | 266 |
| 267 if ((record->klass() & dns_protocol::kMDnsClassMask) != | 267 if ((record->klass() & dns_protocol::kMDnsClassMask) != |
| 268 dns_protocol::kClassIN) { | 268 dns_protocol::kClassIN) { |
| 269 DVLOG(1) << "Received an mDNS record with non-IN class. Ignoring."; | 269 DVLOG(1) << "Received an mDNS record with non-IN class. Ignoring."; |
| 270 continue; // Ignore all records not in the IN class. | 270 continue; // Ignore all records not in the IN class. |
| 271 } | 271 } |
| 272 | 272 |
| 273 MDnsCache::Key update_key = MDnsCache::Key::CreateFor(record.get()); | 273 MDnsCache::Key update_key = MDnsCache::Key::CreateFor(record.get()); |
| 274 MDnsCache::UpdateType update = cache_.UpdateDnsRecord(record.Pass()); | 274 MDnsCache::UpdateType update = cache_.UpdateDnsRecord(std::move(record)); |
| 275 | 275 |
| 276 // Cleanup time may have changed. | 276 // Cleanup time may have changed. |
| 277 ScheduleCleanup(cache_.next_expiration()); | 277 ScheduleCleanup(cache_.next_expiration()); |
| 278 | 278 |
| 279 update_keys.insert(std::make_pair(update_key, update)); | 279 update_keys.insert(std::make_pair(update_key, update)); |
| 280 } | 280 } |
| 281 | 281 |
| 282 for (std::map<MDnsCache::Key, MDnsCache::UpdateType>::iterator i = | 282 for (std::map<MDnsCache::Key, MDnsCache::UpdateType>::iterator i = |
| 283 update_keys.begin(); i != update_keys.end(); i++) { | 283 update_keys.begin(); i != update_keys.end(); i++) { |
| 284 const RecordParsed* record = cache_.LookupKey(i->first); | 284 const RecordParsed* record = cache_.LookupKey(i->first); |
| (...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 cache_.FindDnsRecords(rrtype, name, records, clock_->Now()); | 427 cache_.FindDnsRecords(rrtype, name, records, clock_->Now()); |
| 428 } | 428 } |
| 429 | 429 |
| 430 MDnsClientImpl::MDnsClientImpl() | 430 MDnsClientImpl::MDnsClientImpl() |
| 431 : clock_(new base::DefaultClock), | 431 : clock_(new base::DefaultClock), |
| 432 cleanup_timer_(new base::Timer(false, false)) { | 432 cleanup_timer_(new base::Timer(false, false)) { |
| 433 } | 433 } |
| 434 | 434 |
| 435 MDnsClientImpl::MDnsClientImpl(scoped_ptr<base::Clock> clock, | 435 MDnsClientImpl::MDnsClientImpl(scoped_ptr<base::Clock> clock, |
| 436 scoped_ptr<base::Timer> timer) | 436 scoped_ptr<base::Timer> timer) |
| 437 : clock_(clock.Pass()), cleanup_timer_(timer.Pass()) { | 437 : clock_(std::move(clock)), cleanup_timer_(std::move(timer)) {} |
| 438 } | |
| 439 | 438 |
| 440 MDnsClientImpl::~MDnsClientImpl() { | 439 MDnsClientImpl::~MDnsClientImpl() { |
| 441 } | 440 } |
| 442 | 441 |
| 443 bool MDnsClientImpl::StartListening(MDnsSocketFactory* socket_factory) { | 442 bool MDnsClientImpl::StartListening(MDnsSocketFactory* socket_factory) { |
| 444 DCHECK(!core_.get()); | 443 DCHECK(!core_.get()); |
| 445 core_.reset(new Core(clock_.get(), cleanup_timer_.get())); | 444 core_.reset(new Core(clock_.get(), cleanup_timer_.get())); |
| 446 if (!core_->Init(socket_factory)) { | 445 if (!core_->Init(socket_factory)) { |
| 447 core_.reset(); | 446 core_.reset(); |
| 448 return false; | 447 return false; |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 748 | 747 |
| 749 void MDnsTransactionImpl::OnNsecRecord(const std::string& name, unsigned type) { | 748 void MDnsTransactionImpl::OnNsecRecord(const std::string& name, unsigned type) { |
| 750 TriggerCallback(RESULT_NSEC, NULL); | 749 TriggerCallback(RESULT_NSEC, NULL); |
| 751 } | 750 } |
| 752 | 751 |
| 753 void MDnsTransactionImpl::OnCachePurged() { | 752 void MDnsTransactionImpl::OnCachePurged() { |
| 754 // TODO(noamsml): Cache purge situations not yet implemented | 753 // TODO(noamsml): Cache purge situations not yet implemented |
| 755 } | 754 } |
| 756 | 755 |
| 757 } // namespace net | 756 } // namespace net |
| OLD | NEW |