X-Git-Url: http://sjero.net/git/?p=iperf;a=blobdiff_plain;f=include%2FSocketAddr.h;h=37a735977d6f14aaaa9060810f4d8d6fe8984f0c;hp=feffdc780603c359c4a0ecda8569694d9823f0cf;hb=a5a03e6ab0fdf9c4d7d4c085fcf01436f9ba3202;hpb=90fc1e2c0c74319759b21d4a177c32691b88fdf3 diff --git a/include/SocketAddr.h b/include/SocketAddr.h index feffdc7..37a7359 100644 --- a/include/SocketAddr.h +++ b/include/SocketAddr.h @@ -55,48 +55,34 @@ #include "headers.h" #include "Settings.hpp" +#include #ifdef __cplusplus extern "C" { #endif -/* ------------------------------------------------------------------- */ - void SockAddr_localAddr( thread_Settings *inSettings ); - void SockAddr_remoteAddr( thread_Settings *inSettings ); - void SockAddr_setHostname( const char* inHostname, - iperf_sockaddr *inSockAddr, - int isIPv6 ); // DNS lookup - void SockAddr_getHostname( iperf_sockaddr *inSockAddr, - char* outHostname, - size_t len ); // reverse DNS lookup - void SockAddr_getHostAddress( iperf_sockaddr *inSockAddr, - char* outAddress, - size_t len ); // dotted decimal +static inline bool SockAddr_isIPv6(const struct sockaddr_storage *ss) +{ + return ss->ss_family == AF_INET6; +} - void SockAddr_setPort( iperf_sockaddr *inSockAddr, unsigned short inPort ); - void SockAddr_setPortAny( iperf_sockaddr *inSockAddr ); - unsigned short SockAddr_getPort( iperf_sockaddr *inSockAddr ); +static inline int SockAddr_isMulticast(const struct sockaddr *sa) +{ + if (sa->sa_family == AF_INET6) + return IN6_IS_ADDR_MULTICAST(&(((struct sockaddr_in6 *)sa)->sin6_addr)); - void SockAddr_setAddressAny( iperf_sockaddr *inSockAddr ); + // IPv4 multicast: 224.0.0.0 to 239.255.255.255 (e0.00.00.00 to ef.ff.ff.ff) + return sa->sa_family == AF_INET && + (ntohl(((struct sockaddr_in *)sa)->sin_addr.s_addr) >> 28) == 0xe; +} - // return pointer to the struct in_addr - struct in_addr* SockAddr_get_in_addr( iperf_sockaddr *inSockAddr ); -#ifdef HAVE_IPV6 - // return pointer to the struct in_addr - struct in6_addr* SockAddr_get_in6_addr( iperf_sockaddr *inSockAddr ); -#endif - // return the sizeof the addess structure (struct sockaddr_in) - Socklen_t SockAddr_get_sizeof_sockaddr( iperf_sockaddr *inSockAddr ); - - int SockAddr_isMulticast( iperf_sockaddr *inSockAddr ); - - int SockAddr_isIPv6( iperf_sockaddr *inSockAddr ); +int SockAddr_Hostare_Equal(struct sockaddr_storage *first, struct sockaddr_storage *second); +int SockAddr_are_Equal(struct sockaddr_storage *first, struct sockaddr_storage *second); - int SockAddr_are_Equal( struct sockaddr *first, struct sockaddr *second ); - int SockAddr_Hostare_Equal( struct sockaddr *first, struct sockaddr *second ); +int SockAddr_port(struct sockaddr_storage *ss); +const char *SockAddr_name(struct sockaddr_storage *ss, char *hbuf, size_t hbuflen); - void SockAddr_zeroAddress( iperf_sockaddr *inSockAddr ); #ifdef __cplusplus } /* end extern "C" */ #endif