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_SERVICE_DISPATCHER_H_ 6*3f982cf4SFabien Sanglard #define DISCOVERY_DNSSD_IMPL_SERVICE_DISPATCHER_H_ 7*3f982cf4SFabien Sanglard 8*3f982cf4SFabien Sanglard #include <memory> 9*3f982cf4SFabien Sanglard 10*3f982cf4SFabien Sanglard #include "discovery/dnssd/impl/querier_impl.h" 11*3f982cf4SFabien Sanglard #include "discovery/dnssd/impl/service_instance.h" 12*3f982cf4SFabien Sanglard #include "discovery/dnssd/public/dns_sd_querier.h" 13*3f982cf4SFabien Sanglard #include "discovery/dnssd/public/dns_sd_service.h" 14*3f982cf4SFabien Sanglard 15*3f982cf4SFabien Sanglard namespace openscreen { 16*3f982cf4SFabien Sanglard 17*3f982cf4SFabien Sanglard class TaskRunner; 18*3f982cf4SFabien Sanglard 19*3f982cf4SFabien Sanglard namespace discovery { 20*3f982cf4SFabien Sanglard 21*3f982cf4SFabien Sanglard struct Config; 22*3f982cf4SFabien Sanglard class ReportingClient; 23*3f982cf4SFabien Sanglard 24*3f982cf4SFabien Sanglard class ServiceDispatcher final : public DnsSdPublisher, 25*3f982cf4SFabien Sanglard public DnsSdQuerier, 26*3f982cf4SFabien Sanglard public DnsSdService { 27*3f982cf4SFabien Sanglard public: 28*3f982cf4SFabien Sanglard ServiceDispatcher(TaskRunner* task_runner, 29*3f982cf4SFabien Sanglard ReportingClient* reporting_client, 30*3f982cf4SFabien Sanglard const Config& config); 31*3f982cf4SFabien Sanglard ~ServiceDispatcher() override; 32*3f982cf4SFabien Sanglard 33*3f982cf4SFabien Sanglard // DnsSdService overrides. GetQuerier()34*3f982cf4SFabien Sanglard DnsSdQuerier* GetQuerier() override { return querier_; } GetPublisher()35*3f982cf4SFabien Sanglard DnsSdPublisher* GetPublisher() override { return publisher_; } 36*3f982cf4SFabien Sanglard 37*3f982cf4SFabien Sanglard private: 38*3f982cf4SFabien Sanglard // DnsSdQuerier overrides. 39*3f982cf4SFabien Sanglard void StartQuery(const std::string& service, Callback* cb) override; 40*3f982cf4SFabien Sanglard void StopQuery(const std::string& service, Callback* cb) override; 41*3f982cf4SFabien Sanglard void ReinitializeQueries(const std::string& service) override; 42*3f982cf4SFabien Sanglard 43*3f982cf4SFabien Sanglard // DnsSdPublisher overrides. 44*3f982cf4SFabien Sanglard Error Register(const DnsSdInstance& instance, Client* client) override; 45*3f982cf4SFabien Sanglard Error UpdateRegistration(const DnsSdInstance& instance) override; 46*3f982cf4SFabien Sanglard ErrorOr<int> DeregisterAll(const std::string& service) override; 47*3f982cf4SFabien Sanglard 48*3f982cf4SFabien Sanglard std::vector<std::unique_ptr<ServiceInstance>> service_instances_; 49*3f982cf4SFabien Sanglard 50*3f982cf4SFabien Sanglard TaskRunner* const task_runner_; 51*3f982cf4SFabien Sanglard 52*3f982cf4SFabien Sanglard // Pointers either to this instance or to nullptr depending whether the below 53*3f982cf4SFabien Sanglard // types are supported. 54*3f982cf4SFabien Sanglard DnsSdPublisher* const publisher_; 55*3f982cf4SFabien Sanglard DnsSdQuerier* const querier_; 56*3f982cf4SFabien Sanglard }; 57*3f982cf4SFabien Sanglard 58*3f982cf4SFabien Sanglard } // namespace discovery 59*3f982cf4SFabien Sanglard } // namespace openscreen 60*3f982cf4SFabien Sanglard 61*3f982cf4SFabien Sanglard #endif // DISCOVERY_DNSSD_IMPL_SERVICE_DISPATCHER_H_ 62