| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/api/mdns/dns_sd_device_lister.h" |
| |
| #include "chrome/common/extensions/api/mdns.h" |
| |
| using local_discovery::ServiceDescription; |
| |
| namespace extensions { |
| |
| namespace { |
| |
| void FillServiceInfo(const ServiceDescription& service_description, |
| DnsSdService* service) { |
| service->service_name = service_description.service_name; |
| service->service_host_port = service_description.address.ToString(); |
| if (!service_description.ip_address.empty()) { |
| service->ip_address = net::IPAddressToString( |
| service_description.ip_address); |
| } |
| service->service_data = service_description.metadata; |
| |
| DVLOG(1) << "Found " << service->service_name << ", " |
| << service->service_host_port << ", " |
| << service->ip_address; |
| } |
| |
| } // namespace |
| |
| DnsSdDeviceLister::DnsSdDeviceLister( |
| local_discovery::ServiceDiscoveryClient* service_discovery_client, |
| DnsSdDelegate* delegate, |
| const std::string& service_type) |
| : delegate_(delegate), |
| device_lister_(this, service_discovery_client, service_type), |
| started_(false) { |
| } |
| |
| DnsSdDeviceLister::~DnsSdDeviceLister() { |
| } |
| |
| void DnsSdDeviceLister::Discover(bool force_update) { |
| if (!started_) { |
| device_lister_.Start(); |
| started_ = true; |
| VLOG(1) << "Started device lister for service type " |
| << device_lister_.service_type(); |
| } |
| device_lister_.DiscoverNewDevices(force_update); |
| VLOG(1) << "Discovery new devices for service type " |
| << device_lister_.service_type(); |
| } |
| |
| void DnsSdDeviceLister::OnDeviceChanged( |
| bool added, |
| const ServiceDescription& service_description) { |
| DnsSdService service; |
| FillServiceInfo(service_description, &service); |
| delegate_->ServiceChanged(device_lister_.service_type(), added, service); |
| } |
| |
| void DnsSdDeviceLister::OnDeviceRemoved(const std::string& service_name) { |
| delegate_->ServiceRemoved(device_lister_.service_type(), service_name); |
| } |
| |
| void DnsSdDeviceLister::OnDeviceCacheFlushed() { |
| delegate_->ServicesFlushed(device_lister_.service_type()); |
| device_lister_.DiscoverNewDevices(false); |
| } |
| |
| } // namespace extensions |