File:  [local] / rpl / src / getaddrinfo.h
Revision 1.2: download - view: text, annotated - select for diffs - revision graph
Fri Aug 6 15:32:59 2010 UTC (13 years, 9 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Cohérence

    1: /*
    2: ================================================================================
    3:   RPL/2 (R) version 4.0.18
    4:   Copyright (C) 1989-2010 Dr. BERTRAND Joël
    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>