]> git.meshlink.io Git - catta/blobdiff - avahi-common/address.c
* started writing avahi-discover in python
[catta] / avahi-common / address.c
index 34847070aa30e7ff4ba79c9c63eed5a4b9722873..b982a2cb7ca46f3b0257d6eb3ecc728c0456211b 100644 (file)
@@ -33,9 +33,9 @@
 guint avahi_address_get_size(const AvahiAddress *a) {
     g_assert(a);
 
-    if (a->family == AF_INET)
+    if (a->family == AVAHI_PROTO_INET)
         return 4;
-    else if (a->family == AF_INET6)
+    else if (a->family == AVAHI_PROTO_INET6)
         return 16;
 
     return 0;
@@ -111,14 +111,24 @@ gchar *avahi_reverse_lookup_name_ipv6_int(const AvahiIPv6Address *a) {
     return reverse_lookup_name_ipv6(a, "ip6.int");
 }
 
-AvahiAddress *avahi_address_parse(const char *s, guchar family, AvahiAddress *ret_addr) {
+AvahiAddress *avahi_address_parse(const gchar *s, AvahiProtocol family, AvahiAddress *ret_addr) {
     g_assert(ret_addr);
     g_assert(s);
 
-    if (inet_pton(family, s, ret_addr->data.data) < 0)
-        return NULL;
-
-    ret_addr->family = family;
+    if (family == AVAHI_PROTO_UNSPEC) {
+        if (inet_pton(AF_INET, s, ret_addr->data.data) <= 0) {
+            if (inet_pton(AF_INET6, s, ret_addr->data.data) <= 0)
+                return NULL;
+            else
+                ret_addr->family = AVAHI_PROTO_INET6;
+        } else
+            ret_addr->family = AVAHI_PROTO_INET;
+    } else {
+        if (inet_pton(family, s, ret_addr->data.data) <= 0)
+            return NULL;
+        
+        ret_addr->family = family;
+    }
     
     return ret_addr;
 }
@@ -158,7 +168,7 @@ gboolean avahi_address_is_ipv4_in_ipv6(const AvahiAddress *a) {
     
     g_assert(a);
 
-    if (a->family != AF_INET6)
+    if (a->family != AVAHI_PROTO_INET6)
         return FALSE;
 
     return memcmp(a->data.ipv6.address, ipv4_in_ipv6, sizeof(ipv4_in_ipv6)) == 0;