1: /*
2: ================================================================================
3: RPL/2 (R) version 4.0.18
4: Copyright (C) 1989-2010 Dr. BERTRAND Joël
5:
6: This file is part of RPL/2.
7:
8: RPL/2 is free software; you can redistribute it and/or modify it
9: under the terms of the CeCILL V2 License as published by the french
10: CEA, CNRS and INRIA.
11:
12: RPL/2 is distributed in the hope that it will be useful, but WITHOUT
13: ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14: FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL V2 License
15: for more details.
16:
17: You should have received a copy of the CeCILL License
18: along with RPL/2. If not, write to info@cecill.info.
19: ================================================================================
20: */
21:
22: /*
23: * Copyright (c) 2001, 02 Motoyuki Kasahara
24: *
25: * Redistribution and use in source and binary forms, with or without
26: * modification, are permitted provided that the following conditions
27: * are met:
28: * 1. Redistributions of source code must retain the above copyright
29: * notice, this list of conditions and the following disclaimer.
30: * 2. Redistributions in binary form must reproduce the above copyright
31: * notice, this list of conditions and the following disclaimer in the
32: * documentation and/or other materials provided with the distribution.
33: * 3. Neither the name of the project nor the names of its contributors
34: * may be used to endorse or promote products derived from this software
35: * without specific prior written permission.
36: *
37: * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
38: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
39: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
40: * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
41: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
42: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
43: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
45: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
46: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47: * SUCH DAMAGE.
48: */
49:
50: #ifndef GETADDRINFO_H
51: #define GETADDRINFO_H
52:
53: #ifdef HAVE_CONFIG_H
54: #include "config.h"
55: #endif
56:
57: #include <sys/types.h>
58:
59: #ifdef WIN32
60: #include <time.h>
61: #include <winsock2.h>
62: #ifdef DO_IPV6
63: #include <ws2tcpip.h>
64: #endif /* DO_IPV6 */
65: #include <windows.h>
66: #else
67: #include <sys/socket.h>
68: #include <netdb.h>
69: #endif
70:
71: #ifdef __INNOTEK_LIBC__
72: typedef int socklen_t;
73: #endif
74:
75: /********************************************************************/
76: /*
77: * Undefine all the macros.
78: * <netdb.h> might defines some of them.
79: */
80: #ifdef EAI_ADDRFAMILY
81: #undef EAI_ADDRFAMILY
82: #endif
83: #ifdef EAI_AGAIN
84: #undef EAI_AGAIN
85: #endif
86: #ifdef EAI_BADFLAGS
87: #undef EAI_BADFLAGS
88: #endif
89: #ifdef EAI_FAIL
90: #undef EAI_FAIL
91: #endif
92: #ifdef EAI_FAMILY
93: #undef EAI_FAMILY
94: #endif
95: #ifdef EAI_MEMORY
96: #undef EAI_MEMORY
97: #endif
98: #ifdef EAI_NONAME
99: #undef EAI_NONAME
100: #endif
101: #ifdef EAI_OVERFLOW
102: #undef EAI_OVERFLOW
103: #endif
104: #ifdef EAI_SERVICE
105: #undef EAI_SERVICE
106: #endif
107: #ifdef EAI_SOCKTYPE
108: #undef EAI_SOCKTYPE
109: #endif
110: #ifdef EAI_SYSTEM
111: #undef EAI_SYSTEM
112: #endif
113:
114: #ifdef AI_PASSIVE
115: #undef AI_PASSIVE
116: #endif
117: #ifdef AI_CANONNAME
118: #undef AI_CANONNAME
119: #endif
120: #ifdef AI_NUMERICHOST
121: #undef AI_NUMERICHOST
122: #endif
123: #ifdef AI_NUMERICSERV
124: #undef AI_NUMERICSERV
125: #endif
126: #ifdef AI_V4MAPPED
127: #undef AI_V4MAPPED
128: #endif
129: #ifdef AI_ALL
130: #undef AI_ALL
131: #endif
132: #ifdef AI_ADDRCONFIG
133: #undef AI_ADDRCONFIG
134: #endif
135: #ifdef AI_DEFAULT
136: #undef AI_DEFAULT
137: #endif
138:
139: #ifdef NI_NOFQDN
140: #undef NI_NOFQDN
141: #endif
142: #ifdef NI_NUMERICHOST
143: #undef NI_NUMERICHOST
144: #endif
145: #ifdef NI_NAMEREQD
146: #undef NI_NAMEREQD
147: #endif
148: #ifdef NI_NUMERICSERV
149: #undef NI_NUMERICSERV
150: #endif
151: #ifdef NI_NUMERICSCOPE
152: #undef NI_NUMERICSCOPE
153: #endif
154:
155: #ifdef NI_DGRAM
156: #undef NI_DGRAM
157: #endif
158: #ifdef NI_MAXHOST
159: #undef NI_MAXHOST
160: #endif
161: #ifdef NI_MAXSERV
162: #undef NI_MAXSERV
163: #endif
164:
165: /*
166: * Fake struct and function names.
167: * <netdb.h> might declares all or some of them.
168: */
169: #if defined(HAVE_GETADDRINFO) || defined(HAVE_GETNAMEINFO)
170: #define addrinfo my_addrinfo
171: #define gai_strerror my_gai_strerror
172: #define freeaddrinfo my_freeaddrinfo
173: #define getaddrinfo my_getaddrinfo
174: #define getnameinfo my_getnameinfo
175: #endif
176:
177: /********************************************************************/
178: /*
179: * Error codes.
180: */
181: #define EAI_ADDRFAMILY 1
182: #define EAI_AGAIN 2
183: #define EAI_BADFLAGS 3
184: #define EAI_FAIL 4
185: #define EAI_FAMILY 5
186: #define EAI_MEMORY 6
187: #define EAI_NONAME 7
188: #define EAI_OVERFLOW 8
189: #define EAI_SERVICE 9
190: #define EAI_SOCKTYPE 10
191: #define EAI_SYSTEM 11
192:
193: /*
194: * Flags for getaddrinfo().
195: */
196: #define AI_ADDRCONFIG 0x0001
197: #define AI_ALL 0x0002
198: #define AI_CANONNAME 0x0004
199: #define AI_NUMERICHOST 0x0008
200: #define AI_NUMERICSERV 0x0010
201: #define AI_PASSIVE 0x0020
202: #define AI_V4MAPPED 0x0040
203: #define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG)
204:
205: /*
206: * Flags for getnameinfo().
207: */
208: #define NI_DGRAM 0x0001
209: #define NI_NAMEREQD 0x0002
210: #define NI_NOFQDN 0x0004
211: #define NI_NUMERICHOST 0x0008
212: #define NI_NUMERICSCOPE 0x0010
213: #define NI_NUMERICSERV 0x0020
214:
215: /*
216: * Maximum length of FQDN and servie name for getnameinfo().
217: */
218: #define NI_MAXHOST 1025
219: #define NI_MAXSERV 32
220:
221: /*
222: * Address families and Protocol families.
223: */
224: #ifndef AF_UNSPEC
225: #define AF_UNSPEC AF_INET
226: #endif
227: #ifndef PF_UNSPEC
228: #define PF_UNSPEC PF_INET
229: #endif
230:
231: /*
232: * struct addrinfo.
233: */
234: struct addrinfo {
235: int ai_flags;
236: int ai_family;
237: int ai_socktype;
238: int ai_protocol;
239: socklen_t ai_addrlen;
240: char *ai_canonname;
241: struct sockaddr *ai_addr;
242: struct addrinfo *ai_next;
243: };
244:
245: /*
246: * Functions.
247: */
248: #ifdef __STDC__
249: #if defined (__cplusplus)
250: extern "C" {
251: #endif
252: const char *gai_strerror(int);
253: void freeaddrinfo(struct addrinfo *);
254: int getaddrinfo(const char *, const char *, const struct addrinfo *,
255: struct addrinfo **);
256: int getnameinfo(const struct sockaddr *, socklen_t, char *,
257: socklen_t, char *, socklen_t, int);
258: #if defined (__cplusplus)
259: }
260: #endif
261: #else
262: const char *gai_strerror();
263: void freeaddrinfo();
264: int getaddrinfo();
265: int getnameinfo();
266: #endif
267:
268: #endif /* not GETADDRINFO_H */
269:
270: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>