root/third_party/apple_apsl/dnsinfo.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 * Copyright (c) 2004-2006, 2008, 2009, 2011 Apple Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * This file contains Original Code and/or Modifications of Original Code
 * as defined in and that are subject to the Apple Public Source License
 * Version 2.0 (the 'License'). You may not use this file except in
 * compliance with the License. Please obtain a copy of the License at
 * http://www.opensource.apple.com/apsl/ and read it before using this
 * file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
 * Please see the License for the specific language governing rights and
 * limitations under the License.
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

#ifndef __DNSINFO_H__
#define __DNSINFO_H__

/*
 * These routines provide access to the systems DNS configuration
 */

#include <sys/cdefs.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define DNSINFO_VERSION         20111104

#define DEFAULT_SEARCH_ORDER    200000   /* search order for the "default" resolver domain name */

#define DNS_PTR(type, name)                             \
        union {                                         \
                type            name;                   \
                uint64_t        _ ## name ## _p;        \
        }

#define DNS_VAR(type, name)                             \
        type    name


#pragma pack(4)
typedef struct {
        struct in_addr  address;
        struct in_addr  mask;
} dns_sortaddr_t;
#pragma pack()


#pragma pack(4)
typedef struct {
        DNS_PTR(char *,                 domain);        /* domain */
        DNS_VAR(int32_t,                n_nameserver);  /* # nameserver */
        DNS_PTR(struct sockaddr **,     nameserver);
        DNS_VAR(uint16_t,               port);          /* port (in host byte order) */
        DNS_VAR(int32_t,                n_search);      /* # search */
        DNS_PTR(char **,                search);
        DNS_VAR(int32_t,                n_sortaddr);    /* # sortaddr */
        DNS_PTR(dns_sortaddr_t **,      sortaddr);
        DNS_PTR(char *,                 options);       /* options */
        DNS_VAR(uint32_t,               timeout);       /* timeout */
        DNS_VAR(uint32_t,               search_order);  /* search_order */
        DNS_VAR(uint32_t,               if_index);
        DNS_VAR(uint32_t,               flags);
        DNS_VAR(uint32_t,               reach_flags);   /* SCNetworkReachabilityFlags */
        DNS_VAR(uint32_t,               reserved[5]);
} dns_resolver_t;
#pragma pack()


#define DNS_RESOLVER_FLAGS_SCOPED       1               /* configuration is for scoped questions */


#pragma pack(4)
typedef struct {
        DNS_VAR(int32_t,                n_resolver);            /* resolver configurations */
        DNS_PTR(dns_resolver_t **,      resolver);
        DNS_VAR(int32_t,                n_scoped_resolver);     /* "scoped" resolver configurations */
        DNS_PTR(dns_resolver_t **,      scoped_resolver);
        DNS_VAR(uint32_t,               reserved[5]);
} dns_config_t;
#pragma pack()


__BEGIN_DECLS

/*
 * DNS configuration access APIs
 */
const char *
dns_configuration_notify_key    ();

dns_config_t *
dns_configuration_copy          ();

void
dns_configuration_free          (dns_config_t   *config);

void
_dns_configuration_ack          (dns_config_t   *config,
                                 const char     *bundle_id);

__END_DECLS

#endif  /* __DNSINFO_H__ */

/* [<][>][^][v][top][bottom][index][help] */