]>
Commit | Line | Data |
---|---|---|
1 | /* | |
2 | * Redistribution and use in source and binary forms, with or without modification, | |
3 | * are permitted provided that the following conditions are met: | |
4 | * | |
5 | * 1. Redistributions of source code must retain the above copyright notice, | |
6 | * this list of conditions and the following disclaimer. | |
7 | * 2. Redistributions in binary form must reproduce the above copyright notice, | |
8 | * this list of conditions and the following disclaimer in the documentation | |
9 | * and/or other materials provided with the distribution. | |
10 | * 3. The name of the author may not be used to endorse or promote products | |
11 | * derived from this software without specific prior written permission. | |
12 | * | |
13 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED | |
14 | * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
15 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT | |
16 | * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
17 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT | |
18 | * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
19 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
20 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING | |
21 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY | |
22 | * OF SUCH DAMAGE. | |
23 | * | |
24 | * This file is part of the lwIP TCP/IP stack. | |
25 | * | |
26 | * Author: Simon Goldschmidt | |
27 | * | |
28 | */ | |
29 | ||
30 | #include "lwip/opt.h" | |
31 | ||
32 | #if LWIP_DNS && LWIP_SOCKET | |
33 | ||
34 | #include "lwip/sockets.h" | |
35 | ||
36 | /* some rarely used options */ | |
37 | #ifndef LWIP_DNS_API_DECLARE_H_ERRNO | |
38 | #define LWIP_DNS_API_DECLARE_H_ERRNO 1 | |
39 | #endif | |
40 | ||
41 | #ifndef LWIP_DNS_API_DEFINE_ERRORS | |
42 | #define LWIP_DNS_API_DEFINE_ERRORS 1 | |
43 | #endif | |
44 | ||
45 | #ifndef LWIP_DNS_API_DECLARE_STRUCTS | |
46 | #define LWIP_DNS_API_DECLARE_STRUCTS 1 | |
47 | #endif | |
48 | ||
49 | #if LWIP_DNS_API_DEFINE_ERRORS | |
50 | /** Errors used by the DNS API functions, h_errno can be one of them */ | |
51 | #define EAI_NONAME 200 | |
52 | #define EAI_SERVICE 201 | |
53 | #define EAI_FAIL 202 | |
54 | #define EAI_MEMORY 203 | |
55 | ||
56 | #define HOST_NOT_FOUND 210 | |
57 | #define NO_DATA 211 | |
58 | #define NO_RECOVERY 212 | |
59 | #define TRY_AGAIN 213 | |
60 | #endif /* LWIP_DNS_API_DEFINE_ERRORS */ | |
61 | ||
62 | #if LWIP_DNS_API_DECLARE_STRUCTS | |
63 | struct hostent { | |
64 | char *h_name; /* Official name of the host. */ | |
65 | char **h_aliases; /* A pointer to an array of pointers to alternative host names, | |
66 | terminated by a null pointer. */ | |
67 | int h_addrtype; /* Address type. */ | |
68 | int h_length; /* The length, in bytes, of the address. */ | |
69 | char **h_addr_list; /* A pointer to an array of pointers to network addresses (in | |
70 | network byte order) for the host, terminated by a null pointer. */ | |
71 | #define h_addr h_addr_list[0] /* for backward compatibility */ | |
72 | }; | |
73 | ||
74 | struct addrinfo { | |
75 | int ai_flags; /* Input flags. */ | |
76 | int ai_family; /* Address family of socket. */ | |
77 | int ai_socktype; /* Socket type. */ | |
78 | int ai_protocol; /* Protocol of socket. */ | |
79 | socklen_t ai_addrlen; /* Length of socket address. */ | |
80 | struct sockaddr *ai_addr; /* Socket address of socket. */ | |
81 | char *ai_canonname; /* Canonical name of service location. */ | |
82 | struct addrinfo *ai_next; /* Pointer to next in list. */ | |
83 | }; | |
84 | #endif /* LWIP_DNS_API_DECLARE_STRUCTS */ | |
85 | ||
86 | #if LWIP_DNS_API_DECLARE_H_ERRNO | |
87 | /* application accessable error code set by the DNS API functions */ | |
88 | extern int h_errno; | |
89 | #endif /* LWIP_DNS_API_DECLARE_H_ERRNO*/ | |
90 | ||
91 | struct hostent *lwip_gethostbyname(const char *name); | |
92 | int lwip_gethostbyname_r(const char *name, struct hostent *ret, char *buf, | |
93 | size_t buflen, struct hostent **result, int *h_errnop); | |
94 | void lwip_freeaddrinfo(struct addrinfo *ai); | |
95 | int lwip_getaddrinfo(const char *nodename, | |
96 | const char *servname, | |
97 | const struct addrinfo *hints, | |
98 | struct addrinfo **res); | |
99 | ||
100 | #if LWIP_COMPAT_SOCKETS | |
101 | #define gethostbyname(name) lwip_gethostbyname(name) | |
102 | #define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \ | |
103 | lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop) | |
104 | #define freeaddrinfo(addrinfo) lwip_freeaddrinfo(a) | |
105 | #define getaddrinfo(nodname, servname, hints, res) \ | |
106 | lwip_getaddrinfo(nodname, servname, hints, res) | |
107 | #endif /* LWIP_COMPAT_SOCKETS */ | |
108 | ||
109 | #endif /* LWIP_DNS && LWIP_SOCKET */ |