]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
only attempt to do stun handling on ipv4 or ipv4 mapped to ipv6 addresses
authorMatthew Nicholson <mnicholson@digium.com>
Thu, 10 Nov 2011 16:18:04 +0000 (16:18 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Thu, 10 Nov 2011 16:18:04 +0000 (16:18 +0000)
Patch by: jkonieczny (modified)
ASTERISK-18490

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@344330 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_rtp_asterisk.c

index 3165ba8f19bc320f5e73443d86b874dcfea3fc9d..77e72f290be592279c66c0acca2050d70b99586b 100644 (file)
@@ -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);