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

1.1       bertrand    1: /*
                      2: ================================================================================
1.54      bertrand    3:   RPL/2 (R) version 4.1.32
1.55    ! bertrand    4:   Copyright (C) 1989-2020 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: #ifndef GETADDRINFO_H
                     24: #define GETADDRINFO_H
                     25: 
                     26: #ifdef HAVE_CONFIG_H
                     27: #include "config.h"
                     28: #endif
                     29: 
                     30: #include <sys/types.h>
                     31: 
                     32: #ifdef WIN32
                     33: #include <time.h>
                     34: #include <winsock2.h>
                     35: #ifdef DO_IPV6
                     36: #include <ws2tcpip.h>
                     37: #endif  /* DO_IPV6 */
                     38: #include <windows.h>
                     39: #else
                     40: #include <sys/socket.h>
                     41: #include <netdb.h>
                     42: #endif
                     43: 
                     44: #ifdef __INNOTEK_LIBC__
                     45: typedef int socklen_t;
                     46: #endif
                     47: 
                     48: /********************************************************************/
                     49: /*
                     50:  * Undefine all the macros.
                     51:  * <netdb.h> might defines some of them.
                     52:  */
                     53: #ifdef EAI_ADDRFAMILY
                     54: #undef EAI_ADDRFAMILY
                     55: #endif
                     56: #ifdef EAI_AGAIN
                     57: #undef EAI_AGAIN
                     58: #endif
                     59: #ifdef EAI_BADFLAGS
                     60: #undef EAI_BADFLAGS
                     61: #endif
                     62: #ifdef EAI_FAIL
                     63: #undef EAI_FAIL
                     64: #endif
                     65: #ifdef EAI_FAMILY
                     66: #undef EAI_FAMILY
                     67: #endif
                     68: #ifdef EAI_MEMORY
                     69: #undef EAI_MEMORY
                     70: #endif
                     71: #ifdef EAI_NONAME
                     72: #undef EAI_NONAME
                     73: #endif
                     74: #ifdef EAI_OVERFLOW
                     75: #undef EAI_OVERFLOW
                     76: #endif
                     77: #ifdef EAI_SERVICE
                     78: #undef EAI_SERVICE
                     79: #endif
                     80: #ifdef EAI_SOCKTYPE
                     81: #undef EAI_SOCKTYPE
                     82: #endif
                     83: #ifdef EAI_SYSTEM
                     84: #undef EAI_SYSTEM
                     85: #endif
                     86: 
                     87: #ifdef AI_PASSIVE
                     88: #undef AI_PASSIVE
                     89: #endif
                     90: #ifdef AI_CANONNAME
                     91: #undef AI_CANONNAME
                     92: #endif
                     93: #ifdef AI_NUMERICHOST
                     94: #undef AI_NUMERICHOST
                     95: #endif
                     96: #ifdef AI_NUMERICSERV
                     97: #undef AI_NUMERICSERV
                     98: #endif
                     99: #ifdef AI_V4MAPPED
                    100: #undef AI_V4MAPPED
                    101: #endif
                    102: #ifdef AI_ALL
                    103: #undef AI_ALL
                    104: #endif
                    105: #ifdef AI_ADDRCONFIG
                    106: #undef AI_ADDRCONFIG
                    107: #endif
                    108: #ifdef AI_DEFAULT
                    109: #undef AI_DEFAULT
                    110: #endif
                    111: 
                    112: #ifdef NI_NOFQDN
                    113: #undef NI_NOFQDN
                    114: #endif
                    115: #ifdef NI_NUMERICHOST
                    116: #undef NI_NUMERICHOST
                    117: #endif
                    118: #ifdef NI_NAMEREQD
                    119: #undef NI_NAMEREQD
                    120: #endif
                    121: #ifdef NI_NUMERICSERV
                    122: #undef NI_NUMERICSERV
                    123: #endif
                    124: #ifdef NI_NUMERICSCOPE
                    125: #undef NI_NUMERICSCOPE
                    126: #endif
                    127: 
                    128: #ifdef NI_DGRAM
                    129: #undef NI_DGRAM
                    130: #endif
                    131: #ifdef NI_MAXHOST
                    132: #undef NI_MAXHOST
                    133: #endif
                    134: #ifdef NI_MAXSERV
                    135: #undef NI_MAXSERV
                    136: #endif
                    137: 
                    138: /*
                    139:  * Fake struct and function names.
                    140:  * <netdb.h> might declares all or some of them.
                    141:  */
                    142: #if defined(HAVE_GETADDRINFO) || defined(HAVE_GETNAMEINFO)
                    143: #define addrinfo my_addrinfo
                    144: #define gai_strerror my_gai_strerror
                    145: #define freeaddrinfo my_freeaddrinfo
                    146: #define getaddrinfo my_getaddrinfo
                    147: #define getnameinfo my_getnameinfo
                    148: #endif
                    149: 
                    150: /********************************************************************/
                    151: /*
                    152:  * Error codes.
                    153:  */
                    154: #define EAI_ADDRFAMILY 1
                    155: #define EAI_AGAIN  2
                    156: #define EAI_BADFLAGS   3
                    157: #define EAI_FAIL   4
                    158: #define EAI_FAMILY 5
                    159: #define EAI_MEMORY 6
                    160: #define EAI_NONAME 7
                    161: #define EAI_OVERFLOW   8
                    162: #define EAI_SERVICE    9
                    163: #define EAI_SOCKTYPE   10
                    164: #define EAI_SYSTEM 11
                    165: 
                    166: /*
                    167:  * Flags for getaddrinfo().
                    168:  */
                    169: #define AI_ADDRCONFIG  0x0001
                    170: #define AI_ALL     0x0002
                    171: #define AI_CANONNAME   0x0004
                    172: #define AI_NUMERICHOST 0x0008
                    173: #define AI_NUMERICSERV 0x0010
                    174: #define AI_PASSIVE 0x0020
                    175: #define AI_V4MAPPED    0x0040
                    176: #define AI_DEFAULT (AI_V4MAPPED | AI_ADDRCONFIG)
                    177: 
                    178: /*
                    179:  * Flags for getnameinfo().
                    180:  */
                    181: #define NI_DGRAM   0x0001
                    182: #define NI_NAMEREQD    0x0002
                    183: #define NI_NOFQDN  0x0004
                    184: #define NI_NUMERICHOST 0x0008
                    185: #define NI_NUMERICSCOPE    0x0010
                    186: #define NI_NUMERICSERV 0x0020
                    187: 
                    188: /*
                    189:  * Maximum length of FQDN and servie name for getnameinfo().
                    190:  */
                    191: #define NI_MAXHOST 1025
                    192: #define NI_MAXSERV 32
                    193: 
                    194: /*
                    195:  * Address families and Protocol families.
                    196:  */
                    197: #ifndef AF_UNSPEC
                    198: #define AF_UNSPEC AF_INET
                    199: #endif
                    200: #ifndef PF_UNSPEC
                    201: #define PF_UNSPEC PF_INET
                    202: #endif
                    203: 
                    204: /*
                    205:  * struct addrinfo.
                    206:  */
                    207: struct addrinfo {
                    208:     int ai_flags;
                    209:     int ai_family;
                    210:     int ai_socktype;
                    211:     int ai_protocol;
                    212:     socklen_t ai_addrlen;
                    213:     char *ai_canonname;
                    214:     struct sockaddr *ai_addr;
                    215:     struct addrinfo *ai_next;
                    216: };
                    217: 
                    218: /*
                    219:  * Functions.
                    220:  */
                    221: #ifdef __STDC__
                    222: #if defined (__cplusplus)
                    223: extern "C" {
                    224: #endif
                    225: const char *gai_strerror(int);
                    226: void freeaddrinfo(struct addrinfo *);
                    227: int getaddrinfo(const char *, const char *, const struct addrinfo *,
                    228:     struct addrinfo **);
                    229: int getnameinfo(const struct sockaddr *, socklen_t, char *, 
                    230:     socklen_t, char *, socklen_t, int);
                    231: #if defined (__cplusplus)
                    232: }
                    233: #endif
                    234: #else
                    235: const char *gai_strerror();
                    236: void freeaddrinfo();
                    237: int getaddrinfo();
                    238: int getnameinfo();
                    239: #endif
                    240: 
                    241: #endif /* not GETADDRINFO_H */
                    242: 
                    243: // vim: ts=4

CVSweb interface <joel.bertrand@systella.fr>