summaryrefslogtreecommitdiffstats
path: root/src/libutil/addr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil/addr.c')
-rw-r--r--src/libutil/addr.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/libutil/addr.c b/src/libutil/addr.c
index 2b5ca9854..1da69e114 100644
--- a/src/libutil/addr.c
+++ b/src/libutil/addr.c
@@ -25,6 +25,7 @@
#include "addr.h"
#include "util.h"
#include "logger.h"
+#include "xxhash.h"
#include "unix-std.h"
/* pwd and grp */
@@ -1276,3 +1277,32 @@ rspamd_inet_address_get_af (const rspamd_inet_addr_t *addr)
return addr->af;
}
+
+
+guint
+rspamd_inet_address_hash (gconstpointer a)
+{
+ const rspamd_inet_addr_t *addr = a;
+ XXH64_state_t st;
+
+ XXH64_reset (&st, rspamd_hash_seed ());
+ XXH64_update (&st, &addr->af, sizeof (addr->af));
+
+
+ if (addr->u.un) {
+ XXH64_update (&st, addr->u.un, sizeof (*addr->u.un));
+ }
+ else {
+ XXH64_update (&st, &addr->u.in.addr, addr->slen);
+ }
+
+ return XXH64_digest (&st);
+}
+
+gboolean
+rspamd_inet_address_equal (gconstpointer a, gconstpointer b)
+{
+ const rspamd_inet_addr_t *a1 = a, *a2 = b;
+
+ return rspamd_inet_address_compare (a1, a2) == 0;
+}