]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
bridge_native_rtp.c: Fail native bridge if no framing match.
authorRobert Cripps <rcripps@voxbone.com>
Wed, 17 Oct 2018 13:48:13 +0000 (15:48 +0200)
committerRobert Cripps <rcripps@voxbone.com>
Fri, 9 Nov 2018 08:51:53 +0000 (08:51 +0000)
ASTERISK-28110 #close

Change-Id: Ic64b8fc6a140a93fbdb2f97550a40d0ff334e607

bridges/bridge_native_rtp.c

index d490183ff0534f19b50e30599cf6180ba931df6b..34a6a6492dfce189e999cb08e6f37d4db6cc0227 100644 (file)
@@ -705,6 +705,18 @@ static int native_rtp_bridge_compatible_check(struct ast_bridge *bridge, struct
                return 0;
        }
 
+       if (glue0->audio.instance && glue1->audio.instance) {
+               unsigned int framing_inst0, framing_inst1;
+               framing_inst0 = ast_rtp_codecs_get_framing(ast_rtp_instance_get_codecs(glue0->audio.instance));
+               framing_inst1 = ast_rtp_codecs_get_framing(ast_rtp_instance_get_codecs(glue1->audio.instance));
+               if (framing_inst0 != framing_inst1) {
+                       /* ptimes are asymmetric on the two call legs so we can't use the native bridge */
+                       ast_debug(1, "Asymmetric ptimes on the two call legs (%u != %u). Cannot native bridge in RTP\n",
+                               framing_inst0, framing_inst1);
+                       return 0;
+               }
+       }
+
        read_ptime0 = ast_format_cap_get_format_framing(cap0, ast_channel_rawreadformat(bc0->chan));
        read_ptime1 = ast_format_cap_get_format_framing(cap1, ast_channel_rawreadformat(bc1->chan));
        write_ptime0 = ast_format_cap_get_format_framing(cap0, ast_channel_rawwriteformat(bc0->chan));