diff options
| -rw-r--r-- | polyp/Makefile.am | 4 | ||||
| -rw-r--r-- | polyp/inet_ntop.c | 78 | ||||
| -rw-r--r-- | polyp/inet_ntop.h | 6 | ||||
| -rw-r--r-- | polyp/socket-server.c | 31 | 
4 files changed, 91 insertions, 28 deletions
diff --git a/polyp/Makefile.am b/polyp/Makefile.am index ab7dfe5b..22e8da3d 100644 --- a/polyp/Makefile.am +++ b/polyp/Makefile.am @@ -540,7 +540,9 @@ libprotocol_simple_la_SOURCES = protocol-simple.c protocol-simple.h  libprotocol_simple_la_LDFLAGS = -avoid-version  libprotocol_simple_la_LIBADD = $(AM_LIBADD) libpolypcore.la libsocket-server.la libiochannel.la -libsocket_server_la_SOURCES = socket-server.c socket-server.h +libsocket_server_la_SOURCES = \ +		inet_ntop.c inet_ntop.h \ +		socket-server.c socket-server.h  libsocket_server_la_LDFLAGS = -avoid-version  libsocket_server_la_LIBADD = $(AM_LIBADD) libpolypcore.la libiochannel.la libsocket-util.la $(LIBWRAP_LIBS) $(WINSOCK_LIBS) diff --git a/polyp/inet_ntop.c b/polyp/inet_ntop.c new file mode 100644 index 00000000..19f29f86 --- /dev/null +++ b/polyp/inet_ntop.c @@ -0,0 +1,78 @@ +/* $Id: inet_ntop.c 428 2006-01-09 16:50:39Z ossman $ */ + +/*** +  This file is part of polypaudio. +  +  polypaudio is free software; you can redistribute it and/or modify +  it under the terms of the GNU Lesser General Public License as +  published by the Free Software Foundation; either version 2.1 of the +  License, or (at your option) any later version. +  +  polypaudio is distributed in the hope that it will be useful, but +  WITHOUT ANY WARRANTY; without even the implied warranty of +  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +  Lesser General Public License for more details. +  +  You should have received a copy of the GNU Lesser General Public +  License along with polypaudio; if not, write to the Free Software +  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +  USA. +***/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> + +#ifndef HAVE_INET_NTOP + +#ifdef HAVE_SYS_SOCKET_H +#include <sys/socket.h> +#endif + +#include "winsock.h" + +#include "inet_ntop.h" + +const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) { +    struct in_addr *in = (struct in_addr*)src; +    struct in6_addr *in6 = (struct in6_addr*)src; + +    assert(src && dst); + +    switch (af) { +    case AF_INET: +        snprintf(dst, cnt, "%d.%d.%d.%d", +#ifdef WORDS_BIGENDIAN +            (int)(in->s_addr >> 24) & 0xff, +            (int)(in->s_addr >> 16) & 0xff, +            (int)(in->s_addr >>  8) & 0xff, +            (int)(in->s_addr >>  0) & 0xff); +#else +            (int)(in->s_addr >>  0) & 0xff, +            (int)(in->s_addr >>  8) & 0xff, +            (int)(in->s_addr >> 16) & 0xff, +            (int)(in->s_addr >> 24) & 0xff); +#endif +        break; +    case AF_INET6: +        snprintf(dst, cnt, "%x:%x:%x:%x:%x:%x:%x:%x", +            in6->s6_addr[ 0] << 8 | in6->s6_addr[ 1], +            in6->s6_addr[ 2] << 8 | in6->s6_addr[ 3], +            in6->s6_addr[ 4] << 8 | in6->s6_addr[ 5], +            in6->s6_addr[ 6] << 8 | in6->s6_addr[ 7], +            in6->s6_addr[ 8] << 8 | in6->s6_addr[ 9], +            in6->s6_addr[10] << 8 | in6->s6_addr[11], +            in6->s6_addr[12] << 8 | in6->s6_addr[13], +            in6->s6_addr[14] << 8 | in6->s6_addr[15]); +        break; +    default: +        errno = EAFNOSUPPORT; +        return NULL; +    } + +    return dst; +} + +#endif /* INET_NTOP */ diff --git a/polyp/inet_ntop.h b/polyp/inet_ntop.h new file mode 100644 index 00000000..11bc6112 --- /dev/null +++ b/polyp/inet_ntop.h @@ -0,0 +1,6 @@ +#ifndef fooinet_ntophfoo +#define fooinet_ntophfoo + +const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt); + +#endif diff --git a/polyp/socket-server.c b/polyp/socket-server.c index 18122f33..a78f04cd 100644 --- a/polyp/socket-server.c +++ b/polyp/socket-server.c @@ -52,6 +52,10 @@  #include <tcpd.h>  #endif +#ifndef HAVE_INET_NTOP +#include "inet_ntop.h" +#endif +  #include "winsock.h"  #include "socket-server.h" @@ -362,22 +366,10 @@ char *pa_socket_server_get_address(struct pa_socket_server *s, char *c, size_t l              } else {                  char ip[INET6_ADDRSTRLEN]; -#ifdef HAVE_INET_NTOP                  if (!inet_ntop(AF_INET6, &sa.sin6_addr, ip, sizeof(ip))) {                      pa_log(__FILE__": inet_ntop() failed: %s\n", strerror(errno));                      return NULL;                  } -#else -                snprintf(ip, INET6_ADDRSTRLEN, "%x:%x:%x:%x:%x:%x:%x:%x", -                    sa.sin6_addr.s6_addr[ 0] << 8 | sa.sin6_addr.s6_addr[ 1], -                    sa.sin6_addr.s6_addr[ 2] << 8 | sa.sin6_addr.s6_addr[ 3], -                    sa.sin6_addr.s6_addr[ 4] << 8 | sa.sin6_addr.s6_addr[ 5], -                    sa.sin6_addr.s6_addr[ 6] << 8 | sa.sin6_addr.s6_addr[ 7], -                    sa.sin6_addr.s6_addr[ 8] << 8 | sa.sin6_addr.s6_addr[ 9], -                    sa.sin6_addr.s6_addr[10] << 8 | sa.sin6_addr.s6_addr[11], -                    sa.sin6_addr.s6_addr[12] << 8 | sa.sin6_addr.s6_addr[13], -                    sa.sin6_addr.s6_addr[14] << 8 | sa.sin6_addr.s6_addr[15]); -#endif                  snprintf(c, l, "tcp6:[%s]:%u", ip, (unsigned) ntohs(sa.sin6_port));              } @@ -409,25 +401,10 @@ char *pa_socket_server_get_address(struct pa_socket_server *s, char *c, size_t l              } else {                  char ip[INET_ADDRSTRLEN]; -#ifdef HAVE_INET_NTOP                  if (!inet_ntop(AF_INET, &sa.sin_addr, ip, sizeof(ip))) {                      pa_log(__FILE__": inet_ntop() failed: %s\n", strerror(errno));                      return NULL;                  } -#else /* HAVE_INET_NTOP */ -                snprintf(ip, INET_ADDRSTRLEN, "%d.%d.%d.%d", -#ifdef WORDS_BIGENDIAN -                    (int)(sa.sin_addr.s_addr >> 24) & 0xff, -                    (int)(sa.sin_addr.s_addr >> 16) & 0xff, -                    (int)(sa.sin_addr.s_addr >>  8) & 0xff, -                    (int)(sa.sin_addr.s_addr >>  0) & 0xff); -#else -                    (int)(sa.sin_addr.s_addr >>  0) & 0xff, -                    (int)(sa.sin_addr.s_addr >>  8) & 0xff, -                    (int)(sa.sin_addr.s_addr >> 16) & 0xff, -                    (int)(sa.sin_addr.s_addr >> 24) & 0xff); -#endif -#endif /* HAVE_INET_NTOP */                  snprintf(c, l, "tcp:[%s]:%u", ip, (unsigned) ntohs(sa.sin_port));  | 
