dnsinfo.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. #ifndef __DNSINFO_H__
  24. #define __DNSINFO_H__
  25. /*
  26. * These routines provide access to the systems DNS configuration
  27. */
  28. #include <sys/cdefs.h>
  29. #include <stdint.h>
  30. #include <sys/types.h>
  31. #include <sys/socket.h>
  32. #include <netinet/in.h>
  33. #define DNSINFO_VERSION 20111104
  34. #define DEFAULT_SEARCH_ORDER 200000 /* search order for the "default" resolver domain name */
  35. #define DNS_PTR(type, name) \
  36. union { \
  37. type name; \
  38. uint64_t _ ## name ## _p; \
  39. }
  40. #define DNS_VAR(type, name) \
  41. type name
  42. #pragma pack(4)
  43. typedef struct {
  44. struct in_addr address;
  45. struct in_addr mask;
  46. } dns_sortaddr_t;
  47. #pragma pack()
  48. #pragma pack(4)
  49. typedef struct {
  50. DNS_PTR(char *, domain); /* domain */
  51. DNS_VAR(int32_t, n_nameserver); /* # nameserver */
  52. DNS_PTR(struct sockaddr **, nameserver);
  53. DNS_VAR(uint16_t, port); /* port (in host byte order) */
  54. DNS_VAR(int32_t, n_search); /* # search */
  55. DNS_PTR(char **, search);
  56. DNS_VAR(int32_t, n_sortaddr); /* # sortaddr */
  57. DNS_PTR(dns_sortaddr_t **, sortaddr);
  58. DNS_PTR(char *, options); /* options */
  59. DNS_VAR(uint32_t, timeout); /* timeout */
  60. DNS_VAR(uint32_t, search_order); /* search_order */
  61. DNS_VAR(uint32_t, if_index);
  62. DNS_VAR(uint32_t, flags);
  63. DNS_VAR(uint32_t, reach_flags); /* SCNetworkReachabilityFlags */
  64. DNS_VAR(uint32_t, reserved[5]);
  65. } dns_resolver_t;
  66. #pragma pack()
  67. #define DNS_RESOLVER_FLAGS_SCOPED 1 /* configuration is for scoped questions */
  68. #pragma pack(4)
  69. typedef struct {
  70. DNS_VAR(int32_t, n_resolver); /* resolver configurations */
  71. DNS_PTR(dns_resolver_t **, resolver);
  72. DNS_VAR(int32_t, n_scoped_resolver); /* "scoped" resolver configurations */
  73. DNS_PTR(dns_resolver_t **, scoped_resolver);
  74. DNS_VAR(uint32_t, reserved[5]);
  75. } dns_config_t;
  76. #pragma pack()
  77. __BEGIN_DECLS
  78. /*
  79. * DNS configuration access APIs
  80. */
  81. const char *
  82. dns_configuration_notify_key ();
  83. dns_config_t *
  84. dns_configuration_copy ();
  85. void
  86. dns_configuration_free (dns_config_t *config);
  87. void
  88. _dns_configuration_ack (dns_config_t *config,
  89. const char *bundle_id);
  90. __END_DECLS
  91. #endif /* __DNSINFO_H__ */