1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #ifndef DISCOVERY_DNSSD_IMPL_SERVICE_INSTANCE_H_ 6*3f982cf4SFabien Sanglard #define DISCOVERY_DNSSD_IMPL_SERVICE_INSTANCE_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include <memory> 9*3f982cf4SFabien Sanglard 10*3f982cf4SFabien Sanglard #include "discovery/dnssd/impl/network_interface_config.h" 11*3f982cf4SFabien Sanglard #include "discovery/dnssd/impl/publisher_impl.h" 12*3f982cf4SFabien Sanglard #include "discovery/dnssd/impl/querier_impl.h" 13*3f982cf4SFabien Sanglard #include "discovery/dnssd/public/dns_sd_service.h" 14*3f982cf4SFabien Sanglard #include "platform/base/interface_info.h" 15*3f982cf4SFabien Sanglard 16*3f982cf4SFabien Sanglard namespace openscreen { 17*3f982cf4SFabien Sanglard 18*3f982cf4SFabien Sanglard class TaskRunner; 19*3f982cf4SFabien Sanglard 20*3f982cf4SFabien Sanglard namespace discovery { 21*3f982cf4SFabien Sanglard 22*3f982cf4SFabien Sanglard class MdnsService; 23*3f982cf4SFabien Sanglard 24*3f982cf4SFabien Sanglard class ServiceInstance final : public DnsSdService { 25*3f982cf4SFabien Sanglard public: 26*3f982cf4SFabien Sanglard ServiceInstance(TaskRunner* task_runner, 27*3f982cf4SFabien Sanglard ReportingClient* reporting_client, 28*3f982cf4SFabien Sanglard const Config& config, 29*3f982cf4SFabien Sanglard const InterfaceInfo& network_info); 30*3f982cf4SFabien Sanglard ServiceInstance(const ServiceInstance& other) = delete; 31*3f982cf4SFabien Sanglard ServiceInstance(ServiceInstance&& other) noexcept = delete; 32*3f982cf4SFabien Sanglard ~ServiceInstance() override; 33*3f982cf4SFabien Sanglard 34*3f982cf4SFabien Sanglard ServiceInstance& operator=(const ServiceInstance& other) = delete; 35*3f982cf4SFabien Sanglard ServiceInstance& operator=(ServiceInstance&& other) = delete; 36*3f982cf4SFabien Sanglard network_config()37*3f982cf4SFabien Sanglard const NetworkInterfaceConfig& network_config() const { 38*3f982cf4SFabien Sanglard return network_config_; 39*3f982cf4SFabien Sanglard } 40*3f982cf4SFabien Sanglard 41*3f982cf4SFabien Sanglard // DnsSdService overrides. GetQuerier()42*3f982cf4SFabien Sanglard DnsSdQuerier* GetQuerier() override { return querier_.get(); } GetPublisher()43*3f982cf4SFabien Sanglard DnsSdPublisher* GetPublisher() override { return publisher_.get(); } 44*3f982cf4SFabien Sanglard 45*3f982cf4SFabien Sanglard private: 46*3f982cf4SFabien Sanglard TaskRunner* const task_runner_; 47*3f982cf4SFabien Sanglard 48*3f982cf4SFabien Sanglard std::unique_ptr<MdnsService> mdns_service_; 49*3f982cf4SFabien Sanglard 50*3f982cf4SFabien Sanglard std::unique_ptr<QuerierImpl> querier_; 51*3f982cf4SFabien Sanglard std::unique_ptr<PublisherImpl> publisher_; 52*3f982cf4SFabien Sanglard 53*3f982cf4SFabien Sanglard const NetworkInterfaceConfig network_config_; 54*3f982cf4SFabien Sanglard }; 55*3f982cf4SFabien Sanglard 56*3f982cf4SFabien Sanglard } // namespace discovery 57*3f982cf4SFabien Sanglard } // namespace openscreen 58*3f982cf4SFabien Sanglard 59*3f982cf4SFabien Sanglard #endif // DISCOVERY_DNSSD_IMPL_SERVICE_INSTANCE_H_ 60