1 /* 2 * Copyright (c) 2004-2006, 2008, 2009, 2011 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 #ifndef __DNSINFO_H__ 25 #define __DNSINFO_H__ 26 27 /* 28 * These routines provide access to the systems DNS configuration 29 */ 30 31 #include <Availability.h> 32 #include <sys/cdefs.h> 33 #include <stdint.h> 34 #include <sys/types.h> 35 #include <sys/socket.h> 36 #include <netinet/in.h> 37 #include <AvailabilityMacros.h> 38 39 #define DNSINFO_VERSION 20111104 40 41 #define DEFAULT_SEARCH_ORDER 200000 /* search order for the "default" resolver domain name */ 42 43 #define DNS_PTR(type, name) \ 44 union { \ 45 type name; \ 46 uint64_t _ ## name ## _p; \ 47 } 48 49 #define DNS_VAR(type, name) \ 50 type name 51 52 53 #pragma pack(4) 54 typedef struct { 55 struct in_addr address; 56 struct in_addr mask; 57 } dns_sortaddr_t; 58 #pragma pack() 59 60 61 #pragma pack(4) 62 typedef struct { 63 DNS_PTR(char *, domain); /* domain */ 64 DNS_VAR(int32_t, n_nameserver); /* # nameserver */ 65 DNS_PTR(struct sockaddr **, nameserver); 66 DNS_VAR(uint16_t, port); /* port (in host byte order) */ 67 DNS_VAR(int32_t, n_search); /* # search */ 68 DNS_PTR(char **, search); 69 DNS_VAR(int32_t, n_sortaddr); /* # sortaddr */ 70 DNS_PTR(dns_sortaddr_t **, sortaddr); 71 DNS_PTR(char *, options); /* options */ 72 DNS_VAR(uint32_t, timeout); /* timeout */ 73 DNS_VAR(uint32_t, search_order); /* search_order */ 74 DNS_VAR(uint32_t, if_index); 75 DNS_VAR(uint32_t, flags); 76 #if MAC_OS_X_VERSION_MIN_REQUIRED < 1080 /* MacOS 10.8 */ 77 DNS_VAR(uint32_t, reserved[6]); 78 #else 79 DNS_VAR(uint32_t, reach_flags); /* SCNetworkReachabilityFlags */ 80 DNS_VAR(uint32_t, reserved[5]); 81 #endif 82 } dns_resolver_t; 83 #pragma pack() 84 85 86 #define DNS_RESOLVER_FLAGS_SCOPED 1 /* configuration is for scoped questions */ 87 88 89 #pragma pack(4) 90 typedef struct { 91 DNS_VAR(int32_t, n_resolver); /* resolver configurations */ 92 DNS_PTR(dns_resolver_t **, resolver); 93 DNS_VAR(int32_t, n_scoped_resolver); /* "scoped" resolver configurations */ 94 DNS_PTR(dns_resolver_t **, scoped_resolver); 95 DNS_VAR(uint32_t, reserved[5]); 96 } dns_config_t; 97 #pragma pack() 98 99 100 __BEGIN_DECLS 101 102 /* 103 * DNS configuration access APIs 104 */ 105 const char * 106 dns_configuration_notify_key (void) __OSX_AVAILABLE_STARTING(__MAC_10_4,__IPHONE_2_0); 107 108 dns_config_t * 109 dns_configuration_copy (void) __OSX_AVAILABLE_STARTING(__MAC_10_4,__IPHONE_2_0); 110 111 void 112 dns_configuration_free (dns_config_t *config) __OSX_AVAILABLE_STARTING(__MAC_10_4,__IPHONE_2_0); 113 114 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1080 115 void 116 _dns_configuration_ack (dns_config_t *config, 117 const char *bundle_id) __OSX_AVAILABLE_STARTING(__MAC_10_8, __IPHONE_6_0); 118 #endif 119 120 __END_DECLS 121 122 #endif /* __DNSINFO_H__ */ 123