|
|
1.1 root 1: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2: /*
3: * The contents of this file are subject to the Mozilla Public
4: * License Version 1.1 (the "License"); you may not use this file
5: * except in compliance with the License. You may obtain a copy of
6: * the License at http://www.mozilla.org/MPL/
7: *
8: * Software distributed under the License is distributed on an "AS
9: * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10: * implied. See the License for the specific language governing
11: * rights and limitations under the License.
12: *
13: * The Original Code is the Netscape Portable Runtime (NSPR).
14: *
15: * The Initial Developer of the Original Code is Netscape
16: * Communications Corporation. Portions created by Netscape are
17: * Copyright (C) 1998-2000 Netscape Communications Corporation. All
18: * Rights Reserved.
19: *
20: * Contributor(s):
21: *
22: * Alternatively, the contents of this file may be used under the
23: * terms of the GNU General Public License Version 2 or later (the
24: * "GPL"), in which case the provisions of the GPL are applicable
25: * instead of those above. If you wish to allow use of your
26: * version of this file only under the terms of the GPL and not to
27: * allow others to use your version of this file under the MPL,
28: * indicate your decision by deleting the provisions above and
29: * replace them with the notice and other provisions required by
30: * the GPL. If you do not delete the provisions above, a recipient
31: * may use your version of this file under either the MPL or the
32: * GPL.
33: */
34:
35: #ifndef prnetdb_h___
36: #define prnetdb_h___
37:
38: #include "prtypes.h"
39: #include "prio.h"
40:
41: PR_BEGIN_EXTERN_C
42:
43:
44: /*
45: *********************************************************************
46: * Translate an Internet address to/from a character string
47: *********************************************************************
48: */
49: NSPR_API(PRStatus) PR_StringToNetAddr(
50: const char *string, PRNetAddr *addr);
51:
52: NSPR_API(PRStatus) PR_NetAddrToString(
53: const PRNetAddr *addr, char *string, PRUint32 size);
54:
55: /*
56: ** Structures returned by network data base library. All addresses are
57: ** supplied in host order, and returned in network order (suitable for
58: ** use in system calls).
59: */
60: /*
61: ** Beware that WINSOCK.H defines h_addrtype and h_length as short.
62: ** Client code does direct struct copies of hostent to PRHostEnt and
63: ** hence the ifdef.
64: */
65: typedef struct PRHostEnt {
66: char *h_name; /* official name of host */
67: char **h_aliases; /* alias list */
68: #if defined(WIN32) || defined(WIN16)
69: PRInt16 h_addrtype; /* host address type */
70: PRInt16 h_length; /* length of address */
71: #else
72: PRInt32 h_addrtype; /* host address type */
73: PRInt32 h_length; /* length of address */
74: #endif
75: char **h_addr_list; /* list of addresses from name server */
76: } PRHostEnt;
77:
78: /* A safe size to use that will mostly work... */
79: #if (defined(AIX) && defined(_THREAD_SAFE)) || defined(OSF1)
80: #define PR_NETDB_BUF_SIZE sizeof(struct protoent_data)
81: #else
82: #define PR_NETDB_BUF_SIZE 1024
83: #endif
84:
85: /***********************************************************************
86: ** FUNCTION:
87: ** DESCRIPTION: PR_GetHostByName()
88: ** Lookup a host by name.
89: **
90: ** INPUTS:
91: ** char *hostname Character string defining the host name of interest
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: NSPR_API(PRStatus) PR_GetHostByName(
107: const char *hostname, char *buf, PRIntn bufsize, PRHostEnt *hostentry);
108:
109: /***********************************************************************
110: ** FUNCTION:
111: ** DESCRIPTION: PR_GetIPNodeByName()
112: ** Lookup a host by name. Equivalent to getipnodebyname(AI_DEFAULT)
113: ** of RFC 2553.
114: **
115: ** INPUTS:
116: ** char *hostname Character string defining the host name of interest
117: ** PRUint16 af Address family (either PR_AF_INET or PR_AF_INET6)
118: ** PRIntn flags Specifies the types of addresses that are searched
119: ** for and the types of addresses that are returned.
120: ** The only supported flag is PR_AI_DEFAULT.
121: ** char *buf A scratch buffer for the runtime to return result.
122: ** This buffer is allocated by the caller.
123: ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
124: ** use is PR_NETDB_BUF_SIZE.
125: ** OUTPUTS:
126: ** PRHostEnt *hostentry
127: ** This structure is filled in by the runtime if
128: ** the function returns PR_SUCCESS. This structure
129: ** is allocated by the caller.
130: ** RETURN:
131: ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
132: ** the result will be PR_FAILURE and the reason
133: ** for the failure can be retrieved by PR_GetError().
134: ***********************************************************************/
135:
136:
137: #define PR_AI_ALL 0x08
138: #define PR_AI_V4MAPPED 0x10
139: #define PR_AI_ADDRCONFIG 0x20
140: #define PR_AI_DEFAULT (PR_AI_V4MAPPED | PR_AI_ADDRCONFIG)
141:
142: NSPR_API(PRStatus) PR_GetIPNodeByName(
143: const char *hostname,
144: PRUint16 af,
145: PRIntn flags,
146: char *buf,
147: PRIntn bufsize,
148: PRHostEnt *hostentry);
149:
150: /***********************************************************************
151: ** FUNCTION:
152: ** DESCRIPTION: PR_GetHostByAddr()
153: ** Lookup a host entry by its network address.
154: **
155: ** INPUTS:
156: ** char *hostaddr IP address of host in question
157: ** char *buf A scratch buffer for the runtime to return result.
158: ** This buffer is allocated by the caller.
159: ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
160: ** use is PR_NETDB_BUF_SIZE.
161: ** OUTPUTS:
162: ** PRHostEnt *hostentry
163: ** This structure is filled in by the runtime if
164: ** the function returns PR_SUCCESS. This structure
165: ** is allocated by the caller.
166: ** RETURN:
167: ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
168: ** the result will be PR_FAILURE and the reason
169: ** for the failure can be retrieved by PR_GetError().
170: ***********************************************************************/
171: NSPR_API(PRStatus) PR_GetHostByAddr(
172: const PRNetAddr *hostaddr, char *buf, PRIntn bufsize, PRHostEnt *hostentry);
173:
174: /***********************************************************************
175: ** FUNCTION: PR_EnumerateHostEnt()
176: ** DESCRIPTION:
177: ** A stateless enumerator over a PRHostEnt structure acquired from
178: ** PR_GetHostByName() PR_GetHostByAddr() to evaluate the possible
179: ** network addresses.
180: **
181: ** INPUTS:
182: ** PRIntn enumIndex Index of the enumeration. The enumeration starts
183: ** and ends with a value of zero.
184: **
185: ** PRHostEnt *hostEnt A pointer to a host entry struct that was
186: ** previously returned by PR_GetHostByName() or
187: ** PR_GetHostByAddr().
188: **
189: ** PRUint16 port The port number to be assigned as part of the
190: ** PRNetAddr.
191: **
192: ** OUTPUTS:
193: ** PRNetAddr *address A pointer to an address structure that will be
194: ** filled in by the call to the enumeration if the
195: ** result of the call is greater than zero.
196: **
197: ** RETURN:
198: ** PRIntn The value that should be used for the next call
199: ** of the enumerator ('enumIndex'). The enumeration
200: ** is ended if this value is returned zero.
201: ** If a value of -1 is returned, the enumeration
202: ** has failed. The reason for the failure can be
203: ** retrieved by calling PR_GetError().
204: ***********************************************************************/
205: NSPR_API(PRIntn) PR_EnumerateHostEnt(
206: PRIntn enumIndex, const PRHostEnt *hostEnt, PRUint16 port, PRNetAddr *address);
207:
208: /***********************************************************************
209: ** FUNCTION: PR_InitializeNetAddr(),
210: ** DESCRIPTION:
211: ** Initialize the fields of a PRNetAddr, assigning well known values as
212: ** appropriate.
213: **
214: ** INPUTS
215: ** PRNetAddrValue val The value to be assigned to the IP Address portion
216: ** of the network address. This can only specify the
217: ** special well known values that are equivalent to
218: ** INADDR_ANY and INADDR_LOOPBACK.
219: **
220: ** PRUint16 port The port number to be assigned in the structure.
221: **
222: ** OUTPUTS:
223: ** PRNetAddr *addr The address to be manipulated.
224: **
225: ** RETURN:
226: ** PRStatus To indicate success or failure. If the latter, the
227: ** reason for the failure can be retrieved by calling
228: ** PR_GetError();
229: ***********************************************************************/
230: typedef enum PRNetAddrValue
231: {
232: PR_IpAddrNull, /* do NOT overwrite the IP address */
233: PR_IpAddrAny, /* assign logical INADDR_ANY to IP address */
234: PR_IpAddrLoopback, /* assign logical INADDR_LOOPBACK */
235: PR_IpAddrV4Mapped /* IPv4 mapped address */
236: } PRNetAddrValue;
237:
238: NSPR_API(PRStatus) PR_InitializeNetAddr(
239: PRNetAddrValue val, PRUint16 port, PRNetAddr *addr);
240:
241: /***********************************************************************
242: ** FUNCTION: PR_SetNetAddr(),
243: ** DESCRIPTION:
244: ** Set the fields of a PRNetAddr, assigning well known values as
245: ** appropriate. This function is similar to PR_InitializeNetAddr
246: ** but differs in that the address family is specified.
247: **
248: ** INPUTS
249: ** PRNetAddrValue val The value to be assigned to the IP Address portion
250: ** of the network address. This can only specify the
251: ** special well known values that are equivalent to
252: ** INADDR_ANY and INADDR_LOOPBACK.
253: **
254: ** PRUint16 af The address family (either PR_AF_INET or PR_AF_INET6)
255: **
256: ** PRUint16 port The port number to be assigned in the structure.
257: **
258: ** OUTPUTS:
259: ** PRNetAddr *addr The address to be manipulated.
260: **
261: ** RETURN:
262: ** PRStatus To indicate success or failure. If the latter, the
263: ** reason for the failure can be retrieved by calling
264: ** PR_GetError();
265: ***********************************************************************/
266: NSPR_API(PRStatus) PR_SetNetAddr(
267: PRNetAddrValue val, PRUint16 af, PRUint16 port, PRNetAddr *addr);
268:
269: /***********************************************************************
270: ** FUNCTION:
271: ** DESCRIPTION: PR_IsNetAddrType()
272: ** Determine if the network address is of the specified type.
273: **
274: ** INPUTS:
275: ** const PRNetAddr *addr A network address.
276: ** PRNetAddrValue The type of network address
277: **
278: ** RETURN:
279: ** PRBool PR_TRUE if the network address is of the
280: ** specified type, else PR_FALSE.
281: ***********************************************************************/
282: NSPR_API(PRBool) PR_IsNetAddrType(const PRNetAddr *addr, PRNetAddrValue val);
283:
284: /***********************************************************************
285: ** FUNCTION:
286: ** DESCRIPTION: PR_ConvertIPv4AddrToIPv6()
287: ** Convert an IPv4 addr to an (IPv4-mapped) IPv6 addr
288: **
289: ** INPUTS:
290: ** PRUint32 v4addr IPv4 address
291: **
292: ** OUTPUTS:
293: ** PRIPv6Addr *v6addr The converted IPv6 address
294: **
295: ** RETURN:
296: ** void
297: **
298: ***********************************************************************/
299: NSPR_API(void) PR_ConvertIPv4AddrToIPv6(PRUint32 v4addr, PRIPv6Addr *v6addr);
300:
301: /***********************************************************************
302: ** MACRO:
303: ** DESCRIPTION: PR_NetAddrFamily()
304: ** Get the 'family' field of a PRNetAddr union.
305: **
306: ** INPUTS:
307: ** const PRNetAddr *addr A network address.
308: **
309: ** RETURN:
310: ** PRUint16 The 'family' field of 'addr'.
311: ***********************************************************************/
312: #define PR_NetAddrFamily(addr) ((addr)->raw.family)
313:
314: /***********************************************************************
315: ** MACRO:
316: ** DESCRIPTION: PR_NetAddrInetPort()
317: ** Get the 'port' field of a PRNetAddr union.
318: **
319: ** INPUTS:
320: ** const PRNetAddr *addr A network address.
321: **
322: ** RETURN:
323: ** PRUint16 The 'port' field of 'addr'.
324: ***********************************************************************/
325: #define PR_NetAddrInetPort(addr) \
326: ((addr)->raw.family == PR_AF_INET6 ? (addr)->ipv6.port : (addr)->inet.port)
327:
328: /***********************************************************************
329: ** FUNCTION:
330: ** DESCRIPTION: PR_GetProtoByName()
331: ** Lookup a protocol entry based on protocol's name
332: **
333: ** INPUTS:
334: ** char *protocolname Character string of the protocol's name.
335: ** char *buf A scratch buffer for the runtime to return result.
336: ** This buffer is allocated by the caller.
337: ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
338: ** use is PR_NETDB_BUF_SIZE.
339: ** OUTPUTS:
340: ** PRHostEnt *PRProtoEnt
341: ** This structure is filled in by the runtime if
342: ** the function returns PR_SUCCESS. This structure
343: ** is allocated by the caller.
344: ** RETURN:
345: ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
346: ** the result will be PR_FAILURE and the reason
347: ** for the failure can be retrieved by PR_GetError().
348: ***********************************************************************/
349:
350: typedef struct PRProtoEnt {
351: char *p_name; /* official protocol name */
352: char **p_aliases; /* alias list */
353: #if defined(WIN32) || defined(WIN16)
354: PRInt16 p_num; /* protocol # */
355: #else
356: PRInt32 p_num; /* protocol # */
357: #endif
358: } PRProtoEnt;
359:
360: NSPR_API(PRStatus) PR_GetProtoByName(
361: const char* protocolname, char* buffer, PRInt32 bufsize, PRProtoEnt* result);
362:
363: /***********************************************************************
364: ** FUNCTION:
365: ** DESCRIPTION: PR_GetProtoByNumber()
366: ** Lookup a protocol entry based on protocol's number
367: **
368: ** INPUTS:
369: ** PRInt32 protocolnumber
370: ** Number assigned to the protocol.
371: ** char *buf A scratch buffer for the runtime to return result.
372: ** This buffer is allocated by the caller.
373: ** PRIntn bufsize Number of bytes in 'buf'. A recommnded value to
374: ** use is PR_NETDB_BUF_SIZE.
375: ** OUTPUTS:
376: ** PRHostEnt *PRProtoEnt
377: ** This structure is filled in by the runtime if
378: ** the function returns PR_SUCCESS. This structure
379: ** is allocated by the caller.
380: ** RETURN:
381: ** PRStatus PR_SUCCESS if the lookup succeeds. If it fails
382: ** the result will be PR_FAILURE and the reason
383: ** for the failure can be retrieved by PR_GetError().
384: ***********************************************************************/
385: NSPR_API(PRStatus) PR_GetProtoByNumber(
386: PRInt32 protocolnumber, char* buffer, PRInt32 bufsize, PRProtoEnt* result);
387:
388: /***********************************************************************
389: ** FUNCTIONS: PR_ntohs, PR_ntohl, PR_ntohll, PR_htons, PR_htonl, PR_htonll
390: **
391: ** DESCRIPTION: API entries for the common byte ordering routines.
392: **
393: ** PR_ntohs 16 bit conversion from network to host
394: ** PR_ntohl 32 bit conversion from network to host
395: ** PR_ntohll 64 bit conversion from network to host
396: ** PR_htons 16 bit conversion from host to network
397: ** PR_htonl 32 bit conversion from host to network
398: ** PR_ntonll 64 bit conversion from host to network
399: **
400: ***********************************************************************/
401: NSPR_API(PRUint16) PR_ntohs(PRUint16);
402: NSPR_API(PRUint32) PR_ntohl(PRUint32);
403: NSPR_API(PRUint64) PR_ntohll(PRUint64);
404: NSPR_API(PRUint16) PR_htons(PRUint16);
405: NSPR_API(PRUint32) PR_htonl(PRUint32);
406: NSPR_API(PRUint64) PR_htonll(PRUint64);
407:
408: PR_END_EXTERN_C
409:
410: #endif /* prnetdb_h___ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.