X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=secnet.h;h=ead74716e3fd7e18a2c51cac78278350534cc74f;hb=08b62a6c691fe0e772c74de9d60803afcb7d2aa9;hp=03ce7c927ff3563bedd9ad2308564f3276695a30;hpb=cc4206168fb95a0dcd96c2e1f8243e9fd6f4589b;p=secnet.git diff --git a/secnet.h b/secnet.h index 03ce7c9..ead7471 100644 --- a/secnet.h +++ b/secnet.h @@ -30,6 +30,14 @@ typedef const char *cstring_t; #define True (_Bool)1 typedef _Bool bool_t; +union iaddr { + struct sockaddr sa; + struct sockaddr_in sin; +#ifdef CONFIG_IPV6 + struct sockaddr_in6 sin6; +#endif +}; + #define ASSERT(x) do { if (!(x)) { fatal("assertion failed line %d file " \ __FILE__,__LINE__); } } while(0) @@ -106,7 +114,7 @@ extern cstring_t *dict_keys(dict_t *dict); /* List-manipulation functions */ extern list_t *list_new(void); -extern int32_t list_length(list_t *a); +extern int32_t list_length(const list_t *a); extern list_t *list_append(list_t *a, item_t *i); extern list_t *list_append_list(list_t *a, list_t *b); /* Returns an item from the list (index starts at 0), or NULL */ @@ -329,13 +337,9 @@ 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; + int ix; /* see comment `Re comm_addr.ix' in udp.c */ }; /* Return True if the packet was processed, and shouldn't be passed to @@ -362,11 +366,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 @@ -563,6 +575,7 @@ extern void log_from_fd(int fd, cstring_t prefix, struct log_if *log); #define STRING(x) STRING2(x) #define FILLZERO(obj) (memset(&(obj),0,sizeof((obj)))) +#define ARRAY_SIZE(ary) (sizeof((ary))/sizeof((ary)[0])) /* * void COPY_OBJ( OBJECT& dst, const OBJECT& src);