1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #ifndef DISCOVERY_DNSSD_IMPL_PUBLISHER_IMPL_H_ 6*3f982cf4SFabien Sanglard #define DISCOVERY_DNSSD_IMPL_PUBLISHER_IMPL_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include "absl/strings/string_view.h" 9*3f982cf4SFabien Sanglard #include "discovery/dnssd/impl/conversion_layer.h" 10*3f982cf4SFabien Sanglard #include "discovery/dnssd/public/dns_sd_instance.h" 11*3f982cf4SFabien Sanglard #include "discovery/dnssd/public/dns_sd_publisher.h" 12*3f982cf4SFabien Sanglard #include "discovery/mdns/mdns_domain_confirmed_provider.h" 13*3f982cf4SFabien Sanglard #include "discovery/mdns/public/mdns_service.h" 14*3f982cf4SFabien Sanglard 15*3f982cf4SFabien Sanglard namespace openscreen { 16*3f982cf4SFabien Sanglard namespace discovery { 17*3f982cf4SFabien Sanglard 18*3f982cf4SFabien Sanglard class NetworkInterfaceConfig; 19*3f982cf4SFabien Sanglard class ReportingClient; 20*3f982cf4SFabien Sanglard 21*3f982cf4SFabien Sanglard class PublisherImpl : public DnsSdPublisher, 22*3f982cf4SFabien Sanglard public MdnsDomainConfirmedProvider { 23*3f982cf4SFabien Sanglard public: 24*3f982cf4SFabien Sanglard PublisherImpl(MdnsService* publisher, 25*3f982cf4SFabien Sanglard ReportingClient* reporting_client, 26*3f982cf4SFabien Sanglard TaskRunner* task_runner, 27*3f982cf4SFabien Sanglard const NetworkInterfaceConfig* network_config); 28*3f982cf4SFabien Sanglard ~PublisherImpl() override; 29*3f982cf4SFabien Sanglard 30*3f982cf4SFabien Sanglard // DnsSdPublisher overrides. 31*3f982cf4SFabien Sanglard Error Register(const DnsSdInstance& instance, Client* client) override; 32*3f982cf4SFabien Sanglard Error UpdateRegistration(const DnsSdInstance& instance) override; 33*3f982cf4SFabien Sanglard ErrorOr<int> DeregisterAll(const std::string& service) override; 34*3f982cf4SFabien Sanglard 35*3f982cf4SFabien Sanglard private: 36*3f982cf4SFabien Sanglard Error UpdatePublishedRegistration(const DnsSdInstance& instance); 37*3f982cf4SFabien Sanglard 38*3f982cf4SFabien Sanglard // MdnsDomainConfirmedProvider overrides. 39*3f982cf4SFabien Sanglard void OnDomainFound(const DomainName& requested_name, 40*3f982cf4SFabien Sanglard const DomainName& confirmed_name) override; 41*3f982cf4SFabien Sanglard 42*3f982cf4SFabien Sanglard // The set of instances which will be published once the mDNS Probe phase 43*3f982cf4SFabien Sanglard // completes. 44*3f982cf4SFabien Sanglard std::map<DnsSdInstance, Client* const> pending_instances_; 45*3f982cf4SFabien Sanglard 46*3f982cf4SFabien Sanglard // Maps from the requested instance to the endpoint which was published after 47*3f982cf4SFabien Sanglard // the mDNS Probe phase was completed. The only difference between these 48*3f982cf4SFabien Sanglard // instances should be the instance name. 49*3f982cf4SFabien Sanglard std::map<DnsSdInstance, DnsSdInstanceEndpoint> published_instances_; 50*3f982cf4SFabien Sanglard 51*3f982cf4SFabien Sanglard MdnsService* const mdns_publisher_; 52*3f982cf4SFabien Sanglard ReportingClient* const reporting_client_; 53*3f982cf4SFabien Sanglard TaskRunner* const task_runner_; 54*3f982cf4SFabien Sanglard const NetworkInterfaceConfig* const network_config_; 55*3f982cf4SFabien Sanglard 56*3f982cf4SFabien Sanglard friend class PublisherTesting; 57*3f982cf4SFabien Sanglard }; 58*3f982cf4SFabien Sanglard 59*3f982cf4SFabien Sanglard } // namespace discovery 60*3f982cf4SFabien Sanglard } // namespace openscreen 61*3f982cf4SFabien Sanglard 62*3f982cf4SFabien Sanglard #endif // DISCOVERY_DNSSD_IMPL_PUBLISHER_IMPL_H_ 63