1: /*
2: ================================================================================
3: RPL/2 (R) version 4.1.36
4: Copyright (C) 1989-2025 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: #ifndef GETADDRINFO_H
24: #define GETADDRINFO_H
25:
26: #ifdef HAVE_CONFIG_H
27: #include "config.h"
28: #endif
29:
30: #include <sys/types.h>
31:
32: #ifdef WIN32
33: #include <time.h>
34: #include <winsock2.h>
35: #ifdef DO_IPV6
36: #include <ws2tcpip.h>
37: #endif /* DO_IPV6 */
38: #include <windows.h>
39: #else
40: #include <sys/socket.h>
41: #include <netdb.h>
42: #endif
43:
44: #ifdef __INNOTEK_LIBC__
45: typedef int socklen_t;
46: #endif
47:
48: /********************************************************************/
49: /*
50: * Undefine all the macros.
51: * <netdb.h> might defines some of them.
52: */
53: #ifdef EAI_ADDRFAMILY
54: #undef EAI_ADDRFAMILY
55: #endif
56: #ifdef EAI_AGAIN
57: #undef EAI_AGAIN
58: #endif
59: #ifdef EAI_BADFLAGS
60: #undef EAI_BADFLAGS
61: #endif
62: #ifdef EAI_FAIL
63: #undef EAI_FAIL
64: #endif
65: #ifdef EAI_FAMILY
66: #undef EAI_FAMILY
67: #endif
68: #ifdef EAI_MEMORY
69: #undef EAI_MEMORY
70: #endif
71: #ifdef EAI_NONAME
72: #undef EAI_NONAME
73: #endif
74: #ifdef EAI_OVERFLOW
75: #undef EAI_OVERFLOW
76: #endif
77: #ifdef EAI_SERVICE
78: #undef EAI_SERVICE
79: #endif
80: #ifdef EAI_SOCKTYPE
81: #undef EAI_SOCKTYPE
82: #endif
83: #ifdef EAI_SYSTEM
84: #undef EAI_SYSTEM
85: #endif
86:
87: #ifdef AI_PASSIVE
88: #undef AI_PASSIVE
89: #endif
90: #ifdef AI_CANONNAME
91: #undef AI_CANONNAME
92: #endif
93: #ifdef AI_NUMERICHOST
94: #undef AI_NUMERICHOST
95: #endif
96: #ifdef AI_NUMERICSERV
97: #undef AI_NUMERICSERV
98: #endif
99: #ifdef AI_V4MAPPED
100: #undef AI_V4MAPPED
101: #endif
102: #ifdef AI_ALL
103: #undef AI_ALL
104: #endif
105: #ifdef AI_ADDRCONFIG
106: #undef AI_ADDRCONFIG
107: #endif
108: #ifdef AI_DEFAULT
109: #undef AI_DEFAULT
110: #endif
111:
112: #ifdef NI_NOFQDN
113: #undef NI_NOFQDN
114: #endif
115: #ifdef NI_NUMERICHOST
116: #undef NI_NUMERICHOST
117: #endif
118: #ifdef NI_NAMEREQD
119: #undef NI_NAMEREQD
120: #endif
121: #ifdef NI_NUMERICSERV
122: #undef NI_NUMERICSERV
123: #endif
124: #ifdef NI_NUMERICSCOPE
125: #undef NI_NUMERICSCOPE
126: #endif
127:
128: #ifdef NI_DGRAM
129: #undef NI_DGRAM
130: #endif
131: #ifdef NI_MAXHOST
132: #undef NI_MAXHOST
133: #endif
134: #ifdef NI_MAXSERV
135: #undef NI_MAXSERV
136: #endif
137:
138: /*
139: * Fake struct and function names.
140: * <netdb.h> might declares all or some of them.
141: */
142: #if defined(HAVE_GETADDRINFO) || defined(HAVE_GETNAMEINFO)
143: #define addrinfo my_addrinfo
144: #define gai_strerror my_gai_strerror
145: #define freeaddrinfo my_freeaddrinfo
146: #define getaddrinfo my_getaddrinfo
147: #define getnameinfo my_getnameinfo
148: #endif
149:
150: /********************************************************************/
151: /*
152: * Error codes.
153: */
154: #define EAI_ADDRFAMILY 1
155: #define EAI_AGAIN 2
156: #define EAI_BADFLAGS 3
157: #define EAI_FAIL 4
158: #define EAI_FAMILY 5
159: #define EAI_MEMORY 6
160: #define EAI_NONAME 7
161: #define EAI_OVERFLOW 8
162: #define EAI_SERVICE 9
163: #define EAI_SOCKTYPE 10
164: #define EAI_SYSTEM 11
165:
166: /*
167: * Flags for getaddrinfo().
168: */
169: #define AI_ADDRCONFIG 0x0001
170: #define AI_ALL 0x0002
171: #define AI_CANONNAME 0x0004
172: #define AI_NUMERICHOST 0x0008
173: #define AI_NUMERICSERV 0x0010
174: #define AI_PASSIVE 0x0020
175: #define AI_V4MAPPED 0x0040
176: #define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG)
177:
178: /*
179: * Flags for getnameinfo().
180: */
181: #define NI_DGRAM 0x0001
182: #define NI_NAMEREQD 0x0002
183: #define NI_NOFQDN 0x0004
184: #define NI_NUMERICHOST 0x0008
185: #define NI_NUMERICSCOPE 0x0010
186: #define NI_NUMERICSERV 0x0020
187:
188: /*
189: * Maximum length of FQDN and servie name for getnameinfo().
190: */
191: #define NI_MAXHOST 1025
192: #define NI_MAXSERV 32
193:
194: /*
195: * Address families and Protocol families.
196: */
197: #ifndef AF_UNSPEC
198: #define AF_UNSPEC AF_INET
199: #endif
200: #ifndef PF_UNSPEC
201: #define PF_UNSPEC PF_INET
202: #endif
203:
204: /*
205: * struct addrinfo.
206: */
207: struct addrinfo {
208: int ai_flags;
209: int ai_family;
210: int ai_socktype;
211: int ai_protocol;
212: socklen_t ai_addrlen;
213: char *ai_canonname;
214: struct sockaddr *ai_addr;
215: struct addrinfo *ai_next;
216: };
217:
218: /*
219: * Functions.
220: */
221: #ifdef __STDC__
222: #if defined (__cplusplus)
223: extern "C" {
224: #endif
225: const char *gai_strerror(int);
226: void freeaddrinfo(struct addrinfo *);
227: int getaddrinfo(const char *, const char *, const struct addrinfo *,
228: struct addrinfo **);
229: int getnameinfo(const struct sockaddr *, socklen_t, char *,
230: socklen_t, char *, socklen_t, int);
231: #if defined (__cplusplus)
232: }
233: #endif
234: #else
235: const char *gai_strerror();
236: void freeaddrinfo();
237: int getaddrinfo();
238: int getnameinfo();
239: #endif
240:
241: #endif /* not GETADDRINFO_H */
242:
243: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>