1 #ifndef INCLUDED_SOCK_ADDR_H 2 #define INCLUDED_SOCK_ADDR_H 3 #include "first.h" 4 5 #include <sys/types.h> 6 #include "sys-socket.h" 7 8 #include "base_decls.h" 9 #include "buffer.h" 10 11 12 union sock_addr { 13 #ifdef HAVE_IPV6 14 struct sockaddr_in6 ipv6; 15 #endif 16 struct sockaddr_in ipv4; 17 #ifdef HAVE_SYS_UN_H 18 struct sockaddr_un un; 19 #endif 20 struct sockaddr plain; 21 }; 22 23 24 __attribute_pure__ 25 static inline int sock_addr_get_family (const sock_addr *saddr); 26 static inline int sock_addr_get_family (const sock_addr *saddr) { 27 return saddr->plain.sa_family; 28 } 29 30 __attribute_pure__ 31 unsigned short sock_addr_get_port (const sock_addr *saddr); 32 33 __attribute_pure__ 34 int sock_addr_is_addr_wildcard (const sock_addr *saddr); 35 36 __attribute_pure__ 37 int sock_addr_is_family_eq (const sock_addr *saddr1, const sock_addr *saddr2); 38 39 __attribute_pure__ 40 int sock_addr_is_port_eq (const sock_addr *saddr1, const sock_addr *saddr2); 41 42 __attribute_pure__ 43 int sock_addr_is_addr_eq (const sock_addr *saddr1, const sock_addr *saddr2); 44 45 #if 0 46 __attribute_pure__ 47 int sock_addr_is_addr_port_eq (const sock_addr *saddr1, const sock_addr *saddr2); 48 #endif 49 50 __attribute_pure__ 51 int sock_addr_is_addr_eq_bits(const sock_addr * restrict a, const sock_addr * restrict b, int bits); 52 53 int sock_addr_assign (sock_addr * restrict saddr, int family, unsigned short nport, const void * restrict naddr); 54 55 int sock_addr_inet_pton(sock_addr * restrict saddr, const char * restrict str, int family, unsigned short port); 56 57 const char * sock_addr_inet_ntop(const sock_addr * restrict saddr, char * restrict buf, socklen_t sz); 58 int sock_addr_inet_ntop_copy_buffer(buffer * restrict b, const sock_addr * restrict saddr); 59 int sock_addr_inet_ntop_append_buffer(buffer * restrict b, const sock_addr * restrict saddr); 60 int sock_addr_stringify_append_buffer(buffer * restrict b, const sock_addr * restrict saddr); 61 int sock_addr_nameinfo_append_buffer(buffer * restrict b, const sock_addr * restrict saddr, log_error_st * restrict errh); 62 63 int sock_addr_from_buffer_hints_numeric(sock_addr * restrict saddr, socklen_t * restrict len, const buffer * restrict b, int family, unsigned short port, log_error_st * restrict errh); 64 int sock_addr_from_str_hints(sock_addr * restrict saddr, socklen_t * restrict len, const char * restrict str, int family, unsigned short port, log_error_st * restrict errh); 65 int sock_addr_from_str_numeric(sock_addr * restrict saddr, const char * restrict str, log_error_st * restrict errh); 66 67 68 #endif 69