comparison nspr/pr/include/prnetdb.h @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #ifndef prnetdb_h___
7 #define prnetdb_h___
8
9 #include "prtypes.h"
10 #include "prio.h"
11
12 PR_BEGIN_EXTERN_C
13
14
15 /*
16 *********************************************************************
17 * Translate an Internet address to/from a character string
18 *********************************************************************
19 */
20 NSPR_API(PRStatus) PR_StringToNetAddr(
21 const char *string, PRNetAddr *addr);
22
23 NSPR_API(PRStatus) PR_NetAddrToString(
24 const PRNetAddr *addr, char *string, PRUint32 size);
25
26 /*
27 ** Structures returned by network data base library. All addresses are
28 ** supplied in host order, and returned in network order (suitable for
29 ** use in system calls).
30 */
31 /*
32 ** Beware that WINSOCK.H defines h_addrtype and h_length as short.
33 ** Client code does direct struct copies of hostent to PRHostEnt and
34 ** hence the ifdef.
35 */
36 typedef struct PRHostEnt {
37 char *h_name; /* official name of host */
38 char **h_aliases; /* alias list */
39 #ifdef WIN32
40 PRInt16 h_addrtype; /* host address type */
41 PRInt16 h_length; /* length of address */
42 #else
43 PRInt32 h_addrtype; /* host address type */
44 PRInt32 h_length; /* length of address */
45 #endif
46 char **h_addr_list; /* list of addresses from name server */
47 } PRHostEnt;
48
49 /* A safe size to use that will mostly work... */
50 #if (defined(AIX) && defined(_THREAD_SAFE)) || defined(OSF1)
51 #define PR_NETDB_BUF_SIZE sizeof(struct protoent_data)
52 #else
53 #define PR_NETDB_BUF_SIZE 1024
54 #endif
55
56 /***********************************************************************
57 ** FUNCTION:
58 ** DESCRIPTION: PR_GetHostByName()
59 ** Lookup a host by name.
60 **
61 ** INPUTS:
62 ** char *hostname Character string defining the host name of interest
63 ** char *buf A scratch buffer for the runtime to return result.
64 ** This buffer is allocated by the caller.
65 ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
66 ** use is PR_NETDB_BUF_SIZE.
67 ** OUTPUTS:
68 ** PRHostEnt *hostentry
69 ** This structure is filled in by the runtime if
70 ** the function returns PR_SUCCESS. This structure
71 ** is allocated by the caller.
72 ** RETURN:
73 ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
74 ** the result will be PR_FAILURE and the reason
75 ** for the failure can be retrieved by PR_GetError().
76 ***********************************************************************/
77 NSPR_API(PRStatus) PR_GetHostByName(
78 const char *hostname, char *buf, PRIntn bufsize, PRHostEnt *hostentry);
79
80 /***********************************************************************
81 ** FUNCTION:
82 ** DESCRIPTION: PR_GetIPNodeByName()
83 ** Lookup a host by name. Equivalent to getipnodebyname(AI_DEFAULT)
84 ** of RFC 2553.
85 **
86 ** INPUTS:
87 ** char *hostname Character string defining the host name of interest
88 ** PRUint16 af Address family (either PR_AF_INET or PR_AF_INET6)
89 ** PRIntn flags Specifies the types of addresses that are searched
90 ** for and the types of addresses that are returned.
91 ** The only supported flag is PR_AI_DEFAULT.
92 ** char *buf A scratch buffer for the runtime to return result.
93 ** This buffer is allocated by the caller.
94 ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
95 ** use is PR_NETDB_BUF_SIZE.
96 ** OUTPUTS:
97 ** PRHostEnt *hostentry
98 ** This structure is filled in by the runtime if
99 ** the function returns PR_SUCCESS. This structure
100 ** is allocated by the caller.
101 ** RETURN:
102 ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
103 ** the result will be PR_FAILURE and the reason
104 ** for the failure can be retrieved by PR_GetError().
105 ***********************************************************************/
106
107
108 #define PR_AI_ALL 0x08
109 #define PR_AI_V4MAPPED 0x10
110 #define PR_AI_ADDRCONFIG 0x20
111 #define PR_AI_NOCANONNAME 0x8000
112 #define PR_AI_DEFAULT (PR_AI_V4MAPPED | PR_AI_ADDRCONFIG)
113
114 NSPR_API(PRStatus) PR_GetIPNodeByName(
115 const char *hostname,
116 PRUint16 af,
117 PRIntn flags,
118 char *buf,
119 PRIntn bufsize,
120 PRHostEnt *hostentry);
121
122 /***********************************************************************
123 ** FUNCTION:
124 ** DESCRIPTION: PR_GetHostByAddr()
125 ** Lookup a host entry by its network address.
126 **
127 ** INPUTS:
128 ** char *hostaddr IP address of host in question
129 ** char *buf A scratch buffer for the runtime to return result.
130 ** This buffer is allocated by the caller.
131 ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
132 ** use is PR_NETDB_BUF_SIZE.
133 ** OUTPUTS:
134 ** PRHostEnt *hostentry
135 ** This structure is filled in by the runtime if
136 ** the function returns PR_SUCCESS. This structure
137 ** is allocated by the caller.
138 ** RETURN:
139 ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
140 ** the result will be PR_FAILURE and the reason
141 ** for the failure can be retrieved by PR_GetError().
142 ***********************************************************************/
143 NSPR_API(PRStatus) PR_GetHostByAddr(
144 const PRNetAddr *hostaddr, char *buf, PRIntn bufsize, PRHostEnt *hostentry);
145
146 /***********************************************************************
147 ** FUNCTION: PR_EnumerateHostEnt()
148 ** DESCRIPTION:
149 ** A stateless enumerator over a PRHostEnt structure acquired from
150 ** PR_GetHostByName() PR_GetHostByAddr() to evaluate the possible
151 ** network addresses.
152 **
153 ** INPUTS:
154 ** PRIntn enumIndex Index of the enumeration. The enumeration starts
155 ** and ends with a value of zero.
156 **
157 ** PRHostEnt *hostEnt A pointer to a host entry struct that was
158 ** previously returned by PR_GetHostByName() or
159 ** PR_GetHostByAddr().
160 **
161 ** PRUint16 port The port number to be assigned as part of the
162 ** PRNetAddr.
163 **
164 ** OUTPUTS:
165 ** PRNetAddr *address A pointer to an address structure that will be
166 ** filled in by the call to the enumeration if the
167 ** result of the call is greater than zero.
168 **
169 ** RETURN:
170 ** PRIntn The value that should be used for the next call
171 ** of the enumerator ('enumIndex'). The enumeration
172 ** is ended if this value is returned zero.
173 ** If a value of -1 is returned, the enumeration
174 ** has failed. The reason for the failure can be
175 ** retrieved by calling PR_GetError().
176 ***********************************************************************/
177 NSPR_API(PRIntn) PR_EnumerateHostEnt(
178 PRIntn enumIndex, const PRHostEnt *hostEnt, PRUint16 port, PRNetAddr *address);
179
180 /***********************************************************************
181 ** FUNCTION: PR_InitializeNetAddr(),
182 ** DESCRIPTION:
183 ** Initialize the fields of a PRNetAddr, assigning well known values as
184 ** appropriate.
185 **
186 ** INPUTS
187 ** PRNetAddrValue val The value to be assigned to the IP Address portion
188 ** of the network address. This can only specify the
189 ** special well known values that are equivalent to
190 ** INADDR_ANY and INADDR_LOOPBACK.
191 **
192 ** PRUint16 port The port number to be assigned in the structure.
193 **
194 ** OUTPUTS:
195 ** PRNetAddr *addr The address to be manipulated.
196 **
197 ** RETURN:
198 ** PRStatus To indicate success or failure. If the latter, the
199 ** reason for the failure can be retrieved by calling
200 ** PR_GetError();
201 ***********************************************************************/
202 typedef enum PRNetAddrValue
203 {
204 PR_IpAddrNull, /* do NOT overwrite the IP address */
205 PR_IpAddrAny, /* assign logical INADDR_ANY to IP address */
206 PR_IpAddrLoopback, /* assign logical INADDR_LOOPBACK */
207 PR_IpAddrV4Mapped /* IPv4 mapped address */
208 } PRNetAddrValue;
209
210 NSPR_API(PRStatus) PR_InitializeNetAddr(
211 PRNetAddrValue val, PRUint16 port, PRNetAddr *addr);
212
213 /***********************************************************************
214 ** FUNCTION: PR_SetNetAddr(),
215 ** DESCRIPTION:
216 ** Set the fields of a PRNetAddr, assigning well known values as
217 ** appropriate. This function is similar to PR_InitializeNetAddr
218 ** but differs in that the address family is specified.
219 **
220 ** INPUTS
221 ** PRNetAddrValue val The value to be assigned to the IP Address portion
222 ** of the network address. This can only specify the
223 ** special well known values that are equivalent to
224 ** INADDR_ANY and INADDR_LOOPBACK.
225 **
226 ** PRUint16 af The address family (either PR_AF_INET or PR_AF_INET6)
227 **
228 ** PRUint16 port The port number to be assigned in the structure.
229 **
230 ** OUTPUTS:
231 ** PRNetAddr *addr The address to be manipulated.
232 **
233 ** RETURN:
234 ** PRStatus To indicate success or failure. If the latter, the
235 ** reason for the failure can be retrieved by calling
236 ** PR_GetError();
237 ***********************************************************************/
238 NSPR_API(PRStatus) PR_SetNetAddr(
239 PRNetAddrValue val, PRUint16 af, PRUint16 port, PRNetAddr *addr);
240
241 /***********************************************************************
242 ** FUNCTION:
243 ** DESCRIPTION: PR_IsNetAddrType()
244 ** Determine if the network address is of the specified type.
245 **
246 ** INPUTS:
247 ** const PRNetAddr *addr A network address.
248 ** PRNetAddrValue The type of network address
249 **
250 ** RETURN:
251 ** PRBool PR_TRUE if the network address is of the
252 ** specified type, else PR_FALSE.
253 ***********************************************************************/
254 NSPR_API(PRBool) PR_IsNetAddrType(const PRNetAddr *addr, PRNetAddrValue val);
255
256 /***********************************************************************
257 ** FUNCTION:
258 ** DESCRIPTION: PR_ConvertIPv4AddrToIPv6()
259 ** Convert an IPv4 addr to an (IPv4-mapped) IPv6 addr
260 **
261 ** INPUTS:
262 ** PRUint32 v4addr IPv4 address
263 **
264 ** OUTPUTS:
265 ** PRIPv6Addr *v6addr The converted IPv6 address
266 **
267 ** RETURN:
268 ** void
269 **
270 ***********************************************************************/
271 NSPR_API(void) PR_ConvertIPv4AddrToIPv6(PRUint32 v4addr, PRIPv6Addr *v6addr);
272
273 /***********************************************************************
274 ** MACRO:
275 ** DESCRIPTION: PR_NetAddrFamily()
276 ** Get the 'family' field of a PRNetAddr union.
277 **
278 ** INPUTS:
279 ** const PRNetAddr *addr A network address.
280 **
281 ** RETURN:
282 ** PRUint16 The 'family' field of 'addr'.
283 ***********************************************************************/
284 #define PR_NetAddrFamily(addr) ((addr)->raw.family)
285
286 /***********************************************************************
287 ** MACRO:
288 ** DESCRIPTION: PR_NetAddrInetPort()
289 ** Get the 'port' field of a PRNetAddr union.
290 **
291 ** INPUTS:
292 ** const PRNetAddr *addr A network address.
293 **
294 ** RETURN:
295 ** PRUint16 The 'port' field of 'addr'.
296 ***********************************************************************/
297 #define PR_NetAddrInetPort(addr) \
298 ((addr)->raw.family == PR_AF_INET6 ? (addr)->ipv6.port : (addr)->inet.port)
299
300 /***********************************************************************
301 ** FUNCTION:
302 ** DESCRIPTION: PR_GetProtoByName()
303 ** Lookup a protocol entry based on protocol's name
304 **
305 ** INPUTS:
306 ** char *protocolname Character string of the protocol's name.
307 ** char *buf A scratch buffer for the runtime to return result.
308 ** This buffer is allocated by the caller.
309 ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
310 ** use is PR_NETDB_BUF_SIZE.
311 ** OUTPUTS:
312 ** PRHostEnt *PRProtoEnt
313 ** This structure is filled in by the runtime if
314 ** the function returns PR_SUCCESS. This structure
315 ** is allocated by the caller.
316 ** RETURN:
317 ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
318 ** the result will be PR_FAILURE and the reason
319 ** for the failure can be retrieved by PR_GetError().
320 ***********************************************************************/
321
322 typedef struct PRProtoEnt {
323 char *p_name; /* official protocol name */
324 char **p_aliases; /* alias list */
325 #ifdef WIN32
326 PRInt16 p_num; /* protocol # */
327 #else
328 PRInt32 p_num; /* protocol # */
329 #endif
330 } PRProtoEnt;
331
332 NSPR_API(PRStatus) PR_GetProtoByName(
333 const char* protocolname, char* buffer, PRInt32 bufsize, PRProtoEnt* result);
334
335 /***********************************************************************
336 ** FUNCTION:
337 ** DESCRIPTION: PR_GetProtoByNumber()
338 ** Lookup a protocol entry based on protocol's number
339 **
340 ** INPUTS:
341 ** PRInt32 protocolnumber
342 ** Number assigned to the protocol.
343 ** char *buf A scratch buffer for the runtime to return result.
344 ** This buffer is allocated by the caller.
345 ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
346 ** use is PR_NETDB_BUF_SIZE.
347 ** OUTPUTS:
348 ** PRHostEnt *PRProtoEnt
349 ** This structure is filled in by the runtime if
350 ** the function returns PR_SUCCESS. This structure
351 ** is allocated by the caller.
352 ** RETURN:
353 ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
354 ** the result will be PR_FAILURE and the reason
355 ** for the failure can be retrieved by PR_GetError().
356 ***********************************************************************/
357 NSPR_API(PRStatus) PR_GetProtoByNumber(
358 PRInt32 protocolnumber, char* buffer, PRInt32 bufsize, PRProtoEnt* result);
359
360 /***********************************************************************
361 ** FUNCTION:
362 ** DESCRIPTION: PR_GetAddrInfoByName()
363 ** Look up a host by name. Equivalent to getaddrinfo(host, NULL, ...) of
364 ** RFC 3493.
365 **
366 ** INPUTS:
367 ** char *hostname Character string defining the host name of interest
368 ** PRUint16 af May be PR_AF_UNSPEC or PR_AF_INET.
369 ** PRIntn flags May be either PR_AI_ADDRCONFIG or
370 ** PR_AI_ADDRCONFIG | PR_AI_NOCANONNAME. Include
371 ** PR_AI_NOCANONNAME to suppress the determination of
372 ** the canonical name corresponding to hostname.
373 ** RETURN:
374 ** PRAddrInfo* Handle to a data structure containing the results
375 ** of the host lookup. Use PR_EnumerateAddrInfo to
376 ** inspect the PRNetAddr values stored in this object.
377 ** When no longer needed, this handle must be destroyed
378 ** with a call to PR_FreeAddrInfo. If a lookup error
379 ** occurs, then NULL will be returned.
380 ***********************************************************************/
381 typedef struct PRAddrInfo PRAddrInfo;
382
383 NSPR_API(PRAddrInfo*) PR_GetAddrInfoByName(
384 const char *hostname, PRUint16 af, PRIntn flags);
385
386 /***********************************************************************
387 ** FUNCTION:
388 ** DESCRIPTION: PR_FreeAddrInfo()
389 ** Destroy the PRAddrInfo handle allocated by PR_GetAddrInfoByName().
390 **
391 ** INPUTS:
392 ** PRAddrInfo *addrInfo
393 ** The handle resulting from a successful call to
394 ** PR_GetAddrInfoByName().
395 ** RETURN:
396 ** void
397 ***********************************************************************/
398 NSPR_API(void) PR_FreeAddrInfo(PRAddrInfo *addrInfo);
399
400 /***********************************************************************
401 ** FUNCTION:
402 ** DESCRIPTION: PR_EnumerateAddrInfo()
403 ** A stateless enumerator over a PRAddrInfo handle acquired from
404 ** PR_GetAddrInfoByName() to inspect the possible network addresses.
405 **
406 ** INPUTS:
407 ** void *enumPtr Index pointer of the enumeration. The enumeration
408 ** starts and ends with a value of NULL.
409 ** const PRAddrInfo *addrInfo
410 ** The PRAddrInfo handle returned by a successful
411 ** call to PR_GetAddrInfoByName().
412 ** PRUint16 port The port number to be assigned as part of the
413 ** PRNetAddr.
414 ** OUTPUTS:
415 ** PRNetAddr *result A pointer to an address structure that will be
416 ** filled in by the call to the enumeration if the
417 ** result of the call is not NULL.
418 ** RETURN:
419 ** void* The value that should be used for the next call
420 ** of the enumerator ('enumPtr'). The enumeration
421 ** is ended if this value is NULL.
422 ***********************************************************************/
423 NSPR_API(void *) PR_EnumerateAddrInfo(
424 void *enumPtr, const PRAddrInfo *addrInfo, PRUint16 port, PRNetAddr *result);
425
426 /***********************************************************************
427 ** FUNCTION:
428 ** DESCRIPTION: PR_GetCanonNameFromAddrInfo()
429 ** Extracts the canonical name of the hostname passed to
430 ** PR_GetAddrInfoByName().
431 **
432 ** INPUTS:
433 ** const PRAddrInfo *addrInfo
434 ** The PRAddrInfo handle returned by a successful
435 ** call to PR_GetAddrInfoByName().
436 ** RETURN:
437 ** const char * A const pointer to the canonical hostname stored
438 ** in the given PRAddrInfo handle. This pointer is
439 ** invalidated once the PRAddrInfo handle is destroyed
440 ** by a call to PR_FreeAddrInfo().
441 ***********************************************************************/
442 NSPR_API(const char *) PR_GetCanonNameFromAddrInfo(
443 const PRAddrInfo *addrInfo);
444
445 /***********************************************************************
446 ** FUNCTIONS: PR_ntohs, PR_ntohl, PR_ntohll, PR_htons, PR_htonl, PR_htonll
447 **
448 ** DESCRIPTION: API entries for the common byte ordering routines.
449 **
450 ** PR_ntohs 16 bit conversion from network to host
451 ** PR_ntohl 32 bit conversion from network to host
452 ** PR_ntohll 64 bit conversion from network to host
453 ** PR_htons 16 bit conversion from host to network
454 ** PR_htonl 32 bit conversion from host to network
455 ** PR_ntonll 64 bit conversion from host to network
456 **
457 ***********************************************************************/
458 NSPR_API(PRUint16) PR_ntohs(PRUint16);
459 NSPR_API(PRUint32) PR_ntohl(PRUint32);
460 NSPR_API(PRUint64) PR_ntohll(PRUint64);
461 NSPR_API(PRUint16) PR_htons(PRUint16);
462 NSPR_API(PRUint32) PR_htonl(PRUint32);
463 NSPR_API(PRUint64) PR_htonll(PRUint64);
464
465 PR_END_EXTERN_C
466
467 #endif /* prnetdb_h___ */
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)