// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_DNS_MDNS_CLIENT_H_ #define NET_DNS_MDNS_CLIENT_H_ #include <stdint.h> #include <memory> #include <string> #include <utility> #include <vector> #include "base/functional/callback.h" #include "base/time/time.h" #include "net/base/ip_endpoint.h" #include "net/base/net_export.h" #include "net/dns/dns_query.h" #include "net/dns/dns_response.h" #include "net/dns/record_parsed.h" namespace net { class DatagramServerSocket; class NetLog; class RecordParsed; // Represents a one-time record lookup. A transaction takes one // associated callback (see |MDnsClient::CreateTransaction|) and calls it // whenever a matching record has been found, either from the cache or // by querying the network (it may choose to query either or both based on its // creation flags, see MDnsTransactionFlags). Network-based transactions will // time out after a reasonable number of seconds. class NET_EXPORT MDnsTransaction { … }; // A listener listens for updates regarding a specific record or set of records. // Created by the MDnsClient (see |MDnsClient::CreateListener|) and used to keep // track of listeners. // // TODO([email protected]): Consider moving this inside MDnsClient to better // organize the namespace and avoid confusion with // net::HostResolver::MdnsListener. class NET_EXPORT MDnsListener { … }; // Creates bound datagram sockets ready to use by MDnsClient. class NET_EXPORT MDnsSocketFactory { … }; // Listens for Multicast DNS on the local network. You can access information // regarding multicast DNS either by creating an |MDnsListener| to be notified // of new records, or by creating an |MDnsTransaction| to look up the value of a // specific records. When all listeners and active transactions are destroyed, // the client stops listening on the network and destroys the cache. class NET_EXPORT MDnsClient { … }; // Gets the endpoint for the multicast group a socket should join to receive // MDNS messages. Such sockets should also bind to the endpoint from // GetMDnsReceiveEndPoint(). // // This is also the endpoint messages should be sent to to send MDNS messages. NET_EXPORT IPEndPoint GetMDnsGroupEndPoint(AddressFamily address_family); // Gets the endpoint sockets should be bound to to receive MDNS messages. Such // sockets should also join the multicast group from GetMDnsGroupEndPoint(). NET_EXPORT IPEndPoint GetMDnsReceiveEndPoint(AddressFamily address_family); InterfaceIndexFamilyList; // Returns pairs of interface and address family to bind. Current // implementation returns unique list of all available interfaces. NET_EXPORT InterfaceIndexFamilyList GetMDnsInterfacesToBind(); // Create sockets, binds socket to MDns endpoint, and sets multicast interface // and joins multicast group on for |interface_index|. // Returns NULL if failed. NET_EXPORT std::unique_ptr<DatagramServerSocket> CreateAndBindMDnsSocket( AddressFamily address_family, uint32_t interface_index, NetLog* net_log); } // namespace net #endif // NET_DNS_MDNS_CLIENT_H_