/* * Copyright (c) 2020-2023 Apple Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * This file contains the function declarations for discover_resolver.c, * which will be called by mDNSCore code to set up the automatic browsing * domain resolver. */ #ifndef __RESOLVER_DISCOVER_H__ #define __RESOLVER_DISCOVER_H__ #include "mDNSFeatures.h" // for MDNSRESPONDER_SUPPORTS(COMMON, LOCAL_DNS_RESOLVER_DISCOVERY) #if MDNSRESPONDER_SUPPORTS(COMMON, LOCAL_DNS_RESOLVER_DISCOVERY) //====================================================================================================================== // MARK: - Headers #include "mDNSEmbeddedAPI.h" #include "general.h" #include #include "nullability.h" MDNS_ASSUME_NONNULL_BEGIN MDNS_C_DECLARATIONS_BEGIN //====================================================================================================================== // MARK: - Functions /*! * @brief * Start the local DNS resolver discovery for the domain specified, by using reference counting to add/retain the discovery process. * * @param domain_to_discover * The domain where the local DNS resolver should be discovered. * * @param grab_mdns_lock * The boolean value of whether to grab the mDNS_Lock when doing query-related operation. * * @result * True if the function succeeds, otherwise, false. * * @discussion * When resolver_discovery_add is called, the discovery is not necessarily started on behalf of the caller. The discovery may have been * started earlier by other caller. In which case, the same discovery activity will be retained and reused for the current caller. */ bool resolver_discovery_add(const domainname *domain_to_discover, bool grab_mdns_lock); /*! * @brief * Stop the local DNS resolver discovery for the domain specified, by using reference counting to remove/release the discovery process. * * @param domain_to_discover * The domain where the local DNS resolver should be discovered. * * @param grab_mdns_lock * The boolean value of whether to grab the mDNS_Lock when doing query-related operation. * * @result * True if the function succeeds, otherwise, false. * * @discussion * When resolver_discovery_remove is called, the discovery is not necessarily stopped on behalf of the caller. The discovery may be still used * by other callers. In which case, the discovery will not be stopped, instead, it will be removed/released with reference counting. The resolver discovery will * not be stopped until the last caller of resolver_discovery_add calls resolver_discovery_remove. */ bool resolver_discovery_remove(const domainname *domain_to_discover, bool grab_mdns_lock); /*! * @brief * Get the next time when mDNSCore should start processing the previously scheduled task for the resolver discovery. * * @result * The next time to perform resolver discovery related tasks. */ mDNSs32 resolver_discovery_get_next_scheduled_event(void); #define ResolverDiscovery_GetNextScheduledEvent(...) resolver_discovery_get_next_scheduled_event(__VA_ARGS__) /*! * @brief * Perform resolver discovery related tasks. */ void resolver_discovery_perform_periodic_tasks(void); #define ResolverDiscovery_PerformPeriodicTasks(...) resolver_discovery_perform_periodic_tasks(__VA_ARGS__) /*! * @brief * Check if the current DNS question is allowed to do resolve discovery, if so, return the domain that can do resolver discovery. * * @param q * The DNS question. * * @param out_domain * The pointer of the domain name to do resolver discovery when the DNS question is allowed to discover it. * * @result * Returns true if the question is capable of doing resolver discovery and `out_domain` contains the domain, otherwise, false. */ bool dns_question_requires_resolver_discovery(const DNSQuestion *q, const domainname * NULLABLE * NONNULL out_domain); MDNS_C_DECLARATIONS_END MDNS_ASSUME_NONNULL_END #endif // MDNSRESPONDER_SUPPORTS(COMMON, LOCAL_DNS_RESOLVER_DISCOVERY) #endif /* __RESOLVER_DISCOVER_H__ */