From: Aki Tuomi Date: Wed, 9 Nov 2016 13:17:01 +0000 (+0200) Subject: lib: Add net_ipport2str X-Git-Tag: 2.3.0.rc1~2642 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=727d691bba4385eb725204f40dc5ecdaf42da8e9;p=thirdparty%2Fdovecot%2Fcore.git lib: Add net_ipport2str Converts struct ip_addr + port into either 127.0.0.1:6000 or [::1]:6000. --- diff --git a/src/lib/net.c b/src/lib/net.c index 0031764bf9..9c3ac2ccaa 100644 --- a/src/lib/net.c +++ b/src/lib/net.c @@ -981,6 +981,18 @@ int net_str2hostport(const char *str, in_port_t default_port, return 0; } +int net_ipport2str(const struct ip_addr *ip, in_port_t port, const char **str_r) +{ + if (!IPADDR_IS_V4(ip) && !IPADDR_IS_V6(ip)) return -1; + + *str_r = t_strdup_printf("%s%s%s:%u", + IPADDR_IS_V6(ip) ? "[" : "", + net_ip2addr(ip), + IPADDR_IS_V6(ip) ? "]" : "", + port); + return 0; +} + int net_ipv6_mapped_ipv4_convert(const struct ip_addr *src, struct ip_addr *dest) { diff --git a/src/lib/net.h b/src/lib/net.h index 56a28d29f9..de23431ed0 100644 --- a/src/lib/net.h +++ b/src/lib/net.h @@ -155,6 +155,9 @@ int net_str2port_zero(const char *str, in_port_t *port_r); through. */ int net_str2hostport(const char *str, in_port_t default_port, const char **host_r, in_port_t *port_r); +/* Converts ip and port to ipv4:port or [ipv6]:port. Returns -1 if + ip is not valid IPv4 or IPv6 address. */ +int net_ipport2str(const struct ip_addr *ip, in_port_t port, const char **str_r); /* 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. */