]> git.meshlink.io Git - catta/blobdiff - address.c
make the daemon response to queries
[catta] / address.c
index 9099ad9b00e8d36fd65f534031dfe7cdeffb9ad6..b46e043c22698e4301bdaeaa77312a77a722bfb7 100644 (file)
--- a/address.c
+++ b/address.c
@@ -23,7 +23,7 @@ gint flx_address_cmp(const flxAddress *a, const flxAddress *b) {
     if (a->family != b->family)
         return -1;
 
-    return memcmp(a, b, flx_address_get_size(a));
+    return memcmp(a->data, b->data, flx_address_get_size(a));
 }
 
 gchar *flx_address_snprint(char *s, guint length, const flxAddress *a) {
@@ -86,7 +86,7 @@ gchar *flx_reverse_lookup_name_ipv6_int(const flxIPv6Address *a) {
     return reverse_lookup_name_ipv6(a, "ip6.int");
 }
 
-flxAddress *flx_address_parse(const char *s, int family, flxAddress *ret_addr) {
+flxAddress *flx_address_parse(const char *s, guchar family, flxAddress *ret_addr) {
     g_assert(ret_addr);
     g_assert(s);
 
@@ -97,3 +97,19 @@ flxAddress *flx_address_parse(const char *s, int family, flxAddress *ret_addr) {
     
     return ret_addr;
 }
+
+flxAddress *flx_address_from_sockaddr(const struct sockaddr* sa, flxAddress *ret_addr) {
+    g_assert(sa);
+    g_assert(ret_addr);
+
+    g_assert(sa->sa_family == AF_INET || sa->sa_family == AF_INET6);
+
+    ret_addr->family = sa->sa_family;
+
+    if (sa->sa_family == AF_INET)
+        memcpy(&ret_addr->ipv4, &((struct sockaddr_in*) sa)->sin_addr, sizeof(ret_addr->ipv4));
+    else
+        memcpy(&ret_addr->ipv6, &((struct sockaddr_in6*) sa)->sin6_addr, sizeof(ret_addr->ipv6));
+
+    return ret_addr;
+}