2 #include <sys/socket.h>
8 guint flx_address_get_size(const flxAddress *a) {
11 if (a->family == AF_INET)
13 else if (a->family == AF_INET6)
19 gint flx_address_cmp(const flxAddress *a, const flxAddress *b) {
23 if (a->family != b->family)
26 return memcmp(a->data, b->data, flx_address_get_size(a));
29 gchar *flx_address_snprint(char *s, guint length, const flxAddress *a) {
33 return (gchar*) inet_ntop(a->family, a->data, s, length);
36 gchar* flx_reverse_lookup_name_ipv4(const flxIPv4Address *a) {
37 guint32 n = ntohl(a->address);
40 return g_strdup_printf("%u.%u.%u.%u.in-addr.arpa", n & 0xFF, (n >> 8) & 0xFF, (n >> 16) & 0xFF, n >> 24);
43 static gchar *reverse_lookup_name_ipv6(const flxIPv6Address *a, const gchar *suffix) {
45 return g_strdup_printf("%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%s",
81 gchar *flx_reverse_lookup_name_ipv6_arpa(const flxIPv6Address *a) {
82 return reverse_lookup_name_ipv6(a, "ip6.arpa");
85 gchar *flx_reverse_lookup_name_ipv6_int(const flxIPv6Address *a) {
86 return reverse_lookup_name_ipv6(a, "ip6.int");
89 flxAddress *flx_address_parse(const char *s, guchar family, flxAddress *ret_addr) {
93 if (inet_pton(family, s, ret_addr->data) < 0)
96 ret_addr->family = family;