diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 24f49d8bf44fe3345cd2e4f39d0554e8f21d05d3..fab2752c7849f6f437328ac24adf48f4f5afcc03 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -12270,7 +12270,7 @@ static int check_srcaddr(struct ast_sockaddr *addr) { int sd; - sd = socket(ast_sockaddr_is_ipv4(addr) ? AF_INET : AF_INET6, SOCK_DGRAM, 0); + sd = socket(addr->ss.ss_family, SOCK_DGRAM, 0); if (sd < 0) { ast_log(LOG_ERROR, "Socket: %s\n", strerror(errno)); return -1; @@ -12302,8 +12302,7 @@ static int peer_set_srcaddr(struct iax2_peer *peer, const char *srcaddr) if (!(tmp = ast_strdupa(srcaddr))) return -1; - host = strsep(&tmp, ":"); - portstr = tmp; + ast_sockaddr_split_hostport(tmp, &host, &portstr, 0); if (portstr) { port = atoi(portstr); diff --git a/main/netsock.c b/main/netsock.c index 334617da6b0d4e5f2ae958d2e89756138e6d562d..994afc6015c586be7687a6771ae3b37a3de93d56 100644 --- a/main/netsock.c +++ b/main/netsock.c @@ -167,6 +167,11 @@ struct ast_netsock *ast_netsock_bind(struct ast_netsock_list *list, struct io_co struct ast_sockaddr addr; if (ast_sockaddr_parse(&addr, bindinfo, 0)) { + if (!ast_sockaddr_is_ipv4(&addr)) { + ast_log(LOG_WARNING, "Only IPv4 addresses are supported at this time.\n"); + return NULL; + } + if (!ast_sockaddr_port(&addr)) { ast_sockaddr_set_port(&addr, defaultport); }