17#include "apr_arch_networkio.h"
22#include "apr_private.h"
32#if defined(HAVE_IF_INDEXTONAME) && defined(_MSC_VER)
36#define APR_WANT_STRFUNC
50#if !defined(NETWARE) && !defined(WIN32)
51#ifdef HAVE_SET_H_ERRNO
52#define SET_H_ERRNO(newval) set_h_errno(newval)
54#define SET_H_ERRNO(newval) h_errno = (newval)
57#define SET_H_ERRNO(newval)
60#if APR_HAS_THREADS && !defined(GETHOSTBYNAME_IS_THREAD_SAFE) && \
61 defined(HAVE_GETHOSTBYNAME_R)
66#define GETHOSTBYNAME_BUFLEN 512
73#define AIX_SERVNAME_HACK 1
75#define AIX_SERVNAME_HACK 0
121#if APR_HAVE_SOCKADDR_UN
137 &&
buflen > strlen(
"::ffff:")) {
143 strlen(
buf + strlen(
"::ffff:"))+1);
149#ifdef HAVE_IF_INDEXTONAME
209#if APR_HAVE_SOCKADDR_UN
344#if defined(HAVE_GETADDRINFO)
359#ifdef HAVE_GAI_ADDRCONFIG
407#ifdef HAVE_GAI_ADDRCONFIG
446#if defined(NEGATIVE_EAI)
546#if APR_HAS_THREADS && !defined(GETHOSTBYNAME_IS_THREAD_SAFE) && \
547 defined(HAVE_GETHOSTBYNAME_R) && !defined(BEOS)
548#ifdef GETHOSTBYNAME_R_HOSTENT_DATA
577#if APR_HAS_THREADS && !defined(GETHOSTBYNAME_IS_THREAD_SAFE) && \
578 defined(HAVE_GETHOSTBYNAME_R) && !defined(BEOS)
579#if defined(GETHOSTBYNAME_R_HOSTENT_DATA)
584#if defined(GETHOSTBYNAME_R_GLIBC2)
668#if APR_HAVE_SOCKADDR_UN
673 sizeof((*sa)->sa.unx.sun_path));
676 (*sa)->sa.unx.sun_family =
APR_UNIX;
678 (*sa)->addr_str_len =
sizeof((*sa)->sa.unx.sun_path);
679 (*sa)->ipaddr_ptr = &((*sa)->sa.unx.sun_path);
680 (*sa)->ipaddr_len = (*sa)->addr_str_len;
720 if (
s ==
src ||
s->hostname !=
src->hostname) {
724 d->hostname = (*dst)->hostname;
728 if (
s ==
src ||
s->servname !=
src->servname) {
732 d->servname = (*dst)->servname;
745#if defined(HAVE_GETNAMEINFO)
747#if defined(NI_MAXHOST)
779#if APR_HAVE_SOCKADDR_UN
808#if defined(NEGATIVE_EAI)
818#if APR_HAS_THREADS && !defined(GETHOSTBYADDR_IS_THREAD_SAFE) && \
819 defined(HAVE_GETHOSTBYADDR_R) && !defined(BEOS)
820#ifdef GETHOSTBYNAME_R_HOSTENT_DATA
826 struct hostent hs, *
hptr;
828#if defined(GETHOSTBYNAME_R_HOSTENT_DATA)
834#if defined(GETHOSTBYNAME_R_GLIBC2)
851 struct hostent *
hptr;
874#if APR_HAS_THREADS && !defined(GETSERVBYNAME_IS_THREAD_SAFE) && \
875 defined(HAVE_GETSERVBYNAME_R) && \
876 (defined(GETSERVBYNAME_R_GLIBC2) || defined(GETSERVBYNAME_R_SOLARIS) || \
877 defined(GETSERVBYNAME_R_OSF1))
879#if defined(GETSERVBYNAME_R_OSF1)
884#if defined(GETSERVBYNAME_R_GLIBC2)
896#if APR_HAS_THREADS && !defined(GETSERVBYNAME_IS_THREAD_SAFE) && \
897 defined(HAVE_GETSERVBYNAME_R) && \
898 (defined(GETSERVBYNAME_R_GLIBC2) || defined(GETSERVBYNAME_R_SOLARIS) || \
899 defined(GETSERVBYNAME_R_OSF1))
900#if defined(GETSERVBYNAME_R_GLIBC2)
908#elif defined(GETSERVBYNAME_R_SOLARIS)
915#elif defined(GETSERVBYNAME_R_OSF1)
934#define V4MAPPED_EQUAL(a,b) \
935((a)->sa.sin.sin_family == AF_INET && \
936 (b)->sa.sin.sin_family == AF_INET6 && \
937 IN6_IS_ADDR_V4MAPPED((struct in6_addr *)(b)->ipaddr_ptr) && \
938 !memcmp((a)->ipaddr_ptr, \
939 &((struct in6_addr *)(b)->ipaddr_ptr)->s6_addr[12], \
943#define SCOPE_OR_ZERO(sa_) ((sa_)->family != AF_INET6 ? 0 : \
944 ((sa_)->sa.sin6.sin6_scope_id))
946#define SCOPE_OR_ZERO(sa_) (0)
1003 char buf[
sizeof "255.255.255.255"];
1104 if (strlen(
ipstr) == 0) {
1116 return (*
ipstr ==
'\0');
1160 if ((*ipsub)->family ==
AF_INET6) {
1185 (*ipsub)->family ==
AF_INET) {
1237#if !APR_HAVE_IPV6 || !defined(HAVE_IF_NAMETOINDEX)
1249 sa->
sa.sin6.sin6_scope_id =
idx;
1264 sa->
sa.sin6.sin6_scope_id = (
unsigned int)
i;
1275#if !APR_HAVE_IPV6 || !defined(HAVE_IF_INDEXTONAME)
1289 if (
id) *
id =
sa->
sa.sin6.sin6_scope_id;
const char apr_size_t len
APR general purpose library routines.
apr_size_t const unsigned char unsigned int unsigned int d
APR Standard Headers Support.
const unsigned char * buf
const char apr_port_t port
apr_pool_t const char apr_dbd_t const char ** error
apr_pool_t apr_dbd_t apr_dbd_results_t ** res
const char apr_ssize_t int flags
const void apr_status_t(*) apr_status_t(* APR_DECLARE)(void) apr_pool_pre_cleanup_register(apr_pool_t *p
#define APR_OS_START_EAIERR
#define apr_get_netos_error()
#define APR_OS_START_SYSERR
void * memchr(const void *s, int c, size_t n)
apr_sockaddr_t * sockaddr
const apr_sockaddr_t * addr2
const char const char * mask_or_numbits
#define apr_pcalloc(p, size)
const char * apr_inet_ntop(int af, const void *src, char *dst, apr_size_t size)
int apr_inet_pton(int af, const char *src, void *dst)
union apr_sockaddr_t::@55 sa
int local_interface_unknown
apr_sockaddr_t * remote_addr
apr_sockaddr_t * local_addr
#define SET_H_ERRNO(newval)
static apr_status_t parse_ip(apr_ipsubnet_t *ipsub, const char *ipstr, int network_allowed)
#define V4MAPPED_EQUAL(a, b)
static apr_status_t find_addresses(apr_sockaddr_t **sa, const char *hostname, apr_int32_t family, apr_port_t port, apr_int32_t flags, apr_pool_t *p)
static void fix_subnet(apr_ipsubnet_t *ipsub)
void apr_sockaddr_vars_set(apr_sockaddr_t *addr, int family, apr_port_t port)
static apr_status_t get_remote_addr(apr_socket_t *sock)
#define SCOPE_OR_ZERO(sa_)
static apr_status_t parse_network(apr_ipsubnet_t *ipsub, const char *network)
static int looks_like_ip(const char *ipstr)
static apr_status_t get_local_addr(apr_socket_t *sock)
typedef int(WSAAPI *apr_winapi_fpt_WSAPoll)(IN OUT LPWSAPOLLFD fdArray