From 8c80dd63025251d4f73997f24c68fdbe318b1f52 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 21 Feb 2006 01:08:53 +0000 Subject: * Don't build seperate ipv4/ipv6 versions of the protocol plugins * Instead try IPv6 and if that fails fall back to IPv4 git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@548 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/polypcore/socket-server.c | 43 +++++++++++++++++++++++++++++++++++-------- src/polypcore/socket-server.h | 4 +++- 2 files changed, 38 insertions(+), 9 deletions(-) (limited to 'src/polypcore') diff --git a/src/polypcore/socket-server.c b/src/polypcore/socket-server.c index d1646984..5f84911d 100644 --- a/src/polypcore/socket-server.c +++ b/src/polypcore/socket-server.c @@ -101,18 +101,18 @@ static void callback(pa_mainloop_api *mainloop, pa_io_event *e, int fd, PA_GCC_U #ifdef HAVE_LIBWRAP - if (s->type == SOCKET_SERVER_IPV4 && s->tcpwrap_service) { + if (s->tcpwrap_service) { struct request_info req; request_init(&req, RQ_DAEMON, s->tcpwrap_service, RQ_FILE, nfd, NULL); fromhost(&req); if (!hosts_access(&req)) { - pa_log(__FILE__": TCP connection refused by tcpwrap.\n"); + pa_log_warn(__FILE__": TCP connection refused by tcpwrap.\n"); close(nfd); goto finish; } - pa_log(__FILE__": TCP connection accepted by tcpwrap.\n"); + pa_log_info(__FILE__": TCP connection accepted by tcpwrap.\n"); } #endif @@ -221,7 +221,7 @@ pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address assert(m && port); if ((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) { - pa_log(__FILE__": socket(): %s\n", strerror(errno)); + pa_log(__FILE__": socket(PF_INET): %s\n", strerror(errno)); goto fail; } @@ -261,7 +261,7 @@ fail: return NULL; } -pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port) { +pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port, const char *tcpwrap_service) { pa_socket_server *ss; int fd = -1; struct sockaddr_in6 sa; @@ -270,7 +270,7 @@ pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t ad assert(m && port); if ((fd = socket(PF_INET6, SOCK_STREAM, 0)) < 0) { - pa_log(__FILE__": socket(): %s\n", strerror(errno)); + pa_log(__FILE__": socket(PF_INET6): %s\n", strerror(errno)); goto fail; } @@ -296,9 +296,11 @@ pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t ad goto fail; } - if ((ss = pa_socket_server_new(m, fd))) + if ((ss = pa_socket_server_new(m, fd))) { ss->type = SOCKET_SERVER_IPV6; - + ss->tcpwrap_service = pa_xstrdup(tcpwrap_service); + } + return ss; fail: @@ -308,6 +310,31 @@ fail: return NULL; } +pa_socket_server* pa_socket_server_new_ip_loopback(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service) { + pa_socket_server *s; + + assert(m); + assert(port > 0); + + if (!(s = pa_socket_server_new_ipv6(m, in6addr_loopback.s6_addr, port, tcpwrap_service))) + s = pa_socket_server_new_ipv4(m, INADDR_LOOPBACK, port, tcpwrap_service); + + return s; +} + +pa_socket_server* pa_socket_server_new_ip_any(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service) { + pa_socket_server *s; + + assert(m); + assert(port > 0); + + if (!(s = pa_socket_server_new_ipv6(m, in6addr_any.s6_addr, port, tcpwrap_service))) + s = pa_socket_server_new_ipv4(m, INADDR_ANY, port, tcpwrap_service); + + return s; +} + + static void socket_server_free(pa_socket_server*s) { assert(s); close(s->fd); diff --git a/src/polypcore/socket-server.h b/src/polypcore/socket-server.h index 6bb83427..d11cee49 100644 --- a/src/polypcore/socket-server.h +++ b/src/polypcore/socket-server.h @@ -33,7 +33,9 @@ typedef struct pa_socket_server pa_socket_server; pa_socket_server* pa_socket_server_new(pa_mainloop_api *m, int fd); pa_socket_server* pa_socket_server_new_unix(pa_mainloop_api *m, const char *filename); pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address, uint16_t port, const char *tcpwrap_service); -pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port); +pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port, const char *tcpwrap_service); +pa_socket_server* pa_socket_server_new_ip_loopback(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service); +pa_socket_server* pa_socket_server_new_ip_any(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service); void pa_socket_server_unref(pa_socket_server*s); pa_socket_server* pa_socket_server_ref(pa_socket_server *s); -- cgit