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