Put inet_ntop() emulation in a seperate file.
authorPierre Ossman <ossman@cendio.se>
Mon, 9 Jan 2006 17:14:30 +0000 (17:14 +0000)
committerPierre Ossman <ossman@cendio.se>
Mon, 9 Jan 2006 17:14:30 +0000 (17:14 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/ossman@432 fefdeb5f-60dc-0310-8127-8f9354f1896f

polyp/Makefile.am
polyp/inet_ntop.c [new file with mode: 0644]
polyp/inet_ntop.h [new file with mode: 0644]
polyp/socket-server.c

index ab7dfe5..22e8da3 100644 (file)
@@ -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 (file)
index 0000000..19f29f8
--- /dev/null
@@ -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 (file)
index 0000000..11bc611
--- /dev/null
@@ -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
index 18122f3..a78f04c 100644 (file)
 #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));