/* -*- Mode: C; tab-width: 4 -*- * * Copyright (c) 2002, 2004, 2006, 2011 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 * * http://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. */ /*! @header DNS Service Discovery (Deprecated Mach-based API) * * @discussion Note that this API was deprecated in Mac OS X 10.3, and replaced * by the portable cross-platform /usr/include/dns_sd.h API. */ #ifndef __DNS_SERVICE_DISCOVERY_H #define __DNS_SERVICE_DISCOVERY_H #include #include #include #include #include #include __BEGIN_DECLS /* Opaque internal data type */ typedef struct _dns_service_discovery_t * dns_service_discovery_ref; /* possible reply flags values */ enum { kDNSServiceDiscoveryNoFlags = 0, kDNSServiceDiscoveryMoreRepliesImmediately = 1 << 0, }; typedef enum { DNSServiceDomainEnumerationReplyAddDomain, DNSServiceDomainEnumerationReplyAddDomainDefault, DNSServiceDomainEnumerationReplyRemoveDomain, } DNSServiceDomainEnumerationReplyResultType; typedef enum { DNSServiceDiscoverReplyFlagsFinished, DNSServiceDiscoverReplyFlagsMoreComing, } DNSServiceDiscoveryReplyFlags; typedef void (*DNSServiceDomainEnumerationReply)( DNSServiceDomainEnumerationReplyResultType resultType, // One of DNSServiceDomainEnumerationReplyResultType const char *replyDomain, DNSServiceDiscoveryReplyFlags flags, // DNS Service Discovery reply flags information void *context ); /* possible error code values */ typedef enum { kDNSServiceDiscoveryNoError = 0, } DNSServiceRegistrationReplyErrorType; typedef void (*DNSServiceRegistrationReply)( DNSServiceRegistrationReplyErrorType errorCode, void *context ); typedef uint32_t DNSRecordReference; /*! @function DNSServiceResolver_handleReply @discussion This function should be called with the Mach message sent to the port returned by the call to DNSServiceResolverResolve. The reply message will be interpreted and will result in a call to the specified callout function. @param replyMsg The Mach message. */ void DNSServiceDiscovery_handleReply(void *replyMsg); /***************************************************************************/ /* DNS Service Browser */ typedef enum { DNSServiceBrowserReplyAddInstance, // Instance of service found DNSServiceBrowserReplyRemoveInstance // Instance has been removed from network } DNSServiceBrowserReplyResultType; typedef void (*DNSServiceBrowserReply)( DNSServiceBrowserReplyResultType resultType, // One of DNSServiceBrowserReplyResultType const char *replyName, const char *replyType, const char *replyDomain, DNSServiceDiscoveryReplyFlags flags, // DNS Service Discovery reply flags information void *context ); /*! @function DNSServiceBrowserCreate @discussion Asynchronously create a DNS Service browser @param regtype The type of service @param domain The domain in which to find the service @param callBack The function to be called when service instances are found or removed @param context A user specified context which will be passed to the callout function. @result A dns_registration_t */ dns_service_discovery_ref DNSServiceBrowserCreate ( const char *regtype, const char *domain, DNSServiceBrowserReply callBack, void *context ) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3; /***************************************************************************/ /* Resolver requests */ typedef void (*DNSServiceResolverReply)( struct sockaddr *interface, // Needed for scoped addresses like link-local struct sockaddr *address, const char *txtRecord, DNSServiceDiscoveryReplyFlags flags, // DNS Service Discovery reply flags information void *context ); /*! @function DNSServiceResolverResolve @discussion Resolved a named instance of a service to its address, port, and (optionally) other demultiplexing information contained in the TXT record. @param name The name of the service instance @param regtype The type of service @param domain The domain in which to find the service @param callBack The DNSServiceResolverReply function to be called when the specified address has been resolved. @param context A user specified context which will be passed to the callout function. @result A dns_registration_t */ dns_service_discovery_ref DNSServiceResolverResolve ( const char *name, const char *regtype, const char *domain, DNSServiceResolverReply callBack, void *context ) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3; /***************************************************************************/ /* Mach port accessor and deallocation */ /*! @function DNSServiceDiscoveryMachPort @discussion Returns the mach port for a dns_service_discovery_ref @param registration A dns_service_discovery_ref as returned from DNSServiceRegistrationCreate @result A mach reply port which will be sent messages as appropriate. These messages should be passed to the DNSServiceDiscovery_handleReply function. A NULL value indicates that no address was specified or some other error occurred which prevented the resolution from being started. */ mach_port_t DNSServiceDiscoveryMachPort(dns_service_discovery_ref dnsServiceDiscovery) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3; /*! @function DNSServiceDiscoveryDeallocate @discussion Deallocates the DNS Service Discovery type / closes the connection to the server @param dnsServiceDiscovery A dns_service_discovery_ref as returned from a creation or enumeration call @result void */ void DNSServiceDiscoveryDeallocate(dns_service_discovery_ref dnsServiceDiscovery) AVAILABLE_MAC_OS_X_VERSION_10_2_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_3; __END_DECLS #endif /* __DNS_SERVICE_DISCOVERY_H */