diff options
Diffstat (limited to 'rfc1035/rfc1035sockaddrip.c')
| -rw-r--r-- | rfc1035/rfc1035sockaddrip.c | 45 | 
1 files changed, 45 insertions, 0 deletions
| diff --git a/rfc1035/rfc1035sockaddrip.c b/rfc1035/rfc1035sockaddrip.c new file mode 100644 index 0000000..ab35ce5 --- /dev/null +++ b/rfc1035/rfc1035sockaddrip.c @@ -0,0 +1,45 @@ +/* +** Copyright 1998 - 2000 Double Precision, Inc. +** See COPYING for distribution information. +*/ +#include	"config.h" +#include	"rfc1035.h" +#include	<sys/types.h> +#include	<sys/socket.h> +#include	<arpa/inet.h> +#include	<errno.h> +#include	<string.h> + + +int rfc1035_sockaddrip(const RFC1035_NETADDR *a, int al, RFC1035_ADDR *ip) +{ +int	af=((const struct sockaddr_in *)a)->sin_family; + +	if ( af == AF_INET ) +	{ +		if (al >= sizeof(struct sockaddr_in)) +		{ +#if RFC1035_IPV6 +			rfc1035_ipv4to6(ip, +				&((const struct sockaddr_in *)a)->sin_addr); +#else +			*ip=((const struct sockaddr_in *)a)->sin_addr; +#endif +			return (0); +		} +	} + +#if RFC1035_IPV6 + +	if ( af == AF_INET6 ) +	{ +		if (al >= sizeof(struct sockaddr_in6)) +		{ +			*ip=((const struct sockaddr_in6 *)a)->sin6_addr; +			return (0); +		} +	} +#endif +	return (-1); +} + | 
