Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <utility> | 5 #include <utility> |
| 6 | 6 |
| 7 #include "base/location.h" | 7 #include "base/location.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/memory/singleton.h" | 9 #include "base/memory/singleton.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 428 } | 428 } |
| 429 | 429 |
| 430 void ServiceResolverImpl::ARecordTransactionResponse( | 430 void ServiceResolverImpl::ARecordTransactionResponse( |
| 431 net::MDnsTransaction::Result status, const net::RecordParsed* record) { | 431 net::MDnsTransaction::Result status, const net::RecordParsed* record) { |
| 432 a_transaction_.reset(); | 432 a_transaction_.reset(); |
| 433 | 433 |
| 434 if (status == net::MDnsTransaction::RESULT_RECORD) { | 434 if (status == net::MDnsTransaction::RESULT_RECORD) { |
| 435 DCHECK(record); | 435 DCHECK(record); |
| 436 service_staging_.ip_address = RecordToIPAddress(record); | 436 service_staging_.ip_address = RecordToIPAddress(record); |
| 437 } else { | 437 } else { |
| 438 service_staging_.ip_address = net::IPAddressNumber(); | 438 service_staging_.ip_address = net::IPAddress(); |
| 439 } | 439 } |
| 440 | 440 |
| 441 address_resolved_ = true; | 441 address_resolved_ = true; |
| 442 AlertCallbackIfReady(); | 442 AlertCallbackIfReady(); |
| 443 } | 443 } |
| 444 | 444 |
| 445 void ServiceResolverImpl::AlertCallbackIfReady() { | 445 void ServiceResolverImpl::AlertCallbackIfReady() { |
| 446 if (metadata_resolved_ && address_resolved_) { | 446 if (metadata_resolved_ && address_resolved_) { |
| 447 txt_transaction_.reset(); | 447 txt_transaction_.reset(); |
| 448 srv_transaction_.reset(); | 448 srv_transaction_.reset(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 486 } | 486 } |
| 487 | 487 |
| 488 net::HostPortPair ServiceResolverImpl::RecordToAddress( | 488 net::HostPortPair ServiceResolverImpl::RecordToAddress( |
| 489 const net::RecordParsed* record) const { | 489 const net::RecordParsed* record) const { |
| 490 DCHECK(record->type() == net::dns_protocol::kTypeSRV); | 490 DCHECK(record->type() == net::dns_protocol::kTypeSRV); |
| 491 const net::SrvRecordRdata* srv_rdata = record->rdata<net::SrvRecordRdata>(); | 491 const net::SrvRecordRdata* srv_rdata = record->rdata<net::SrvRecordRdata>(); |
| 492 DCHECK(srv_rdata); | 492 DCHECK(srv_rdata); |
| 493 return net::HostPortPair(srv_rdata->target(), srv_rdata->port()); | 493 return net::HostPortPair(srv_rdata->target(), srv_rdata->port()); |
| 494 } | 494 } |
| 495 | 495 |
| 496 const net::IPAddressNumber& ServiceResolverImpl::RecordToIPAddress( | 496 const net::IPAddress ServiceResolverImpl::RecordToIPAddress( |
| 497 const net::RecordParsed* record) const { | 497 const net::RecordParsed* record) const { |
| 498 DCHECK(record->type() == net::dns_protocol::kTypeA); | 498 DCHECK(record->type() == net::dns_protocol::kTypeA); |
| 499 const net::ARecordRdata* a_rdata = record->rdata<net::ARecordRdata>(); | 499 const net::ARecordRdata* a_rdata = record->rdata<net::ARecordRdata>(); |
| 500 DCHECK(a_rdata); | 500 DCHECK(a_rdata); |
| 501 return a_rdata->address(); | 501 return net::IPAddress(&a_rdata->address().front(), a_rdata->address().size()); |
|
eroman
2015/12/21 20:47:33
Use a net::IPAddress(const IPAddressNumber&) const
martijnc
2016/01/27 22:50:52
Done.
| |
| 502 } | 502 } |
| 503 | 503 |
| 504 LocalDomainResolverImpl::LocalDomainResolverImpl( | 504 LocalDomainResolverImpl::LocalDomainResolverImpl( |
| 505 const std::string& domain, | 505 const std::string& domain, |
| 506 net::AddressFamily address_family, | 506 net::AddressFamily address_family, |
| 507 const IPAddressCallback& callback, | 507 const IPAddressCallback& callback, |
| 508 net::MDnsClient* mdns_client) | 508 net::MDnsClient* mdns_client) |
| 509 : domain_(domain), address_family_(address_family), callback_(callback), | 509 : domain_(domain), address_family_(address_family), callback_(callback), |
| 510 transactions_finished_(0), mdns_client_(mdns_client) { | 510 transactions_finished_(0), mdns_client_(mdns_client) { |
| 511 } | 511 } |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 538 base::Unretained(this))); | 538 base::Unretained(this))); |
| 539 } | 539 } |
| 540 | 540 |
| 541 void LocalDomainResolverImpl::OnTransactionComplete( | 541 void LocalDomainResolverImpl::OnTransactionComplete( |
| 542 net::MDnsTransaction::Result result, const net::RecordParsed* record) { | 542 net::MDnsTransaction::Result result, const net::RecordParsed* record) { |
| 543 transactions_finished_++; | 543 transactions_finished_++; |
| 544 | 544 |
| 545 if (result == net::MDnsTransaction::RESULT_RECORD) { | 545 if (result == net::MDnsTransaction::RESULT_RECORD) { |
| 546 if (record->type() == net::dns_protocol::kTypeA) { | 546 if (record->type() == net::dns_protocol::kTypeA) { |
| 547 const net::ARecordRdata* rdata = record->rdata<net::ARecordRdata>(); | 547 const net::ARecordRdata* rdata = record->rdata<net::ARecordRdata>(); |
| 548 address_ipv4_ = rdata->address(); | 548 address_ipv4_ = |
| 549 net::IPAddress(&rdata->address().front(), rdata->address().size()); | |
| 549 } else { | 550 } else { |
| 550 DCHECK_EQ(net::dns_protocol::kTypeAAAA, record->type()); | 551 DCHECK_EQ(net::dns_protocol::kTypeAAAA, record->type()); |
| 551 const net::AAAARecordRdata* rdata = record->rdata<net::AAAARecordRdata>(); | 552 const net::AAAARecordRdata* rdata = record->rdata<net::AAAARecordRdata>(); |
| 552 address_ipv6_ = rdata->address(); | 553 address_ipv6_ = |
| 554 net::IPAddress(&rdata->address().front(), rdata->address().size()); | |
| 553 } | 555 } |
| 554 } | 556 } |
| 555 | 557 |
| 556 if (transactions_finished_ == 1 && | 558 if (transactions_finished_ == 1 && |
| 557 address_family_ == net::ADDRESS_FAMILY_UNSPECIFIED) { | 559 address_family_ == net::ADDRESS_FAMILY_UNSPECIFIED) { |
| 558 timeout_callback_.Reset(base::Bind( | 560 timeout_callback_.Reset(base::Bind( |
| 559 &LocalDomainResolverImpl::SendResolvedAddresses, | 561 &LocalDomainResolverImpl::SendResolvedAddresses, |
| 560 base::Unretained(this))); | 562 base::Unretained(this))); |
| 561 | 563 |
| 562 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 564 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 563 FROM_HERE, timeout_callback_.callback(), | 565 FROM_HERE, timeout_callback_.callback(), |
| 564 base::TimeDelta::FromMilliseconds(kLocalDomainSecondAddressTimeoutMs)); | 566 base::TimeDelta::FromMilliseconds(kLocalDomainSecondAddressTimeoutMs)); |
| 565 } else if (transactions_finished_ == 2 | 567 } else if (transactions_finished_ == 2 |
| 566 || address_family_ != net::ADDRESS_FAMILY_UNSPECIFIED) { | 568 || address_family_ != net::ADDRESS_FAMILY_UNSPECIFIED) { |
| 567 SendResolvedAddresses(); | 569 SendResolvedAddresses(); |
| 568 } | 570 } |
| 569 } | 571 } |
| 570 | 572 |
| 571 bool LocalDomainResolverImpl::IsSuccess() { | 573 bool LocalDomainResolverImpl::IsSuccess() { |
| 572 return !address_ipv4_.empty() || !address_ipv6_.empty(); | 574 return address_ipv4_.IsIPv4() || address_ipv6_.IsIPv6(); |
| 573 } | 575 } |
| 574 | 576 |
| 575 void LocalDomainResolverImpl::SendResolvedAddresses() { | 577 void LocalDomainResolverImpl::SendResolvedAddresses() { |
| 576 transaction_a_.reset(); | 578 transaction_a_.reset(); |
| 577 transaction_aaaa_.reset(); | 579 transaction_aaaa_.reset(); |
| 578 timeout_callback_.Cancel(); | 580 timeout_callback_.Cancel(); |
| 579 callback_.Run(IsSuccess(), address_ipv4_, address_ipv6_); | 581 callback_.Run(IsSuccess(), address_ipv4_, address_ipv6_); |
| 580 } | 582 } |
| 581 | 583 |
| 582 } // namespace local_discovery | 584 } // namespace local_discovery |
| OLD | NEW |