Merged revisions 85552 via svnmerge from
authorJoshua Colp <jcolp@digium.com>
Mon, 15 Oct 2007 14:57:44 +0000 (14:57 +0000)
committerJoshua Colp <jcolp@digium.com>
Mon, 15 Oct 2007 14:57:44 +0000 (14:57 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r85552 | file | 2007-10-15 11:55:04 -0300 (Mon, 15 Oct 2007) | 4 lines

If Monitor or a spy was added to a P2P or native bridged channel bring the channel back to the generic bridging core so the monitor or spy operations work.
(closes issue #10943)
Reported by: julianjm

........

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

main/rtp.c

index 56aabda..3c33d82 100644 (file)
@@ -3226,7 +3226,8 @@ static enum ast_bridge_result bridge_native_loop(struct ast_channel *c0, struct
                /* Check if anything changed */
                if ((c0->tech_pvt != pvt0) ||
                    (c1->tech_pvt != pvt1) ||
                /* Check if anything changed */
                if ((c0->tech_pvt != pvt0) ||
                    (c1->tech_pvt != pvt1) ||
-                   (c0->masq || c0->masqr || c1->masq || c1->masqr)) {
+                   (c0->masq || c0->masqr || c1->masq || c1->masqr) ||
+                   (c0->monitor || c0->audiohooks || c1->monitor || c1->audiohooks)) {
                        ast_debug(1, "Oooh, something is weird, backing out\n");
                        if (c0->tech_pvt == pvt0)
                                if (pr0->set_rtp_peer(c0, NULL, NULL, NULL, 0, 0))
                        ast_debug(1, "Oooh, something is weird, backing out\n");
                        if (c0->tech_pvt == pvt0)
                                if (pr0->set_rtp_peer(c0, NULL, NULL, NULL, 0, 0))
@@ -3520,7 +3521,8 @@ static enum ast_bridge_result bridge_p2p_loop(struct ast_channel *c0, struct ast
                /* Check if anything changed */
                if ((c0->tech_pvt != pvt0) ||
                    (c1->tech_pvt != pvt1) ||
                /* Check if anything changed */
                if ((c0->tech_pvt != pvt0) ||
                    (c1->tech_pvt != pvt1) ||
-                   (c0->masq || c0->masqr || c1->masq || c1->masqr)) {
+                   (c0->masq || c0->masqr || c1->masq || c1->masqr) ||
+                   (c0->monitor || c0->audiohooks || c1->monitor || c1->audiohooks)) {
                        ast_debug(3, "p2p-rtp-bridge: Oooh, something is weird, backing out\n");
                        /* If a masquerade needs to happen we have to try to read in a frame so that it actually happens. Without this we risk being called again and going into a loop */
                        if ((c0->masq || c0->masqr) && (fr = ast_read(c0)))
                        ast_debug(3, "p2p-rtp-bridge: Oooh, something is weird, backing out\n");
                        /* If a masquerade needs to happen we have to try to read in a frame so that it actually happens. Without this we risk being called again and going into a loop */
                        if ((c0->masq || c0->masqr) && (fr = ast_read(c0)))