]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix a problem with packet-to-packet bridging and DTMF mode translation. P2P
authorRussell Bryant <russell@russellbryant.com>
Mon, 29 Jan 2007 21:26:27 +0000 (21:26 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 29 Jan 2007 21:26:27 +0000 (21:26 +0000)
bridging can only be used when the DTMF modes don't match if the core is
monitoring DTMF in both directions.  Then, the core will handle the translation.
Otherwise, this bridging method can not be used.
(issue #8936)

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

main/rtp.c

index dc6efbd811ae15addff177dce03f7c8d9fe8a574..416db70b72295a0506170bbb527d8275fe098e8a 100644 (file)
@@ -3187,11 +3187,19 @@ enum ast_bridge_result ast_rtp_bridge(struct ast_channel *c0, struct ast_channel
         * |-----------|------------|-----------------------|
         * | Inband    | False      | True                  |
         * | RFC2833   | True       | True                  |
-        * | SIP Info  | False      | False                 |
+        * | SIP INFO  | False      | False                 |
         * --------------------------------------------------
+        * However, if DTMF from both channels is being monitored by the core, then
+        * we can still do packet-to-packet bridging, because passing through the 
+        * core will handle DTMF mode translation.
         */
        if ( (ast_test_flag(p0, FLAG_HAS_DTMF) != ast_test_flag(p1, FLAG_HAS_DTMF)) ||
                 (!c0->tech->send_digit_begin != !c1->tech->send_digit_begin)) {
+               if (!ast_test_flag(p0, FLAG_P2P_NEED_DTMF) || !ast_test_flag(p1, FLAG_P2P_NEED_DTMF)) {
+                       ast_channel_unlock(c0);
+                       ast_channel_unlock(c1);
+                       return AST_BRIDGE_FAILED_NOWARN;
+               }
                audio_p0_res = AST_RTP_TRY_PARTIAL;
                audio_p1_res = AST_RTP_TRY_PARTIAL;
        }