summaryrefslogtreecommitdiffstats
path: root/src/addr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/addr.h')
-rw-r--r--src/addr.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/addr.h b/src/addr.h
new file mode 100644
index 0000000..452d14b
--- /dev/null
+++ b/src/addr.h
@@ -0,0 +1,32 @@
+#ifndef ADDR_H
+#define ADDR_H
+
+#include <arpa/inet.h>
+#include "blob.h"
+
+typedef union {
+ struct sockaddr any;
+ struct sockaddr_in ipv4;
+} sockaddr_any;
+
+int addr_len(const sockaddr_any *addr);
+sockaddr_any *addr_parse(blob_t text, sockaddr_any *addr);
+unsigned long addr_hash(const sockaddr_any *addr);
+const char *addr_print(const sockaddr_any *addr);
+blob_t addr_get_hostaddr_blob(const sockaddr_any *addr);
+void addr_push_hostaddr(blob_t *b, const sockaddr_any *addr);
+
+static inline void addr_copy(sockaddr_any *dst, const sockaddr_any *src)
+{
+ memcpy(dst, src, addr_len(src));
+}
+
+static inline int addr_cmp(const sockaddr_any *a, const sockaddr_any *b)
+{
+ if (a->any.sa_family != b->any.sa_family)
+ return -1;
+ return memcmp(a, b, addr_len(a));
+}
+
+#endif
+