xref: /aosp_15_r20/external/cronet/net/dns/host_resolver_mdns_listener_impl.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 The Chromium Authors
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 NET_DNS_HOST_RESOLVER_MDNS_LISTENER_IMPL_H_
6 #define NET_DNS_HOST_RESOLVER_MDNS_LISTENER_IMPL_H_
7 
8 #include <memory>
9 #include <string>
10 #include <utility>
11 
12 #include "base/memory/raw_ptr.h"
13 #include "base/sequence_checker.h"
14 #include "net/base/net_errors.h"
15 #include "net/dns/host_resolver.h"
16 #include "net/dns/mdns_client.h"
17 #include "net/dns/public/dns_query_type.h"
18 
19 namespace net {
20 
21 class HostPortPair;
22 class RecordParsed;
23 
24 // Intermediary between the HostResolver::CreateMdnsListener API and the
25 // underlying listener functionality in MDnsClient.
26 class HostResolverMdnsListenerImpl : public HostResolver::MdnsListener,
27                                      public net::MDnsListener::Delegate {
28  public:
29   using Delegate = HostResolver::MdnsListener::Delegate;
30 
31   HostResolverMdnsListenerImpl(const HostPortPair& query_host,
32                                DnsQueryType query_type);
33   ~HostResolverMdnsListenerImpl() override;
34 
set_inner_listener(std::unique_ptr<net::MDnsListener> inner_listener)35   void set_inner_listener(std::unique_ptr<net::MDnsListener> inner_listener) {
36     DCHECK_EQ(OK, initialization_error_);
37     inner_listener_ = std::move(inner_listener);
38   }
39 
set_initialization_error(int error)40   void set_initialization_error(int error) {
41     DCHECK(!inner_listener_);
42     initialization_error_ = error;
43   }
44 
45   // HostResolver::MdnsListener implementation
46   int Start(Delegate* delegate) override;
47 
48   // net::MDnsListener::Delegate implementation
49   void OnRecordUpdate(net::MDnsListener::UpdateType update,
50                       const RecordParsed* record) override;
51   void OnNsecRecord(const std::string& name, unsigned type) override;
52   void OnCachePurged() override;
53 
54  private:
55   HostPortPair query_host_;
56   DnsQueryType query_type_;
57 
58   int initialization_error_ = OK;
59   std::unique_ptr<net::MDnsListener> inner_listener_;
60   raw_ptr<Delegate> delegate_;
61 
62   SEQUENCE_CHECKER(sequence_checker_);
63 };
64 
65 }  // namespace net
66 
67 #endif  // NET_DNS_HOST_RESOLVER_MDNS_LISTENER_IMPL_H_
68