X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/cc4206168fb95a0dcd96c2e1f8243e9fd6f4589b..2093fb5c:/secnet.h diff --git a/secnet.h b/secnet.h index 03ce7c9..3fba00f 100644 --- a/secnet.h +++ b/secnet.h @@ -30,6 +30,11 @@ typedef const char *cstring_t; #define True (_Bool)1 typedef _Bool bool_t; +union iaddr { + struct sockaddr sa; + struct sockaddr_in sin; +}; + #define ASSERT(x) do { if (!(x)) { fatal("assertion failed line %d file " \ __FILE__,__LINE__); } } while(0) @@ -329,13 +334,8 @@ struct rsaprivkey_if { struct comm_addr { /* This struct is pure data; in particular comm's clients may freely copy it. */ - /* Everyone is also guaranteed that all padding is set to zero, ie - that comm_addrs referring to semantically identical peers will - compare equal with memcmp. Anyone who constructs a comm_addr - must start by memsetting it with FILLZERO, or some - equivalent. */ struct comm_if *comm; - struct sockaddr_in sin; + union iaddr ia; }; /* Return True if the packet was processed, and shouldn't be passed to @@ -362,11 +362,19 @@ struct comm_if { comm_addr_to_string_fn *addr_to_string; }; +bool_t iaddr_equal(const union iaddr *ia, const union iaddr *ib); + static inline const char *comm_addr_to_string(const struct comm_addr *ca) { return ca->comm->addr_to_string(ca->comm->st, ca); } +static inline bool_t comm_addr_equal(const struct comm_addr *a, + const struct comm_addr *b) +{ + return a->comm==b->comm && iaddr_equal(&a->ia,&b->ia); +} + /* LOG interface */ #define LOG_MESSAGE_BUFLEN 1023