1 // Copyright 2021 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 #ifndef OSP_IMPL_DNS_SD_PUBLISHER_CLIENT_H_ 6 #define OSP_IMPL_DNS_SD_PUBLISHER_CLIENT_H_ 7 8 #include <memory> 9 10 #include "discovery/common/reporting_client.h" 11 #include "discovery/dnssd/public/dns_sd_service.h" 12 #include "discovery/public/dns_sd_service_publisher.h" 13 #include "osp/impl/service_publisher_impl.h" 14 #include "platform/api/serial_delete_ptr.h" 15 16 namespace openscreen { 17 18 class TaskRunner; 19 20 namespace osp { 21 22 class DnsSdPublisherClient final : public ServicePublisherImpl::Delegate, 23 openscreen::discovery::ReportingClient { 24 public: 25 DnsSdPublisherClient(ServicePublisher::Observer* observer, 26 openscreen::TaskRunner* task_runner); 27 ~DnsSdPublisherClient() override; 28 29 // ServicePublisherImpl::Delegate overrides. 30 void StartPublisher(const ServicePublisher::Config& config) override; 31 void StartAndSuspendPublisher( 32 const ServicePublisher::Config& config) override; 33 void StopPublisher() override; 34 void SuspendPublisher() override; 35 void ResumePublisher(const ServicePublisher::Config& config) override; 36 37 private: 38 DnsSdPublisherClient(const DnsSdPublisherClient&) = delete; 39 DnsSdPublisherClient(DnsSdPublisherClient&&) noexcept = delete; 40 41 // openscreen::discovery::ReportingClient overrides. 42 void OnFatalError(Error) override; 43 void OnRecoverableError(Error) override; 44 45 void StartPublisherInternal(const ServicePublisher::Config& config); 46 SerialDeletePtr<discovery::DnsSdService> CreateDnsSdServiceInternal( 47 const ServicePublisher::Config& config); 48 49 ServicePublisher::Observer* const observer_; 50 TaskRunner* const task_runner_; 51 SerialDeletePtr<discovery::DnsSdService> dns_sd_service_; 52 53 using OspDnsSdPublisher = 54 discovery::DnsSdServicePublisher<ServicePublisher::Config>; 55 56 std::unique_ptr<OspDnsSdPublisher> dns_sd_publisher_; 57 }; 58 59 } // namespace osp 60 } // namespace openscreen 61 62 #endif // OSP_IMPL_DNS_SD_PUBLISHER_CLIENT_H_ 63