xref: /aosp_15_r20/external/openscreen/osp/impl/dns_sd_publisher_client.h (revision 3f982cf4871df8771c9d4abe6e9a6f8d829b2736)
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