Move the direct bridge write to after the NAT handling code
authorJoshua Colp <jcolp@digium.com>
Tue, 29 Aug 2006 23:41:16 +0000 (23:41 +0000)
committerJoshua Colp <jcolp@digium.com>
Tue, 29 Aug 2006 23:41:16 +0000 (23:41 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@41285 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/rtp.c

index 4fdde19..9e32ebd 100644 (file)
@@ -1042,15 +1042,12 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp)
                return &ast_null_frame;
        }
 
-       if (version != 2)
-               return &ast_null_frame;
-       /* Ignore if the other side hasn't been given an address
-          yet.  */
+       /* If we don't have the other side's address, then ignore this */
        if (!rtp->them.sin_addr.s_addr || !rtp->them.sin_port)
                return &ast_null_frame;
 
+       /* Send to whoever send to us if NAT is turned on */
        if (rtp->nat) {
-               /* Send to whoever sent to us */
                if ((rtp->them.sin_addr.s_addr != sin.sin_addr.s_addr) ||
                    (rtp->them.sin_port != sin.sin_port)) {
                        rtp->them = sin;
@@ -1065,6 +1062,13 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp)
                }
        }
 
+       /* If we are bridged to another RTP stream, send direct */
+       if (rtp->bridged && !bridge_p2p_write(rtp, rtpheader, res, hdrlen))
+               return &ast_null_frame;
+
+       if (version != 2)
+               return &ast_null_frame;
+
        payloadtype = (seqno & 0x7f0000) >> 16;
        padding = seqno & (1 << 29);
        mark = seqno & (1 << 23);