[Home]

Summary:ASTERISK-22424: bridge_native_rtp: Asterisk 12 attempts to remotely bridge on 200OK response to invite when the 200 lacks SDP
Reporter:Jonathan Rose (jrose)Labels:
Date Opened:2013-08-28 17:25:43Date Closed:2013-09-27 12:22:01
Priority:MajorRegression?No
Status:Closed/CompleteComponents:Bridges/bridge_native_rtp Core/RTP
Versions:SVN 12 1.8.23.1 10.12.3 11.5.1 Frequency of
Occurrence
Constant
Related
Issues:
Environment:Attachments:
Description:I discussed this with Mark and he believes this is misbehavior on both the part of Asterisk 11 and Asterisk 12 and that the call should be terminated on receiving the 200 OK in this malformed state, but the difference between Asterisk 11 and Asterisk 12 is that Asterisk 11 would fallback to local bridging in this case on account of the following codeblock in rtp_engine.c

ast_rtp_instance_bridge:
{noformat}
/* If address families differ, force a local bridge */
ast_rtp_instance_get_remote_address(instance0, &addr1);
ast_rtp_instance_get_remote_address(instance1, &addr2);

if (addr1.ss.ss_family != addr2.ss.ss_family ||
  (ast_sockaddr_is_ipv4_mapped(&addr1) != ast_sockaddr_is_ipv4_mapped(&addr2))) {
audio_glue0_res = AST_RTP_GLUE_RESULT_LOCAL;
audio_glue1_res = AST_RTP_GLUE_RESULT_LOCAL;
}
{noformat}

At this point when bridging, addr2 will be NULL and we will use local bridging when the bridge is actually formed. I'm not entirely sure whether this actually results in a usable call and Mark suspects that it will result in one or both of the audio paths being broken. Asterisk 12's native RTP bridging code has no similar block, so it will keep trying to use remote bridging. This will almost certainly result in one or both audio paths being broken.

For an example of some scenarios where this plays out, check the sip_hold_direct_media test in testsuite revision 4095.
Comments: