|
|
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.