]> code.delx.au - pulseaudio/commitdiff
add listen= parameter to tcp protocol modules
authorLennart Poettering <lennart@poettering.net>
Wed, 22 Feb 2006 20:44:37 +0000 (20:44 +0000)
committerLennart Poettering <lennart@poettering.net>
Wed, 22 Feb 2006 20:44:37 +0000 (20:44 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@569 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/modules/module-protocol-stub.c
src/polypcore/socket-server.c
src/polypcore/socket-server.h

index f72a68a59accd1fbdcce3e296023b0cb58421271..641e3624d4b79cf97a0842584d6cf8ea3bd03ee4 100644 (file)
@@ -52,7 +52,7 @@
 
 #ifdef USE_TCP_SOCKETS
 #define SOCKET_DESCRIPTION "(TCP sockets)"
-#define SOCKET_USAGE "port=<TCP port number> loopback=<listen on loopback device only?>"
+#define SOCKET_USAGE "port=<TCP port number> loopback=<listen on loopback device only?> listen=<address to listen on>"
 #else
 #define SOCKET_DESCRIPTION "(UNIX sockets)"
 #define SOCKET_USAGE "socket=<path to UNIX socket>"
@@ -146,6 +146,7 @@ static const char* const valid_modargs[] = {
 #if defined(USE_TCP_SOCKETS)
     "port",
     "loopback",
+    "listen",
 #else
     "socket",
 #endif
@@ -157,6 +158,7 @@ static pa_socket_server *create_socket_server(pa_core *c, pa_modargs *ma) {
 #if defined(USE_TCP_SOCKETS)
     int loopback = 1;
     uint32_t port = IPV4_PORT;
+    const char *listen_on;
 
     if (pa_modargs_get_value_boolean(ma, "loopback", &loopback) < 0) {
         pa_log(__FILE__": loopback= expects a boolean argument.\n");
@@ -168,8 +170,12 @@ static pa_socket_server *create_socket_server(pa_core *c, pa_modargs *ma) {
         return NULL;
     }
 
+    listen_on = pa_modargs_get_value(ma, "listen", NULL);
 
-    if (loopback) {
+    if (listen_on) {
+        if (!(s = pa_socket_server_new_ip_string(c->mainloop, listen_on, port, TCPWRAP_SERVICE)))
+            return NULL;
+    } else if (loopback) {
         if (!(s = pa_socket_server_new_ip_loopback(c->mainloop, port, TCPWRAP_SERVICE)))
             return NULL;
     } else {
index 5f84911d79bc26886846e62b6d7fa3bddd939217..b12974969636cfbdeab61350bb1ea8bac8f7a37c 100644 (file)
@@ -334,6 +334,24 @@ pa_socket_server* pa_socket_server_new_ip_any(pa_mainloop_api *m, uint16_t port,
     return s;
 }
 
+pa_socket_server* pa_socket_server_new_ip_string(pa_mainloop_api *m, const char *name, uint16_t port, const char *tcpwrap_service) {
+    uint8_t ipv6[16];
+    uint32_t ipv4;
+    
+    assert(m);
+    assert(name);
+    assert(port > 0);
+
+    if (inet_pton(AF_INET6, name, ipv6) > 0)
+        return pa_socket_server_new_ipv6(m, ipv6, port, tcpwrap_service);
+
+    if (inet_pton(AF_INET, name, &ipv4) > 0)
+        return pa_socket_server_new_ipv4(m, ntohl(ipv4), port, tcpwrap_service);
+
+    pa_log_warn(__FILE__": failed to parse '%s'.\n", name);
+
+    return NULL;
+}
 
 static void socket_server_free(pa_socket_server*s) {
     assert(s);
index d11cee495ceaf9b8282b9e3cb1cc6cb17da6c2ff..3babbc1402fd8411ae339e6107ae8f1805ef7731 100644 (file)
@@ -36,6 +36,7 @@ pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address
 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);
+pa_socket_server* pa_socket_server_new_ip_string(pa_mainloop_api *m, const char *name, 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);