From: Matthew Nicholson Date: Thu, 10 Nov 2011 16:18:04 +0000 (+0000) Subject: only attempt to do stun handling on ipv4 or ipv4 mapped to ipv6 addresses X-Git-Tag: 1.8.9.0-rc1~89 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4ad988a5a6132c1bddaee4fbfa6023cd1c934f9;p=thirdparty%2Fasterisk.git only attempt to do stun handling on ipv4 or ipv4 mapped to ipv6 addresses Patch by: jkonieczny (modified) ASTERISK-18490 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@344330 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 3165ba8f19..77e72f290b 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -2091,7 +2091,18 @@ static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtc if (!(version = (seqno & 0xC0000000) >> 30)) { struct sockaddr_in addr_tmp; - ast_sockaddr_to_sin(&addr, &addr_tmp); + struct ast_sockaddr addr_v4; + if (ast_sockaddr_is_ipv4(&addr)) { + ast_sockaddr_to_sin(&addr, &addr_tmp); + } else if (ast_sockaddr_ipv4_mapped(&addr, &addr_v4)) { + ast_debug(1, "Using IPv6 mapped address %s for STUN\n", + ast_sockaddr_stringify(&addr)); + ast_sockaddr_to_sin(&addr_v4, &addr_tmp); + } else { + ast_debug(1, "Cannot do STUN for non IPv4 address %s\n", + ast_sockaddr_stringify(&addr)); + return &ast_null_frame; + } if ((ast_stun_handle_packet(rtp->s, &addr_tmp, rtp->rawdata + AST_FRIENDLY_OFFSET, res, NULL, NULL) == AST_STUN_ACCEPT) && ast_sockaddr_isnull(&remote_address)) { ast_sockaddr_from_sin(&addr, &addr_tmp);