summaryrefslogtreecommitdiffstats
path: root/src/pulsecore/parseaddr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pulsecore/parseaddr.c')
-rw-r--r--src/pulsecore/parseaddr.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/pulsecore/parseaddr.c b/src/pulsecore/parseaddr.c
index c5cd7fe7..44cd9a05 100644
--- a/src/pulsecore/parseaddr.c
+++ b/src/pulsecore/parseaddr.c
@@ -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;
+}