// Copyright 2019 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 "discovery/dnssd/impl/service_instance.h" #include #include "discovery/common/config.h" #include "discovery/mdns/public/mdns_service.h" #include "platform/api/task_runner.h" namespace openscreen { namespace discovery { ServiceInstance::ServiceInstance(TaskRunner* task_runner, ReportingClient* reporting_client, const Config& config, const Config::NetworkInfo& network_info) : task_runner_(task_runner), mdns_service_(MdnsService::Create(task_runner, reporting_client, config, network_info)), network_config_(network_info.interface.index, (network_info.supported_address_families & Config::NetworkInfo::kUseIpV4) ? network_info.interface.GetIpAddressV4() : IPAddress{}, (network_info.supported_address_families & Config::NetworkInfo::kUseIpV6) ? network_info.interface.GetIpAddressV6() : IPAddress{}) { const Config::NetworkInfo::AddressFamilies supported_address_families = network_info.supported_address_families; OSP_DCHECK(!(supported_address_families & Config::NetworkInfo::kUseIpV4) || network_config_.HasAddressV4()); OSP_DCHECK(!(supported_address_families & Config::NetworkInfo::kUseIpV6) || network_config_.HasAddressV6()); if (config.enable_querying) { querier_ = std::make_unique( mdns_service_.get(), task_runner_, reporting_client, &network_config_); } if (config.enable_publication) { publisher_ = std::make_unique( mdns_service_.get(), reporting_client, task_runner_, &network_config_); } } ServiceInstance::~ServiceInstance() { OSP_DCHECK(task_runner_->IsRunningOnTaskRunner()); } } // namespace discovery } // namespace openscreen