]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/parseaddr.c
device-manager: Rather than flagging the device as available, just include the sink...
[pulseaudio] / src / pulsecore / parseaddr.c
index c5cd7fe76917e7ec4c467de07a9ab33f25498a93..44cd9a0508e3a4ebe45ff182821a401d9289ce33 100644 (file)
@@ -25,6 +25,8 @@
 
 #include <string.h>
 #include <stdlib.h>
+#include <arpa/inet.h>
+#include <sys/socket.h>
 
 #include <pulse/xmalloc.h>
 #include <pulse/util.h>
@@ -87,13 +89,15 @@ int pa_parse_address(const char *name, pa_parsed_address *ret_p) {
     ret_p->type = PA_PARSED_ADDRESS_TCP_AUTO;
 
     if (*name == '{') {
-        char hn[256], *pfx;
-        /* The URL starts with a host specification for detecting local connections */
+        char *id, *pfx;
 
-        if (!pa_get_host_name(hn, sizeof(hn)))
+        /* The URL starts with a host id for detecting local connections */
+        if (!(id = pa_machine_id()))
             return -1;
 
-        pfx = pa_sprintf_malloc("{%s}", hn);
+        pfx = pa_sprintf_malloc("{%s}", id);
+        pa_xfree(id);
+
         if (!pa_startswith(name, pfx)) {
             pa_xfree(pfx);
             /* Not local */
@@ -129,3 +133,17 @@ int pa_parse_address(const char *name, pa_parsed_address *ret_p) {
 
     return 0;
 }
+
+pa_bool_t pa_is_ip_address(const char *a) {
+    char buf[INET6_ADDRSTRLEN];
+
+    pa_assert(a);
+
+    if (inet_pton(AF_INET6, a, buf) >= 1)
+        return TRUE;
+
+    if (inet_pton(AF_INET, a, buf) >= 1)
+        return TRUE;
+
+    return FALSE;
+}