X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Faddress.c;h=b982a2cb7ca46f3b0257d6eb3ecc728c0456211b;hb=38b45921cd1d33119f1c06979a57bcfe982e22da;hp=34847070aa30e7ff4ba79c9c63eed5a4b9722873;hpb=c5544522f6409095627dc3d1129560195ab4ec40;p=catta diff --git a/avahi-common/address.c b/avahi-common/address.c index 3484707..b982a2c 100644 --- a/avahi-common/address.c +++ b/avahi-common/address.c @@ -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;