Annotation of rpl/src/getaddrinfo.h, revision 1.3

1.1       bertrand    1: /*
                      2: ================================================================================
                      3:   RPL/2 (R) version 4.0.18
1.3     ! bertrand    4:   Copyright (C) 1989-2010 Dr. BERTRAND Joël
1.1       bertrand    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:  * Copyright (c) 2001, 02  Motoyuki Kasahara
                     24:  *
                     25:  * Redistribution and use in source and binary forms, with or without
                     26:  * modification, are permitted provided that the following conditions
                     27:  * are met:
                     28:  * 1. Redistributions of source code must retain the above copyright
                     29:  *    notice, this list of conditions and the following disclaimer.
                     30:  * 2. Redistributions in binary form must reproduce the above copyright
                     31:  *    notice, this list of conditions and the following disclaimer in the
                     32:  *    documentation and/or other materials provided with the distribution.
                     33:  * 3. Neither the name of the project nor the names of its contributors
                     34:  *    may be used to endorse or promote products derived from this software
                     35:  *    without specific prior written permission.
                     36:  *
                     37:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
                     38:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     39:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     40:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
                     41:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     42:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     43:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     44:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     45:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     46:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     47:  * SUCH DAMAGE.
                     48:  */
                     49: 
                     50: #ifndef GETADDRINFO_H
                     51: #define GETADDRINFO_H
                     52: 
                     53: #ifdef HAVE_CONFIG_H
                     54: #include "config.h"
                     55: #endif
                     56: 
                     57: #include <sys/types.h>
                     58: 
                     59: #ifdef WIN32
                     60: #include <time.h>
                     61: #include <winsock2.h>
                     62: #ifdef DO_IPV6
                     63: #include <ws2tcpip.h>
                     64: #endif  /* DO_IPV6 */
                     65: #include <windows.h>
                     66: #else
                     67: #include <sys/socket.h>
                     68: #include <netdb.h>
                     69: #endif
                     70: 
                     71: #ifdef __INNOTEK_LIBC__
                     72: typedef int socklen_t;
                     73: #endif
                     74: 
                     75: /********************************************************************/
                     76: /*
                     77:  * Undefine all the macros.
                     78:  * <netdb.h> might defines some of them.
                     79:  */
                     80: #ifdef EAI_ADDRFAMILY
                     81: #undef EAI_ADDRFAMILY
                     82: #endif
                     83: #ifdef EAI_AGAIN
                     84: #undef EAI_AGAIN
                     85: #endif
                     86: #ifdef EAI_BADFLAGS
                     87: #undef EAI_BADFLAGS
                     88: #endif
                     89: #ifdef EAI_FAIL
                     90: #undef EAI_FAIL
                     91: #endif
                     92: #ifdef EAI_FAMILY
                     93: #undef EAI_FAMILY
                     94: #endif
                     95: #ifdef EAI_MEMORY
                     96: #undef EAI_MEMORY
                     97: #endif
                     98: #ifdef EAI_NONAME
                     99: #undef EAI_NONAME
                    100: #endif
                    101: #ifdef EAI_OVERFLOW
                    102: #undef EAI_OVERFLOW
                    103: #endif
                    104: #ifdef EAI_SERVICE
                    105: #undef EAI_SERVICE
                    106: #endif
                    107: #ifdef EAI_SOCKTYPE
                    108: #undef EAI_SOCKTYPE
                    109: #endif
                    110: #ifdef EAI_SYSTEM
                    111: #undef EAI_SYSTEM
                    112: #endif
                    113: 
                    114: #ifdef AI_PASSIVE
                    115: #undef AI_PASSIVE
                    116: #endif
                    117: #ifdef AI_CANONNAME
                    118: #undef AI_CANONNAME
                    119: #endif
                    120: #ifdef AI_NUMERICHOST
                    121: #undef AI_NUMERICHOST
                    122: #endif
                    123: #ifdef AI_NUMERICSERV
                    124: #undef AI_NUMERICSERV
                    125: #endif
                    126: #ifdef AI_V4MAPPED
                    127: #undef AI_V4MAPPED
                    128: #endif
                    129: #ifdef AI_ALL
                    130: #undef AI_ALL
                    131: #endif
                    132: #ifdef AI_ADDRCONFIG
                    133: #undef AI_ADDRCONFIG
                    134: #endif
                    135: #ifdef AI_DEFAULT
                    136: #undef AI_DEFAULT
                    137: #endif
                    138: 
                    139: #ifdef NI_NOFQDN
                    140: #undef NI_NOFQDN
                    141: #endif
                    142: #ifdef NI_NUMERICHOST
                    143: #undef NI_NUMERICHOST
                    144: #endif
                    145: #ifdef NI_NAMEREQD
                    146: #undef NI_NAMEREQD
                    147: #endif
                    148: #ifdef NI_NUMERICSERV
                    149: #undef NI_NUMERICSERV
                    150: #endif
                    151: #ifdef NI_NUMERICSCOPE
                    152: #undef NI_NUMERICSCOPE
                    153: #endif
                    154: 
                    155: #ifdef NI_DGRAM
                    156: #undef NI_DGRAM
                    157: #endif
                    158: #ifdef NI_MAXHOST
                    159: #undef NI_MAXHOST
                    160: #endif
                    161: #ifdef NI_MAXSERV
                    162: #undef NI_MAXSERV
                    163: #endif
                    164: 
                    165: /*
                    166:  * Fake struct and function names.
                    167:  * <netdb.h> might declares all or some of them.
                    168:  */
                    169: #if defined(HAVE_GETADDRINFO) || defined(HAVE_GETNAMEINFO)
                    170: #define addrinfo my_addrinfo
                    171: #define gai_strerror my_gai_strerror
                    172: #define freeaddrinfo my_freeaddrinfo
                    173: #define getaddrinfo my_getaddrinfo
                    174: #define getnameinfo my_getnameinfo
                    175: #endif
                    176: 
                    177: /********************************************************************/
                    178: /*
                    179:  * Error codes.
                    180:  */
                    181: #define EAI_ADDRFAMILY 1
                    182: #define EAI_AGAIN  2
                    183: #define EAI_BADFLAGS   3
                    184: #define EAI_FAIL   4
                    185: #define EAI_FAMILY 5
                    186: #define EAI_MEMORY 6
                    187: #define EAI_NONAME 7
                    188: #define EAI_OVERFLOW   8
                    189: #define EAI_SERVICE    9
                    190: #define EAI_SOCKTYPE   10
                    191: #define EAI_SYSTEM 11
                    192: 
                    193: /*
                    194:  * Flags for getaddrinfo().
                    195:  */
                    196: #define AI_ADDRCONFIG  0x0001
                    197: #define AI_ALL     0x0002
                    198: #define AI_CANONNAME   0x0004
                    199: #define AI_NUMERICHOST 0x0008
                    200: #define AI_NUMERICSERV 0x0010
                    201: #define AI_PASSIVE 0x0020
                    202: #define AI_V4MAPPED    0x0040
                    203: #define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG)
                    204: 
                    205: /*
                    206:  * Flags for getnameinfo().
                    207:  */
                    208: #define NI_DGRAM   0x0001
                    209: #define NI_NAMEREQD    0x0002
                    210: #define NI_NOFQDN  0x0004
                    211: #define NI_NUMERICHOST 0x0008
                    212: #define NI_NUMERICSCOPE    0x0010
                    213: #define NI_NUMERICSERV 0x0020
                    214: 
                    215: /*
                    216:  * Maximum length of FQDN and servie name for getnameinfo().
                    217:  */
                    218: #define NI_MAXHOST 1025
                    219: #define NI_MAXSERV 32
                    220: 
                    221: /*
                    222:  * Address families and Protocol families.
                    223:  */
                    224: #ifndef AF_UNSPEC
                    225: #define AF_UNSPEC AF_INET
                    226: #endif
                    227: #ifndef PF_UNSPEC
                    228: #define PF_UNSPEC PF_INET
                    229: #endif
                    230: 
                    231: /*
                    232:  * struct addrinfo.
                    233:  */
                    234: struct addrinfo {
                    235:     int ai_flags;
                    236:     int ai_family;
                    237:     int ai_socktype;
                    238:     int ai_protocol;
                    239:     socklen_t ai_addrlen;
                    240:     char *ai_canonname;
                    241:     struct sockaddr *ai_addr;
                    242:     struct addrinfo *ai_next;
                    243: };
                    244: 
                    245: /*
                    246:  * Functions.
                    247:  */
                    248: #ifdef __STDC__
                    249: #if defined (__cplusplus)
                    250: extern "C" {
                    251: #endif
                    252: const char *gai_strerror(int);
                    253: void freeaddrinfo(struct addrinfo *);
                    254: int getaddrinfo(const char *, const char *, const struct addrinfo *,
                    255:     struct addrinfo **);
                    256: int getnameinfo(const struct sockaddr *, socklen_t, char *, 
                    257:     socklen_t, char *, socklen_t, int);
                    258: #if defined (__cplusplus)
                    259: }
                    260: #endif
                    261: #else
                    262: const char *gai_strerror();
                    263: void freeaddrinfo();
                    264: int getaddrinfo();
                    265: int getnameinfo();
                    266: #endif
                    267: 
                    268: #endif /* not GETADDRINFO_H */
                    269: 
                    270: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>