]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
fix switch_get_addr to work with v6 properly
authorAnthony Minessale <anthm@freeswitch.org>
Fri, 30 Apr 2010 20:01:32 +0000 (15:01 -0500)
committerBrian West <brian@freeswitch.org>
Fri, 30 Apr 2010 20:27:15 +0000 (15:27 -0500)
src/include/switch_utils.h
src/switch_apr.c
src/switch_utils.c

index 3d8679228b9d5da1aaee8df62b6f2ccdc88201ed..2ac5981c1e3f913d0b394c46fbe571e9150c5644 100644 (file)
@@ -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);
index d857d48906a5b61d5f327885268ffa0be9587628..360974af9535e1181d8c4437943a1f13097b1877 100644 (file)
@@ -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)
index 72eb3ed962cfb9cb6d5cd448208d063e5c9ea593..6d58512d457c628da54f385cad766511a7172d8e 100644 (file)
@@ -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)
 {