From: Anthony Minessale Date: Fri, 30 Apr 2010 20:01:32 +0000 (-0500) Subject: fix switch_get_addr to work with v6 properly X-Git-Tag: git2svn-syncpoint-master~142 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f1430d521a767a13035d6d8e96686564552194fd;p=thirdparty%2Ffreeswitch.git fix switch_get_addr to work with v6 properly --- diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index 3d8679228b..2ac5981c1e 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -197,6 +197,7 @@ SWITCH_DECLARE(switch_status_t) switch_find_local_ip(_Out_opt_bytecapcount_(len) \return the ip adress string */ SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct sockaddr *sa, socklen_t salen); +SWITCH_DECLARE(char *) get_addr6(char *buf, switch_size_t len, struct sockaddr_in6 *sa, socklen_t salen); SWITCH_DECLARE(int) get_addr_int(switch_sockaddr_t *sa); SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *sa2); diff --git a/src/switch_apr.c b/src/switch_apr.c index d857d48906..360974af95 100644 --- a/src/switch_apr.c +++ b/src/switch_apr.c @@ -778,9 +778,14 @@ SWITCH_DECLARE(switch_status_t) switch_mcast_loopback(switch_socket_t *sock, uin SWITCH_DECLARE(const char *) switch_get_addr(char *buf, switch_size_t len, switch_sockaddr_t *in) { if (!in) { - return ""; + return SWITCH_BLANK_STRING; } - return get_addr(buf, len, (struct sockaddr *) &in->sa, in->salen); + + if (in->family == AF_INET) { + return get_addr(buf, len, (struct sockaddr *) &in->sa, in->salen); + } + + return get_addr6(buf, len, (struct sockaddr_in6 *) &in->sa, in->salen); } SWITCH_DECLARE(uint16_t) switch_sockaddr_get_port(switch_sockaddr_t *sa) diff --git a/src/switch_utils.c b/src/switch_utils.c index 72eb3ed962..6d58512d45 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -1482,6 +1482,17 @@ SWITCH_DECLARE(int) switch_cmp_addr(switch_sockaddr_t *sa1, switch_sockaddr_t *s return 0; } +SWITCH_DECLARE(char *) get_addr6(char *buf, switch_size_t len, struct sockaddr_in6 *sa, socklen_t salen) +{ + switch_assert(buf); + *buf = '\0'; + + if (sa) { + inet_ntop(AF_INET6, sa, buf, len); + } + + return buf; +} SWITCH_DECLARE(char *) get_addr(char *buf, switch_size_t len, struct sockaddr *sa, socklen_t salen) {