-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/4157/#review13706
-----------------------------------------------------------

Ship it!


Ship It!

- Joshua Colp


On Nov. 7, 2014, 3:50 p.m., Matt Jordan wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/4157/
> -----------------------------------------------------------
> 
> (Updated Nov. 7, 2014, 3:50 p.m.)
> 
> 
> Review request for Asterisk Developers and Joshua Colp.
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> When Josh merged his "please stop lying to me bridging layer" patch, the 
> fax/sip/directmedia_reinvite_t38 test started failing. After some 
> investigation, we figured out why.
> 
> When two RTP channels are in a native bridge, the bridging layer will 
> investigate each via the get_rtp_info glue callback. This callback returns 
> the native bridge preference of the channel *at that moment in time* (that 
> part is key). At different points during the bridging, the native bridging 
> layer will inform the RTP capable channels of the status of the bridge via 
> the update_peer glue callback.
> 
> In a T.38 scenario with audio direct media, the sequence of events will often 
> look like the following:
>  * SIP/A and SIP/B both have audio and enter a native bridge
>  * Asterisk re-INVITEs audio between SIP/A and SIP/B directly (via an 
> update_peer callback)
>  * SIP/A sends a re-INVITE to T.38, which causes Asterisk to send a re-INVITE 
> to T.38 to SIP/B. Assuming everyone 200 OKs the process, the UDPTL stack 
> receives UDPTL packets in Asterisk from both endpoints. From the perspective 
> of the channels, we are now in a local bridge for T.38, even though we are 
> technically still in a remote bridge in bridge_native_rtp. (YAY!)
>  * When one side hangs up, bridge_native_rtp is told to stop bridging. It 
> then re-evaluates the channels and asks them how they are bridged - and since 
> T.38 is enabled, they reply with a Local bridge (which is correct), but is 
> wrong because the audio portion is still technically in a remote bridge
>  * Asterisk releases the surviving channel, whose audio is *not* re-INVITED 
> back to Asterisk as bridge_native_rtp incorrectly assumes that it was in a 
> local bridge
> 
> Ironically, this used to work mostly due to a fluke in the bridging layer.
> 
> The purpose of the get_rtp_info callback shouldn't be modified: it should 
> tell the bridging layer what kind of bridge the channel prefers at that 
> moment in time. If you have T.38 enabled, that *must* be a local bridge 
> (since direct media + T.38 is a path of craziness that I don't want to 
> contemplate. This is what you get when you embed an antiquated PSTN-based 
> protocol into an unreliable UDP stream. Blech). As such, I didn't change that 
> callback.
> 
> However, we have to tell the channels to re-evaluate themselves when they 
> come out of a native bridge, since we can no longer trust the get_rtp_info 
> callbacks when the native bridge is being stopped. Something else may have 
> changed in the channels, and they may now be lying to us. As such, this patch 
> makes it so that we unilaterally tell the channels that they are no longer 
> bridged via the update_peer callback. This is actually what the channels 
> expect anyway: code in both chan_sip and chan_pjsip's callbacks look at the 
> T.38 state and - if they were in T.38 - send a re-INVITE to get the audio 
> back to Asterisk.
> 
> 
> Diffs
> -----
> 
>   /branches/12/bridges/bridge_native_rtp.c 427539 
> 
> Diff: https://reviewboard.asterisk.org/r/4157/diff/
> 
> 
> Testing
> -------
> 
> SIP and PJSIP tests pass (at least, the ones that should be passing).
> 
> The fax/sip/directmedia_reinvite_t38 test now passes, as audio is now 
> re-INVITED back to Asterisk for the surviving channel.
> 
> 
> Thanks,
> 
> Matt Jordan
> 
>

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to