1*10465441SEvalZero /** 2*10465441SEvalZero * lwip DNS resolver header file. 3*10465441SEvalZero 4*10465441SEvalZero * Author: Jim Pettinato 5*10465441SEvalZero * April 2007 6*10465441SEvalZero 7*10465441SEvalZero * ported from uIP resolv.c Copyright (c) 2002-2003, Adam Dunkels. 8*10465441SEvalZero * 9*10465441SEvalZero * Redistribution and use in source and binary forms, with or without 10*10465441SEvalZero * modification, are permitted provided that the following conditions 11*10465441SEvalZero * are met: 12*10465441SEvalZero * 1. Redistributions of source code must retain the above copyright 13*10465441SEvalZero * notice, this list of conditions and the following disclaimer. 14*10465441SEvalZero * 2. Redistributions in binary form must reproduce the above copyright 15*10465441SEvalZero * notice, this list of conditions and the following disclaimer in the 16*10465441SEvalZero * documentation and/or other materials provided with the distribution. 17*10465441SEvalZero * 3. The name of the author may not be used to endorse or promote 18*10465441SEvalZero * products derived from this software without specific prior 19*10465441SEvalZero * written permission. 20*10465441SEvalZero * 21*10465441SEvalZero * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 22*10465441SEvalZero * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 23*10465441SEvalZero * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24*10465441SEvalZero * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 25*10465441SEvalZero * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26*10465441SEvalZero * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 27*10465441SEvalZero * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28*10465441SEvalZero * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29*10465441SEvalZero * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30*10465441SEvalZero * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31*10465441SEvalZero * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32*10465441SEvalZero */ 33*10465441SEvalZero 34*10465441SEvalZero #ifndef __LWIP_DNS_H__ 35*10465441SEvalZero #define __LWIP_DNS_H__ 36*10465441SEvalZero 37*10465441SEvalZero #include "lwip/opt.h" 38*10465441SEvalZero 39*10465441SEvalZero #if LWIP_DNS /* don't build if not configured for use in lwipopts.h */ 40*10465441SEvalZero 41*10465441SEvalZero #ifdef __cplusplus 42*10465441SEvalZero extern "C" { 43*10465441SEvalZero #endif 44*10465441SEvalZero 45*10465441SEvalZero /** DNS timer period */ 46*10465441SEvalZero #define DNS_TMR_INTERVAL 1000 47*10465441SEvalZero 48*10465441SEvalZero /** DNS field TYPE used for "Resource Records" */ 49*10465441SEvalZero #define DNS_RRTYPE_A 1 /* a host address */ 50*10465441SEvalZero #define DNS_RRTYPE_NS 2 /* an authoritative name server */ 51*10465441SEvalZero #define DNS_RRTYPE_MD 3 /* a mail destination (Obsolete - use MX) */ 52*10465441SEvalZero #define DNS_RRTYPE_MF 4 /* a mail forwarder (Obsolete - use MX) */ 53*10465441SEvalZero #define DNS_RRTYPE_CNAME 5 /* the canonical name for an alias */ 54*10465441SEvalZero #define DNS_RRTYPE_SOA 6 /* marks the start of a zone of authority */ 55*10465441SEvalZero #define DNS_RRTYPE_MB 7 /* a mailbox domain name (EXPERIMENTAL) */ 56*10465441SEvalZero #define DNS_RRTYPE_MG 8 /* a mail group member (EXPERIMENTAL) */ 57*10465441SEvalZero #define DNS_RRTYPE_MR 9 /* a mail rename domain name (EXPERIMENTAL) */ 58*10465441SEvalZero #define DNS_RRTYPE_NULL 10 /* a null RR (EXPERIMENTAL) */ 59*10465441SEvalZero #define DNS_RRTYPE_WKS 11 /* a well known service description */ 60*10465441SEvalZero #define DNS_RRTYPE_PTR 12 /* a domain name pointer */ 61*10465441SEvalZero #define DNS_RRTYPE_HINFO 13 /* host information */ 62*10465441SEvalZero #define DNS_RRTYPE_MINFO 14 /* mailbox or mail list information */ 63*10465441SEvalZero #define DNS_RRTYPE_MX 15 /* mail exchange */ 64*10465441SEvalZero #define DNS_RRTYPE_TXT 16 /* text strings */ 65*10465441SEvalZero 66*10465441SEvalZero /** DNS field CLASS used for "Resource Records" */ 67*10465441SEvalZero #define DNS_RRCLASS_IN 1 /* the Internet */ 68*10465441SEvalZero #define DNS_RRCLASS_CS 2 /* the CSNET class (Obsolete - used only for examples in some obsolete RFCs) */ 69*10465441SEvalZero #define DNS_RRCLASS_CH 3 /* the CHAOS class */ 70*10465441SEvalZero #define DNS_RRCLASS_HS 4 /* Hesiod [Dyer 87] */ 71*10465441SEvalZero #define DNS_RRCLASS_FLUSH 0x800 /* Flush bit */ 72*10465441SEvalZero 73*10465441SEvalZero /* The size used for the next line is rather a hack, but it prevents including socket.h in all files 74*10465441SEvalZero that include memp.h, and that would possibly break portability (since socket.h defines some types 75*10465441SEvalZero and constants possibly already define by the OS). 76*10465441SEvalZero Calculation rule: 77*10465441SEvalZero sizeof(struct addrinfo) + sizeof(struct sockaddr_in) + DNS_MAX_NAME_LENGTH + 1 byte zero-termination */ 78*10465441SEvalZero #define NETDB_ELEM_SIZE (32 + 16 + DNS_MAX_NAME_LENGTH + 1) 79*10465441SEvalZero 80*10465441SEvalZero #if DNS_LOCAL_HOSTLIST 81*10465441SEvalZero /** struct used for local host-list */ 82*10465441SEvalZero struct local_hostlist_entry { 83*10465441SEvalZero /** static hostname */ 84*10465441SEvalZero const char *name; 85*10465441SEvalZero /** static host address in network byteorder */ 86*10465441SEvalZero ip_addr_t addr; 87*10465441SEvalZero struct local_hostlist_entry *next; 88*10465441SEvalZero }; 89*10465441SEvalZero #if DNS_LOCAL_HOSTLIST_IS_DYNAMIC 90*10465441SEvalZero #ifndef DNS_LOCAL_HOSTLIST_MAX_NAMELEN 91*10465441SEvalZero #define DNS_LOCAL_HOSTLIST_MAX_NAMELEN DNS_MAX_NAME_LENGTH 92*10465441SEvalZero #endif 93*10465441SEvalZero #define LOCALHOSTLIST_ELEM_SIZE ((sizeof(struct local_hostlist_entry) + DNS_LOCAL_HOSTLIST_MAX_NAMELEN + 1)) 94*10465441SEvalZero #endif /* DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ 95*10465441SEvalZero #endif /* DNS_LOCAL_HOSTLIST */ 96*10465441SEvalZero 97*10465441SEvalZero /** Callback which is invoked when a hostname is found. 98*10465441SEvalZero * A function of this type must be implemented by the application using the DNS resolver. 99*10465441SEvalZero * @param name pointer to the name that was looked up. 100*10465441SEvalZero * @param ipaddr pointer to an ip_addr_t containing the IP address of the hostname, 101*10465441SEvalZero * or NULL if the name could not be found (or on any other error). 102*10465441SEvalZero * @param callback_arg a user-specified callback argument passed to dns_gethostbyname 103*10465441SEvalZero */ 104*10465441SEvalZero typedef void (*dns_found_callback)(const char *name, ip_addr_t *ipaddr, void *callback_arg); 105*10465441SEvalZero 106*10465441SEvalZero void dns_init(void); 107*10465441SEvalZero void dns_tmr(void); 108*10465441SEvalZero void dns_setserver(u8_t numdns, ip_addr_t *dnsserver); 109*10465441SEvalZero ip_addr_t dns_getserver(u8_t numdns); 110*10465441SEvalZero err_t dns_gethostbyname(const char *hostname, ip_addr_t *addr, 111*10465441SEvalZero dns_found_callback found, void *callback_arg); 112*10465441SEvalZero 113*10465441SEvalZero #if DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC 114*10465441SEvalZero int dns_local_removehost(const char *hostname, const ip_addr_t *addr); 115*10465441SEvalZero err_t dns_local_addhost(const char *hostname, const ip_addr_t *addr); 116*10465441SEvalZero #endif /* DNS_LOCAL_HOSTLIST && DNS_LOCAL_HOSTLIST_IS_DYNAMIC */ 117*10465441SEvalZero 118*10465441SEvalZero #ifdef __cplusplus 119*10465441SEvalZero } 120*10465441SEvalZero #endif 121*10465441SEvalZero 122*10465441SEvalZero #endif /* LWIP_DNS */ 123*10465441SEvalZero 124*10465441SEvalZero #endif /* __LWIP_DNS_H__ */ 125