From 491d1261e04e09f13990d5062c21faca7eb32b37 Mon Sep 17 00:00:00 2001 From: Dennis Yurasov Date: Sun, 21 Mar 2021 17:45:04 +0300 Subject: [PATCH] rtpengine: remove square brackets from IPv6 address for getaddrinfo function - After loading from DB rn_address is in form: [x:x:x:x:x:x:x:x]:nnnn, getaddrinfo function expect ipv6 in node argument without square brackets, otherwise, the argument is interpreted as FQDN. --- src/modules/rtpengine/rtpengine.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/modules/rtpengine/rtpengine.c b/src/modules/rtpengine/rtpengine.c index 8b751eb48a1..7114b08d408 100644 --- a/src/modules/rtpengine/rtpengine.c +++ b/src/modules/rtpengine/rtpengine.c @@ -1829,6 +1829,7 @@ static int build_rtpp_socks(int lmode, int rtest) { rtpe_reload_lock_get(rtpp_list->rset_lock); for (pnode=rtpp_list->rn_first; pnode!=0; pnode = pnode->rn_next) { char *hostname; + char *hp; if (pnode->rn_umode == 0) { rtpp_socks[pnode->idx] = -1; @@ -1860,11 +1861,23 @@ static int build_rtpp_socks(int lmode, int rtest) { if (cp == NULL || *cp == '\0') cp = CPORT; + if(pnode->rn_umode == 6) { + hp = strrchr(hostname, ']'); + if(hp != NULL) + *hp = '\0'; + + hp = hostname; + if(*hp == '[') + hp++; + } else { + hp = hostname; + } + memset(&hints, 0, sizeof(hints)); hints.ai_flags = 0; hints.ai_family = (pnode->rn_umode == 6) ? AF_INET6 : AF_INET; hints.ai_socktype = SOCK_DGRAM; - if ((n = getaddrinfo(hostname, cp, &hints, &res)) != 0) { + if ((n = getaddrinfo(hp, cp, &hints, &res)) != 0) { LM_ERR("%s\n", gai_strerror(n)); pkg_free(hostname); rtpp_socks[pnode->idx] = -1;