X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-common%2Faddress.c;h=8f1848eade5b9372c232847aa07f6a3c1f4d6173;hb=d859c4c4c0b5889af50355f6552fbcd2eae36bd3;hp=34847070aa30e7ff4ba79c9c63eed5a4b9722873;hpb=c5544522f6409095627dc3d1129560195ab4ec40;p=catta diff --git a/avahi-common/address.c b/avahi-common/address.c index 3484707..8f1848e 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; } @@ -132,9 +142,9 @@ AvahiAddress *avahi_address_from_sockaddr(const struct sockaddr* sa, AvahiAddres ret_addr->family = sa->sa_family; if (sa->sa_family == AF_INET) - memcpy(&ret_addr->data.ipv4, &((struct sockaddr_in*) sa)->sin_addr, sizeof(ret_addr->data.ipv4)); + memcpy(&ret_addr->data.ipv4, &((const struct sockaddr_in*) sa)->sin_addr, sizeof(ret_addr->data.ipv4)); else - memcpy(&ret_addr->data.ipv6, &((struct sockaddr_in6*) sa)->sin6_addr, sizeof(ret_addr->data.ipv6)); + memcpy(&ret_addr->data.ipv6, &((const struct sockaddr_in6*) sa)->sin6_addr, sizeof(ret_addr->data.ipv6)); return ret_addr; } @@ -145,9 +155,9 @@ guint16 avahi_port_from_sockaddr(const struct sockaddr* sa) { g_assert(sa->sa_family == AF_INET || sa->sa_family == AF_INET6); if (sa->sa_family == AF_INET) - return ntohs(((struct sockaddr_in*) sa)->sin_port); + return ntohs(((const struct sockaddr_in*) sa)->sin_port); else - return ntohs(((struct sockaddr_in6*) sa)->sin6_port); + return ntohs(((const struct sockaddr_in6*) sa)->sin6_port); } gboolean avahi_address_is_ipv4_in_ipv6(const AvahiAddress *a) { @@ -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;