Mercurial > dovecot > original-hg > dovecot-1.2
changeset 4684:4f1df4b90500 HEAD
Added net_ipv6_mapped_ipv4_convert().
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 15 Oct 2006 19:19:17 +0300 |
parents | b60a8aec99ed |
children | dc5875c28aac |
files | src/lib/network.c src/lib/network.h |
diffstat | 2 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/network.c Sun Oct 15 18:55:00 2006 +0300 +++ b/src/lib/network.c Sun Oct 15 19:19:17 2006 +0300 @@ -570,6 +570,25 @@ return 0; } +int net_ipv6_mapped_ipv4_convert(const struct ip_addr *src, + struct ip_addr *dest) +{ +#ifdef HAVE_IPV6 + if (!IPADDR_IS_V6(src)) + return -1; + if (src->ip.in6_u.u6_addr32[0] != 0 || + src->ip.in6_u.u6_addr32[1] != 0 || + src->ip.in6_u.u6_addr32[2] != 0xffff0000) + return -1; + + dest->family = AF_INET; + memcpy(&dest->ip, &src->ip.in6_u.u6_addr32[3], 4); + return 0; +#else + return -1; +#endif +} + /* Get socket error */ int net_geterror(int fd) {
--- a/src/lib/network.h Sun Oct 15 18:55:00 2006 +0300 +++ b/src/lib/network.h Sun Oct 15 19:19:17 2006 +0300 @@ -93,6 +93,10 @@ const char *net_ip2addr(const struct ip_addr *ip); /* char* -> struct ip_addr translation. */ int net_addr2ip(const char *addr, struct ip_addr *ip); +/* Convert IPv6 mapped IPv4 address to an actual IPv4 address. Returns 0 if + successful, -1 if the source address isn't IPv6 mapped IPv4 address. */ +int net_ipv6_mapped_ipv4_convert(const struct ip_addr *src, + struct ip_addr *dest); /* Get socket error */ int net_geterror(int fd);