Added in missing def for AI_ADDRCONFIG.
[jra/samba/.git] / source3 / lib / replace / getaddrinfo.h
1 /*
2 PostgreSQL Database Management System
3 (formerly known as Postgres, then as Postgres95)
4
5 Portions Copyright (c) 1996-2005, The PostgreSQL Global Development Group
6
7 Portions Copyright (c) 1994, The Regents of the University of California
8
9 Permission to use, copy, modify, and distribute this software and its
10 documentation for any purpose, without fee, and without a written agreement
11 is hereby granted, provided that the above copyright notice and this paragraph
12 and the following two paragraphs appear in all copies.
13
14 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
15 DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
16 LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION,
17 EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
18 SUCH DAMAGE.
19
20 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
21 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
22 AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
23 ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS
24 TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
25
26 */
27
28 /*-------------------------------------------------------------------------
29  *
30  * getaddrinfo.h
31  *        Support getaddrinfo() on platforms that don't have it.
32  *
33  * Note: we use our own routines on platforms that don't HAVE_STRUCT_ADDRINFO,
34  * whether or not the library routine getaddrinfo() can be found.  This
35  * policy is needed because on some platforms a manually installed libbind.a
36  * may provide getaddrinfo(), yet the system headers may not provide the
37  * struct definitions needed to call it.  To avoid conflict with the libbind
38  * definition in such cases, we rename our routines to pg_xxx() via macros.
39  *
40  * This code will also work on platforms where struct addrinfo is defined
41  * in the system headers but no getaddrinfo() can be located.
42  *
43  * Copyright (c) 2003-2007, PostgreSQL Global Development Group
44  *
45  *-------------------------------------------------------------------------
46  */
47 #ifndef GETADDRINFO_H
48 #define GETADDRINFO_H
49
50
51 /* Various macros that ought to be in <netdb.h>, but might not be */
52
53 #ifndef EAI_FAIL
54 #define EAI_BADFLAGS    (-1)
55 #define EAI_NONAME              (-2)
56 #define EAI_AGAIN               (-3)
57 #define EAI_FAIL                (-4)
58 #define EAI_FAMILY              (-6)
59 #define EAI_SOCKTYPE    (-7)
60 #define EAI_SERVICE             (-8)
61 #define EAI_MEMORY              (-10)
62 #define EAI_SYSTEM              (-11)
63 #endif   /* !EAI_FAIL */
64
65 #ifndef AI_PASSIVE
66 #define AI_PASSIVE              0x0001
67 #endif
68
69 #ifndef AI_NUMERICHOST
70 /*
71  * some platforms don't support AI_NUMERICHOST; define as zero if using
72  * the system version of getaddrinfo...
73  */
74 #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
75 #define AI_NUMERICHOST  0
76 #else
77 #define AI_NUMERICHOST  0x0004
78 #endif
79 #endif
80
81 #ifndef AI_ADDRCONFIG
82 #define AI_ADDRCONFIG   0x0020
83 #endif
84
85 #ifndef NI_NUMERICHOST
86 #define NI_NUMERICHOST  1
87 #endif
88
89 #ifndef NI_NUMERICSERV
90 #define NI_NUMERICSERV  2
91 #endif
92
93 #ifndef NI_NOFQDN
94 #define NI_NOFQDN       4
95 #endif
96
97 #ifndef NI_NAMEREQD
98 #define NI_NAMEREQD     8
99 #endif
100
101 #ifndef NI_DGRAM
102 #define NI_DGRAM        16
103 #endif
104
105
106 #ifndef NI_MAXHOST
107 #define NI_MAXHOST      1025
108 #endif
109
110 #ifndef NI_MAXSERV
111 #define NI_MAXSERV      32
112 #endif
113
114 #ifndef HAVE_STRUCT_ADDRINFO
115
116 struct addrinfo
117 {
118         int                     ai_flags;
119         int                     ai_family;
120         int                     ai_socktype;
121         int                     ai_protocol;
122         size_t          ai_addrlen;
123         struct sockaddr *ai_addr;
124         char       *ai_canonname;
125         struct addrinfo *ai_next;
126 };
127 #endif   /* HAVE_STRUCT_ADDRINFO */
128
129
130 #ifndef HAVE_GETADDRINFO
131
132 /* Rename private copies per comments above */
133 #ifdef getaddrinfo
134 #undef getaddrinfo
135 #endif
136 #define getaddrinfo pg_getaddrinfo
137
138 #ifdef freeaddrinfo
139 #undef freeaddrinfo
140 #endif
141 #define freeaddrinfo pg_freeaddrinfo
142
143 #ifdef gai_strerror
144 #undef gai_strerror
145 #endif
146 #define gai_strerror pg_gai_strerror
147
148 #ifdef getnameinfo
149 #undef getnameinfo
150 #endif
151 #define getnameinfo pg_getnameinfo
152
153 extern int getaddrinfo(const char *node, const char *service,
154                         const struct addrinfo * hints, struct addrinfo ** res);
155 extern void freeaddrinfo(struct addrinfo * res);
156 extern const char *gai_strerror(int errcode);
157 extern int getnameinfo(const struct sockaddr * sa, socklen_t salen,
158                         char *node, size_t nodelen,
159                         char *service, size_t servicelen, int flags);
160 #endif   /* HAVE_GETADDRINFO */
161
162 #endif   /* GETADDRINFO_H */