17db96d56Sopenharmony_ci/*
27db96d56Sopenharmony_ci * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
37db96d56Sopenharmony_ci * All rights reserved.
47db96d56Sopenharmony_ci *
57db96d56Sopenharmony_ci * Redistribution and use in source and binary forms, with or without
67db96d56Sopenharmony_ci * modification, are permitted provided that the following conditions
77db96d56Sopenharmony_ci * are met:
87db96d56Sopenharmony_ci * 1. Redistributions of source code must retain the above copyright
97db96d56Sopenharmony_ci *    notice, this list of conditions and the following disclaimer.
107db96d56Sopenharmony_ci * 2. Redistributions in binary form must reproduce the above copyright
117db96d56Sopenharmony_ci *    notice, this list of conditions and the following disclaimer in the
127db96d56Sopenharmony_ci *    documentation and/or other materials provided with the distribution.
137db96d56Sopenharmony_ci * 3. Neither the name of the project nor the names of its contributors
147db96d56Sopenharmony_ci *    may be used to endorse or promote products derived from this software
157db96d56Sopenharmony_ci *    without specific prior written permission.
167db96d56Sopenharmony_ci *
177db96d56Sopenharmony_ci * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
187db96d56Sopenharmony_ci * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
197db96d56Sopenharmony_ci * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
207db96d56Sopenharmony_ci * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
217db96d56Sopenharmony_ci * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
227db96d56Sopenharmony_ci * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
237db96d56Sopenharmony_ci * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
247db96d56Sopenharmony_ci * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
257db96d56Sopenharmony_ci * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
267db96d56Sopenharmony_ci * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
277db96d56Sopenharmony_ci * SUCH DAMAGE.
287db96d56Sopenharmony_ci */
297db96d56Sopenharmony_ci
307db96d56Sopenharmony_ci#ifndef HAVE_GETADDRINFO
317db96d56Sopenharmony_ci
327db96d56Sopenharmony_ci/*
337db96d56Sopenharmony_ci * Error return codes from getaddrinfo()
347db96d56Sopenharmony_ci */
357db96d56Sopenharmony_ci#ifdef EAI_ADDRFAMILY
367db96d56Sopenharmony_ci/* If this is defined, there is a conflicting implementation
377db96d56Sopenharmony_ci   in the C library, which can't be used for some reason.
387db96d56Sopenharmony_ci   Make sure it won't interfere with this emulation. */
397db96d56Sopenharmony_ci
407db96d56Sopenharmony_ci#undef EAI_ADDRFAMILY
417db96d56Sopenharmony_ci#undef EAI_AGAIN
427db96d56Sopenharmony_ci#undef EAI_BADFLAGS
437db96d56Sopenharmony_ci#undef EAI_FAIL
447db96d56Sopenharmony_ci#undef EAI_FAMILY
457db96d56Sopenharmony_ci#undef EAI_MEMORY
467db96d56Sopenharmony_ci#undef EAI_NODATA
477db96d56Sopenharmony_ci#undef EAI_NONAME
487db96d56Sopenharmony_ci#undef EAI_SERVICE
497db96d56Sopenharmony_ci#undef EAI_SOCKTYPE
507db96d56Sopenharmony_ci#undef EAI_SYSTEM
517db96d56Sopenharmony_ci#undef EAI_BADHINTS
527db96d56Sopenharmony_ci#undef EAI_PROTOCOL
537db96d56Sopenharmony_ci#undef EAI_MAX
547db96d56Sopenharmony_ci#undef getaddrinfo
557db96d56Sopenharmony_ci#define getaddrinfo fake_getaddrinfo
567db96d56Sopenharmony_ci#endif /* EAI_ADDRFAMILY */
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci#define EAI_ADDRFAMILY   1      /* address family for hostname not supported */
597db96d56Sopenharmony_ci#define EAI_AGAIN        2      /* temporary failure in name resolution */
607db96d56Sopenharmony_ci#define EAI_BADFLAGS     3      /* invalid value for ai_flags */
617db96d56Sopenharmony_ci#define EAI_FAIL         4      /* non-recoverable failure in name resolution */
627db96d56Sopenharmony_ci#define EAI_FAMILY       5      /* ai_family not supported */
637db96d56Sopenharmony_ci#define EAI_MEMORY       6      /* memory allocation failure */
647db96d56Sopenharmony_ci#define EAI_NODATA       7      /* no address associated with hostname */
657db96d56Sopenharmony_ci#define EAI_NONAME       8      /* hostname nor servname provided, or not known */
667db96d56Sopenharmony_ci#define EAI_SERVICE      9      /* servname not supported for ai_socktype */
677db96d56Sopenharmony_ci#define EAI_SOCKTYPE    10      /* ai_socktype not supported */
687db96d56Sopenharmony_ci#define EAI_SYSTEM      11      /* system error returned in errno */
697db96d56Sopenharmony_ci#define EAI_BADHINTS    12
707db96d56Sopenharmony_ci#define EAI_PROTOCOL    13
717db96d56Sopenharmony_ci#define EAI_MAX         14
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci/*
747db96d56Sopenharmony_ci * Flag values for getaddrinfo()
757db96d56Sopenharmony_ci */
767db96d56Sopenharmony_ci#ifdef AI_PASSIVE
777db96d56Sopenharmony_ci#undef AI_PASSIVE
787db96d56Sopenharmony_ci#undef AI_CANONNAME
797db96d56Sopenharmony_ci#undef AI_NUMERICHOST
807db96d56Sopenharmony_ci#undef AI_MASK
817db96d56Sopenharmony_ci#undef AI_ALL
827db96d56Sopenharmony_ci#undef AI_V4MAPPED_CFG
837db96d56Sopenharmony_ci#undef AI_ADDRCONFIG
847db96d56Sopenharmony_ci#undef AI_V4MAPPED
857db96d56Sopenharmony_ci#undef AI_DEFAULT
867db96d56Sopenharmony_ci#endif /* AI_PASSIVE */
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci#define AI_PASSIVE      0x00000001 /* get address to use bind() */
897db96d56Sopenharmony_ci#define AI_CANONNAME    0x00000002 /* fill ai_canonname */
907db96d56Sopenharmony_ci#define AI_NUMERICHOST  0x00000004 /* prevent name resolution */
917db96d56Sopenharmony_ci/* valid flags for addrinfo */
927db96d56Sopenharmony_ci#define AI_MASK         (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
937db96d56Sopenharmony_ci
947db96d56Sopenharmony_ci#define AI_ALL          0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
957db96d56Sopenharmony_ci#define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */
967db96d56Sopenharmony_ci#define AI_ADDRCONFIG   0x00000400 /* only if any address is assigned */
977db96d56Sopenharmony_ci#define AI_V4MAPPED     0x00000800 /* accept IPv4-mapped IPv6 address */
987db96d56Sopenharmony_ci/* special recommended flags for getipnodebyname */
997db96d56Sopenharmony_ci#define AI_DEFAULT      (AI_V4MAPPED_CFG | AI_ADDRCONFIG)
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci#endif /* !HAVE_GETADDRINFO */
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci#ifndef HAVE_GETNAMEINFO
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci/*
1067db96d56Sopenharmony_ci * Constants for getnameinfo()
1077db96d56Sopenharmony_ci */
1087db96d56Sopenharmony_ci#ifndef NI_MAXHOST
1097db96d56Sopenharmony_ci#define NI_MAXHOST      1025
1107db96d56Sopenharmony_ci#define NI_MAXSERV      32
1117db96d56Sopenharmony_ci#endif /* !NI_MAXHOST */
1127db96d56Sopenharmony_ci
1137db96d56Sopenharmony_ci/*
1147db96d56Sopenharmony_ci * Flag values for getnameinfo()
1157db96d56Sopenharmony_ci */
1167db96d56Sopenharmony_ci#ifndef NI_NOFQDN
1177db96d56Sopenharmony_ci#define NI_NOFQDN       0x00000001
1187db96d56Sopenharmony_ci#define NI_NUMERICHOST  0x00000002
1197db96d56Sopenharmony_ci#define NI_NAMEREQD     0x00000004
1207db96d56Sopenharmony_ci#define NI_NUMERICSERV  0x00000008
1217db96d56Sopenharmony_ci#define NI_DGRAM        0x00000010
1227db96d56Sopenharmony_ci#endif /* !NI_NOFQDN */
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ci#endif /* !HAVE_GETNAMEINFO */
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci#ifndef HAVE_ADDRINFO
1277db96d56Sopenharmony_cistruct addrinfo {
1287db96d56Sopenharmony_ci    int         ai_flags;       /* AI_PASSIVE, AI_CANONNAME */
1297db96d56Sopenharmony_ci    int         ai_family;      /* PF_xxx */
1307db96d56Sopenharmony_ci    int         ai_socktype;    /* SOCK_xxx */
1317db96d56Sopenharmony_ci    int         ai_protocol;    /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
1327db96d56Sopenharmony_ci    size_t      ai_addrlen;     /* length of ai_addr */
1337db96d56Sopenharmony_ci    char        *ai_canonname;  /* canonical name for hostname */
1347db96d56Sopenharmony_ci    struct sockaddr *ai_addr;           /* binary address */
1357db96d56Sopenharmony_ci    struct addrinfo *ai_next;           /* next structure in linked list */
1367db96d56Sopenharmony_ci};
1377db96d56Sopenharmony_ci#endif /* !HAVE_ADDRINFO */
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci#ifndef HAVE_SOCKADDR_STORAGE
1407db96d56Sopenharmony_ci/*
1417db96d56Sopenharmony_ci * RFC 2553: protocol-independent placeholder for socket addresses
1427db96d56Sopenharmony_ci */
1437db96d56Sopenharmony_ci#define _SS_MAXSIZE     128
1447db96d56Sopenharmony_ci#define _SS_ALIGNSIZE   (sizeof(long long))
1457db96d56Sopenharmony_ci#define _SS_PAD1SIZE    (_SS_ALIGNSIZE - sizeof(u_char) * 2)
1467db96d56Sopenharmony_ci#define _SS_PAD2SIZE    (_SS_MAXSIZE - sizeof(u_char) * 2 - \
1477db96d56Sopenharmony_ci                _SS_PAD1SIZE - _SS_ALIGNSIZE)
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_cistruct sockaddr_storage {
1507db96d56Sopenharmony_ci#ifdef HAVE_SOCKADDR_SA_LEN
1517db96d56Sopenharmony_ci    unsigned char ss_len;               /* address length */
1527db96d56Sopenharmony_ci    unsigned char ss_family;            /* address family */
1537db96d56Sopenharmony_ci#else
1547db96d56Sopenharmony_ci    unsigned short ss_family;           /* address family */
1557db96d56Sopenharmony_ci#endif /* HAVE_SOCKADDR_SA_LEN */
1567db96d56Sopenharmony_ci    char        __ss_pad1[_SS_PAD1SIZE];
1577db96d56Sopenharmony_ci    long long __ss_align;            /* force desired structure storage alignment */
1587db96d56Sopenharmony_ci    char        __ss_pad2[_SS_PAD2SIZE];
1597db96d56Sopenharmony_ci};
1607db96d56Sopenharmony_ci#endif /* !HAVE_SOCKADDR_STORAGE */
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci#ifdef __cplusplus
1637db96d56Sopenharmony_ciextern "C" {
1647db96d56Sopenharmony_ci#endif
1657db96d56Sopenharmony_ci#ifdef ENABLE_IPV6
1667db96d56Sopenharmony_ciextern void freehostent(struct hostent *);
1677db96d56Sopenharmony_ci#endif
1687db96d56Sopenharmony_ci#ifdef __cplusplus
1697db96d56Sopenharmony_ci}
1707db96d56Sopenharmony_ci#endif
171