]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Do not Packet2Packet bridge if packetization settings do not allow it. (issue #9117...
authorJoshua Colp <jcolp@digium.com>
Thu, 21 Jun 2007 15:22:39 +0000 (15:22 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 21 Jun 2007 15:22:39 +0000 (15:22 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@70727 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/rtp.c

index 04b5c0d0cb8d352a36b7617a07dde52083372813..9dd40bf90090f1d24f40c7c7ad5bd8b4a5b50557 100644 (file)
@@ -3314,6 +3314,8 @@ enum ast_bridge_result ast_rtp_bridge(struct ast_channel *c0, struct ast_channel
 
        /* If either side can only do a partial bridge, then don't try for a true native bridge */
        if (audio_p0_res == AST_RTP_TRY_PARTIAL || audio_p1_res == AST_RTP_TRY_PARTIAL) {
+               struct ast_format_list fmt0, fmt1;
+
                /* In order to do Packet2Packet bridging both sides must be in the same rawread/rawwrite */
                if (c0->rawreadformat != c1->rawwriteformat || c1->rawreadformat != c0->rawwriteformat) {
                        if (option_debug)
@@ -3322,6 +3324,17 @@ enum ast_bridge_result ast_rtp_bridge(struct ast_channel *c0, struct ast_channel
                        ast_channel_unlock(c1);
                        return AST_BRIDGE_FAILED_NOWARN;
                }
+               /* They must also be using the same packetization */
+               fmt0 = ast_codec_pref_getsize(&p0->pref, c0->rawreadformat);
+               fmt1 = ast_codec_pref_getsize(&p1->pref, c1->rawreadformat);
+               if (fmt0.cur_ms != fmt1.cur_ms) {
+                       if (option_debug)
+                               ast_log(LOG_DEBUG, "Cannot packet2packet bridge - packetization settings prevent it\n");
+                       ast_channel_unlock(c0);
+                       ast_channel_unlock(c1);
+                       return AST_BRIDGE_FAILED_NOWARN;
+               }
+
                if (option_verbose > 2)
                        ast_verbose(VERBOSE_PREFIX_3 "Packet2Packet bridging %s and %s\n", c0->name, c1->name);
                res = bridge_p2p_loop(c0, c1, p0, p1, timeoutms, flags, fo, rc, pvt0, pvt1);