]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
don't do native/remote bridging if a framehook is active on the channel
authorMatthew Nicholson <mnicholson@digium.com>
Wed, 29 Jun 2011 15:34:47 +0000 (15:34 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Wed, 29 Jun 2011 15:34:47 +0000 (15:34 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@325537 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_dial.c
main/rtp_engine.c

index 25172c7433ac8747ae0fc47477be02e79aa1f2a7..d3b8009de60bd07d86478012ded1283be139a74b 100644 (file)
@@ -65,6 +65,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/aoc.h"
 #include "asterisk/ccss.h"
 #include "asterisk/indications.h"
+#include "asterisk/framehook.h"
 
 /*** DOCUMENTATION
        <application name="Dial" language="en_US">
@@ -631,7 +632,8 @@ END_OPTIONS );
        OPT_CALLER_HANGUP | OPT_CALLEE_TRANSFER | OPT_CALLER_TRANSFER | \
        OPT_CALLEE_MONITOR | OPT_CALLER_MONITOR | OPT_CALLEE_PARK |  \
        OPT_CALLER_PARK | OPT_ANNOUNCE | OPT_CALLEE_MACRO | OPT_CALLEE_GOSUB) && \
-       !chan->audiohooks && !peer->audiohooks)
+       !chan->audiohooks && !peer->audiohooks && \
+       ast_framehook_list_is_empty(chan->framehooks) && ast_framehook_list_is_empty(peer->framehooks))
 
 /*
  * The list of active channels
index 00d288490cda95612ab4474c852d01918e13209b..0e905cfd81485d1bf55baec92c44f36b67ace1ed 100644 (file)
@@ -39,6 +39,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 #include "asterisk/pbx.h"
 #include "asterisk/translate.h"
 #include "asterisk/netsock2.h"
+#include "asterisk/framehook.h"
 
 struct ast_srtp_res *res_srtp = NULL;
 struct ast_srtp_policy_res *res_srtp_policy = NULL;
@@ -853,7 +854,8 @@ static enum ast_bridge_result local_bridge_loop(struct ast_channel *c0, struct a
                if ((c0->tech_pvt != pvt0) ||
                    (c1->tech_pvt != pvt1) ||
                    (c0->masq || c0->masqr || c1->masq || c1->masqr) ||
-                   (c0->monitor || c0->audiohooks || c1->monitor || c1->audiohooks)) {
+                   (c0->monitor || c0->audiohooks || c1->monitor || c1->audiohooks) ||
+                   (!ast_framehook_list_is_empty(c0->framehooks) || !ast_framehook_list_is_empty(c1->framehooks))) {
                        ast_debug(1, "rtp-engine-local-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))) {
@@ -1026,7 +1028,8 @@ static enum ast_bridge_result remote_bridge_loop(struct ast_channel *c0, struct
                if ((c0->tech_pvt != pvt0) ||
                    (c1->tech_pvt != pvt1) ||
                    (c0->masq || c0->masqr || c1->masq || c1->masqr) ||
-                   (c0->monitor || c0->audiohooks || c1->monitor || c1->audiohooks)) {
+                   (c0->monitor || c0->audiohooks || c1->monitor || c1->audiohooks) ||
+                   (!ast_framehook_list_is_empty(c0->framehooks) || !ast_framehook_list_is_empty(c1->framehooks))) {
                        ast_debug(1, "Oooh, something is weird, backing out\n");
                        res = AST_BRIDGE_RETRY;
                        break;