diff options
Diffstat (limited to 'discovery')
-rw-r--r-- | discovery/BUILD.gn | 75 | ||||
-rw-r--r-- | discovery/DEPS | 2 | ||||
-rw-r--r-- | discovery/common/config.h | 43 | ||||
-rw-r--r-- | discovery/dnssd/impl/DEPS | 10 | ||||
-rw-r--r-- | discovery/dnssd/impl/service_instance.cc | 22 | ||||
-rw-r--r-- | discovery/dnssd/impl/service_instance.h | 4 | ||||
-rw-r--r-- | discovery/dnssd/public/DEPS | 6 | ||||
-rw-r--r-- | discovery/dnssd/public/dns_sd_publisher.h | 4 | ||||
-rw-r--r-- | discovery/mdns/DEPS | 2 | ||||
-rw-r--r-- | discovery/mdns/mdns_service_impl.cc | 11 | ||||
-rw-r--r-- | discovery/mdns/mdns_service_impl.h | 2 | ||||
-rw-r--r-- | discovery/mdns/public/DEPS | 8 | ||||
-rw-r--r-- | discovery/mdns/public/mdns_service.h | 9 |
13 files changed, 78 insertions, 120 deletions
diff --git a/discovery/BUILD.gn b/discovery/BUILD.gn index 11598c8f..dbf0ace8 100644 --- a/discovery/BUILD.gn +++ b/discovery/BUILD.gn @@ -5,20 +5,32 @@ import("//build_overrides/build.gni") import("../testing/libfuzzer/fuzzer_test.gni") -source_set("common") { +source_set("public") { sources = [ "common/config.h", "common/reporting_client.h", + "dnssd/public/dns_sd_instance.cc", + "dnssd/public/dns_sd_instance.h", + "dnssd/public/dns_sd_instance_endpoint.cc", + "dnssd/public/dns_sd_instance_endpoint.h", + "dnssd/public/dns_sd_publisher.h", + "dnssd/public/dns_sd_querier.h", + "dnssd/public/dns_sd_service.h", + "dnssd/public/dns_sd_txt_record.cc", + "dnssd/public/dns_sd_txt_record.h", + "mdns/public/mdns_constants.h", + "mdns/public/mdns_service.cc", + "mdns/public/mdns_service.h", + "public/dns_sd_service_factory.h", + "public/dns_sd_service_publisher.h", + "public/dns_sd_service_watcher.h", ] - + public_deps = [ "../platform" ] deps = [ "../util" ] - - public_deps = [ - "../platform", - "../third_party/abseil", - ] } +# TODO(https://issuetracker.google.com/issues/194234872): +# Move implementation files to impl/ source_set("mdns") { sources = [ "mdns/mdns_domain_confirmed_provider.h", @@ -47,21 +59,16 @@ source_set("mdns") { "mdns/mdns_trackers.h", "mdns/mdns_writer.cc", "mdns/mdns_writer.h", - "mdns/public/mdns_constants.h", - "mdns/public/mdns_service.cc", - "mdns/public/mdns_service.h", ] - deps = [ "../util" ] - - public_deps = [ - ":common", + public_deps = [ "../third_party/abseil" ] + deps = [ + ":public", "../platform", - "../third_party/abseil", + "../util", ] } -# TODO(issuetracker.google.com/179705382): Separate out a public target. source_set("dnssd") { sources = [ "dnssd/impl/conversion_layer.cc", @@ -82,34 +89,12 @@ source_set("dnssd") { "dnssd/impl/service_instance.h", "dnssd/impl/service_key.cc", "dnssd/impl/service_key.h", - "dnssd/public/dns_sd_instance.cc", - "dnssd/public/dns_sd_instance.h", - "dnssd/public/dns_sd_instance_endpoint.cc", - "dnssd/public/dns_sd_instance_endpoint.h", - "dnssd/public/dns_sd_publisher.h", - "dnssd/public/dns_sd_querier.h", - "dnssd/public/dns_sd_service.h", - "dnssd/public/dns_sd_txt_record.cc", - "dnssd/public/dns_sd_txt_record.h", ] - public_deps = [ - ":common", + deps = [ ":mdns", - "../util", - ] -} - -source_set("public") { - sources = [ - "public/dns_sd_service_factory.h", - "public/dns_sd_service_publisher.h", - "public/dns_sd_service_watcher.h", - ] - - public_deps = [ - ":common", - ":dnssd", + ":public", + "../third_party/abseil", "../util", ] } @@ -133,8 +118,9 @@ source_set("testing") { sources += [ "mdns/testing/hash_test_util_abseil.h" ] } - public_deps = [ + deps = [ ":mdns", + ":public", "../third_party/abseil", "../third_party/googletest:gmock", "../third_party/googletest:gtest", @@ -185,7 +171,10 @@ source_set("unittests") { openscreen_fuzzer_test("mdns_fuzzer") { sources = [ "mdns/mdns_reader_fuzztest.cc" ] - deps = [ ":mdns" ] + deps = [ + ":mdns", + ":public", + ] seed_corpus = "mdns/fuzzer_seeds" diff --git a/discovery/DEPS b/discovery/DEPS index de7afcec..4d758dcd 100644 --- a/discovery/DEPS +++ b/discovery/DEPS @@ -4,6 +4,6 @@ include_rules = [ # Intra-discovery dependencies must be explicit. '-discovery', - # All discovery code can use discovery/common + # All discovery code can use discovery/common. '+discovery/common', ] diff --git a/discovery/common/config.h b/discovery/common/config.h index b1ef731a..940001ce 100644 --- a/discovery/common/config.h +++ b/discovery/common/config.h @@ -14,28 +14,13 @@ namespace discovery { // This struct provides parameters needed to initialize the discovery pipeline. struct Config { - struct NetworkInfo { - enum AddressFamilies : uint8_t { - kNoAddressFamily = 0, - kUseIpV4 = 0x01 << 0, - kUseIpV6 = 0x01 << 1 - }; - - // Network Interface on which discovery should be run. - InterfaceInfo interface; - - // IP Address Families supported by this network interface and on which the - // mDNS Service should listen for and/or publish records. - AddressFamilies supported_address_families; - }; - /***************************************** * Common Settings *****************************************/ // Interfaces on which services should be published, and on which discovery // should listen for announced service instances. - std::vector<NetworkInfo> network_info; + std::vector<InterfaceInfo> network_info; // Maximum allowed size in bytes for the rdata in an incoming record. All // received records with rdata size exceeding this size will be dropped. @@ -98,32 +83,6 @@ struct Config { bool ignore_nsec_responses = false; }; -inline Config::NetworkInfo::AddressFamilies operator&( - Config::NetworkInfo::AddressFamilies lhs, - Config::NetworkInfo::AddressFamilies rhs) { - return static_cast<Config::NetworkInfo::AddressFamilies>( - static_cast<uint8_t>(lhs) & static_cast<uint8_t>(rhs)); -} - -inline Config::NetworkInfo::AddressFamilies operator|( - Config::NetworkInfo::AddressFamilies lhs, - Config::NetworkInfo::AddressFamilies rhs) { - return static_cast<Config::NetworkInfo::AddressFamilies>( - static_cast<uint8_t>(lhs) | static_cast<uint8_t>(rhs)); -} - -inline Config::NetworkInfo::AddressFamilies operator|=( - Config::NetworkInfo::AddressFamilies& lhs, - Config::NetworkInfo::AddressFamilies rhs) { - return lhs = lhs | rhs; -} - -inline Config::NetworkInfo::AddressFamilies operator&=( - Config::NetworkInfo::AddressFamilies& lhs, - Config::NetworkInfo::AddressFamilies rhs) { - return lhs = lhs & rhs; -} - } // namespace discovery } // namespace openscreen diff --git a/discovery/dnssd/impl/DEPS b/discovery/dnssd/impl/DEPS index 243d363d..57d73c16 100644 --- a/discovery/dnssd/impl/DEPS +++ b/discovery/dnssd/impl/DEPS @@ -2,5 +2,13 @@ include_rules = [ '+discovery/dnssd/public', - '+discovery/mdns', + '+discovery/mdns/public', + + # TODO(https://issuetracker.google.com/issues/194234872): + # Move these to discovery/mdns/public + '+discovery/mdns/mdns_domain_confirmed_provider.h', + '+discovery/mdns/mdns_record_changed_callback.h', + '+discovery/mdns/mdns_records.h', + + '+discovery/mdns/testing/mdns_test_util.h', ] diff --git a/discovery/dnssd/impl/service_instance.cc b/discovery/dnssd/impl/service_instance.cc index 7d4b014f..d923eef9 100644 --- a/discovery/dnssd/impl/service_instance.cc +++ b/discovery/dnssd/impl/service_instance.cc @@ -16,29 +16,15 @@ namespace discovery { ServiceInstance::ServiceInstance(TaskRunner* task_runner, ReportingClient* reporting_client, const Config& config, - const Config::NetworkInfo& network_info) + const InterfaceInfo& network_info) : task_runner_(task_runner), mdns_service_(MdnsService::Create(task_runner, reporting_client, config, network_info)), - network_config_(network_info.interface.index, - (network_info.supported_address_families & - Config::NetworkInfo::kUseIpV4) - ? network_info.interface.GetIpAddressV4() - : IPAddress{}, - (network_info.supported_address_families & - Config::NetworkInfo::kUseIpV6) - ? network_info.interface.GetIpAddressV6() - : IPAddress{}) { - const Config::NetworkInfo::AddressFamilies supported_address_families = - network_info.supported_address_families; - - OSP_DCHECK(!(supported_address_families & Config::NetworkInfo::kUseIpV4) || - network_config_.HasAddressV4()); - OSP_DCHECK(!(supported_address_families & Config::NetworkInfo::kUseIpV6) || - network_config_.HasAddressV6()); - + network_config_(network_info.index, + network_info.GetIpAddressV4(), + network_info.GetIpAddressV6()) { if (config.enable_querying) { querier_ = std::make_unique<QuerierImpl>( mdns_service_.get(), task_runner_, reporting_client, &network_config_); diff --git a/discovery/dnssd/impl/service_instance.h b/discovery/dnssd/impl/service_instance.h index e06ca564..798a17b0 100644 --- a/discovery/dnssd/impl/service_instance.h +++ b/discovery/dnssd/impl/service_instance.h @@ -26,9 +26,9 @@ class ServiceInstance final : public DnsSdService { ServiceInstance(TaskRunner* task_runner, ReportingClient* reporting_client, const Config& config, - const Config::NetworkInfo& network_info); + const InterfaceInfo& network_info); ServiceInstance(const ServiceInstance& other) = delete; - ServiceInstance(ServiceInstance&& other) = delete; + ServiceInstance(ServiceInstance&& other) noexcept = delete; ~ServiceInstance() override; ServiceInstance& operator=(const ServiceInstance& other) = delete; diff --git a/discovery/dnssd/public/DEPS b/discovery/dnssd/public/DEPS new file mode 100644 index 00000000..e8ae0cbe --- /dev/null +++ b/discovery/dnssd/public/DEPS @@ -0,0 +1,6 @@ +# -*- Mode: Python; -*- + +include_rules = [ + # Layering rule. + '-discovery/dnssd/impl', +] diff --git a/discovery/dnssd/public/dns_sd_publisher.h b/discovery/dnssd/public/dns_sd_publisher.h index 3c139b4e..10eb03ad 100644 --- a/discovery/dnssd/public/dns_sd_publisher.h +++ b/discovery/dnssd/public/dns_sd_publisher.h @@ -19,7 +19,6 @@ class DnsSdPublisher { public: class Client { public: - virtual ~Client() = default; // Callback called when an endpoint is successfully claimed and published // via the Register() method. These values are expected to only differ in @@ -29,6 +28,9 @@ class DnsSdPublisher { virtual void OnEndpointClaimed( const DnsSdInstance& requested_instance, const DnsSdInstanceEndpoint& claimed_endpoint) = 0; + + protected: + virtual ~Client() = default; }; virtual ~DnsSdPublisher() = default; diff --git a/discovery/mdns/DEPS b/discovery/mdns/DEPS index 309d03f4..c0348a87 100644 --- a/discovery/mdns/DEPS +++ b/discovery/mdns/DEPS @@ -2,4 +2,6 @@ include_rules = [ '+discovery/mdns/public', + # DNS-SD is layered on top of mDNS. + '-discovery/dnssd', ] diff --git a/discovery/mdns/mdns_service_impl.cc b/discovery/mdns/mdns_service_impl.cc index 6d94c3c7..bbbf0815 100644 --- a/discovery/mdns/mdns_service_impl.cc +++ b/discovery/mdns/mdns_service_impl.cc @@ -20,7 +20,7 @@ std::unique_ptr<MdnsService> MdnsService::Create( TaskRunner* task_runner, ReportingClient* reporting_client, const Config& config, - const Config::NetworkInfo& network_info) { + const InterfaceInfo& network_info) { return std::make_unique<MdnsServiceImpl>( task_runner, Clock::now, reporting_client, config, network_info); } @@ -29,22 +29,21 @@ MdnsServiceImpl::MdnsServiceImpl(TaskRunner* task_runner, ClockNowFunctionPtr now_function, ReportingClient* reporting_client, const Config& config, - const Config::NetworkInfo& network_info) + const InterfaceInfo& network_info) : task_runner_(task_runner), now_function_(now_function), reporting_client_(reporting_client), receiver_(config), - interface_(network_info.interface.index) { + interface_(network_info.index) { OSP_DCHECK(task_runner_); OSP_DCHECK(reporting_client_); - OSP_DCHECK(network_info.supported_address_families); // Create all UDP sockets needed for this object. They should not yet be bound // so that they do not send or receive data until the objects on which their // callback depends is initialized. // NOTE: we bind to the Any addresses here because traffic is filtered by // the multicast join calls. - if (network_info.supported_address_families & Config::NetworkInfo::kUseIpV4) { + if (network_info.GetIpAddressV4()) { ErrorOr<std::unique_ptr<UdpSocket>> socket = UdpSocket::Create( task_runner, this, IPEndpoint{IPAddress::kAnyV4(), kDefaultMulticastPort}); @@ -55,7 +54,7 @@ MdnsServiceImpl::MdnsServiceImpl(TaskRunner* task_runner, socket_v4_ = std::move(socket.value()); } - if (network_info.supported_address_families & Config::NetworkInfo::kUseIpV6) { + if (network_info.GetIpAddressV6()) { ErrorOr<std::unique_ptr<UdpSocket>> socket = UdpSocket::Create( task_runner, this, IPEndpoint{IPAddress::kAnyV6(), kDefaultMulticastPort}); diff --git a/discovery/mdns/mdns_service_impl.h b/discovery/mdns/mdns_service_impl.h index e1c15226..523f078f 100644 --- a/discovery/mdns/mdns_service_impl.h +++ b/discovery/mdns/mdns_service_impl.h @@ -40,7 +40,7 @@ class MdnsServiceImpl : public MdnsService, public UdpSocket::Client { ClockNowFunctionPtr now_function, ReportingClient* reporting_client, const Config& config, - const Config::NetworkInfo& network_info); + const InterfaceInfo& network_info); ~MdnsServiceImpl() override; // MdnsService Overrides. diff --git a/discovery/mdns/public/DEPS b/discovery/mdns/public/DEPS new file mode 100644 index 00000000..5b65c0e4 --- /dev/null +++ b/discovery/mdns/public/DEPS @@ -0,0 +1,8 @@ +# -*- Mode: Python; -*- +include_rules = [ + # Layering rule. + '-discovery/mdns', + # Except ourselves. + '+discovery/mdns/public', +] + diff --git a/discovery/mdns/public/mdns_service.h b/discovery/mdns/public/mdns_service.h index 03e58008..76a8f05d 100644 --- a/discovery/mdns/public/mdns_service.h +++ b/discovery/mdns/public/mdns_service.h @@ -34,11 +34,10 @@ class MdnsService { // Creates a new MdnsService instance, to be owned by the caller. On failure, // returns nullptr. |task_runner|, |reporting_client|, and |config| must exist // for the duration of the resulting instance's life. - static std::unique_ptr<MdnsService> Create( - TaskRunner* task_runner, - ReportingClient* reporting_client, - const Config& config, - const Config::NetworkInfo& network_info); + static std::unique_ptr<MdnsService> Create(TaskRunner* task_runner, + ReportingClient* reporting_client, + const Config& config, + const InterfaceInfo& network_info); // Starts an mDNS query with the given properties. Updated records are passed // to |callback|. The caller must ensure |callback| remains alive while it is |