#include #include "addr.h" int addr_len(const sockaddr_any *addr) { switch (addr->any.sa_family) { case AF_INET: return sizeof(struct sockaddr_in); default: return 0; } } sockaddr_any *addr_parse(blob_t b, sockaddr_any *addr) { memset(addr, 0, sizeof(*addr)); addr->ipv4.sin_family = AF_INET; addr->ipv4.sin_addr.s_addr = blob_inet_addr(b); if (addr->ipv4.sin_addr.s_addr == -1) return NULL; return addr; } unsigned long addr_hash(const sockaddr_any *addr) { switch (addr->any.sa_family) { case AF_INET: return htonl(addr->ipv4.sin_addr.s_addr); default: return 0; } } const char *addr_print(const sockaddr_any *addr) { switch (addr->any.sa_family) { case AF_INET: return inet_ntoa(addr->ipv4.sin_addr); default: return "unknown"; } } blob_t addr_get_hostaddr_blob(const sockaddr_any *addr) { switch (addr->any.sa_family) { case AF_INET: return BLOB_BUF(&addr->ipv4.sin_addr); default: return BLOB_NULL; } }