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 3// found in the LICENSE file. 4 5#include "chrome/browser/extensions/api/mdns/dns_sd_device_lister.h" 6 7#include "chrome/common/extensions/api/mdns.h" 8 9using local_discovery::ServiceDescription; 10 11namespace extensions { 12 13namespace { 14 15void FillServiceInfo(const ServiceDescription& service_description, 16 DnsSdService* service) { 17 service->service_name = service_description.service_name; 18 service->service_host_port = service_description.address.ToString(); 19 if (!service_description.ip_address.empty()) { 20 service->ip_address = net::IPAddressToString( 21 service_description.ip_address); 22 } 23 service->service_data = service_description.metadata; 24 25 VLOG(1) << "Found " << service->service_name << ", " 26 << service->service_host_port << ", " 27 << service->ip_address; 28} 29 30} // namespace 31 32DnsSdDeviceLister::DnsSdDeviceLister( 33 local_discovery::ServiceDiscoveryClient* service_discovery_client, 34 DnsSdDelegate* delegate, 35 const std::string& service_type) 36 : delegate_(delegate), 37 device_lister_(this, service_discovery_client, service_type), 38 started_(false) { 39} 40 41DnsSdDeviceLister::~DnsSdDeviceLister() { 42} 43 44void DnsSdDeviceLister::Discover(bool force_update) { 45 if (!started_) { 46 device_lister_.Start(); 47 started_ = true; 48 VLOG(1) << "Started device lister for service type " 49 << device_lister_.service_type(); 50 } 51 device_lister_.DiscoverNewDevices(force_update); 52 VLOG(1) << "Discovery new devices for service type " 53 << device_lister_.service_type(); 54} 55 56void DnsSdDeviceLister::OnDeviceChanged( 57 bool added, 58 const ServiceDescription& service_description) { 59 DnsSdService service; 60 FillServiceInfo(service_description, &service); 61 VLOG(1) << "OnDeviceChanged: " 62 << "service_name: " << service.service_name << ", " 63 << "added: " << added << ", " 64 << "service_type: " << device_lister_.service_type(); 65 delegate_->ServiceChanged(device_lister_.service_type(), added, service); 66} 67 68void DnsSdDeviceLister::OnDeviceRemoved(const std::string& service_name) { 69 VLOG(1) << "OnDeviceRemoved: " 70 << "service_name: " << service_name << ", " 71 << "service_type: " << device_lister_.service_type(); 72 delegate_->ServiceRemoved(device_lister_.service_type(), service_name); 73} 74 75void DnsSdDeviceLister::OnDeviceCacheFlushed() { 76 VLOG(1) << "OnDeviceCacheFlushed: " 77 << "service_type: " << device_lister_.service_type(); 78 delegate_->ServicesFlushed(device_lister_.service_type()); 79 device_lister_.DiscoverNewDevices(false); 80} 81 82} // namespace extensions 83