summaryrefslogtreecommitdiffstats
path: root/src/polypcore
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2006-02-21 01:08:53 +0000
committerLennart Poettering <lennart@poettering.net>2006-02-21 01:08:53 +0000
commit8c80dd63025251d4f73997f24c68fdbe318b1f52 (patch)
tree827fc59df527417a3a7b8837195337441f802ff7 /src/polypcore
parentc07928a32dd5041c272be2e85581cc5773f81577 (diff)
* 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
Diffstat (limited to 'src/polypcore')
-rw-r--r--src/polypcore/socket-server.c43
-rw-r--r--src/polypcore/socket-server.h4
2 files changed, 38 insertions, 9 deletions
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);