[asterisk-dev] [Code Review] Initialize udptl only when dialog negotiates for image media

Mark Michelson reviewboard at asterisk.org
Mon Jan 16 09:58:50 CST 2012


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



/branches/1.8/channels/chan_sip.c
<https://reviewboard.asterisk.org/r/1668/#comment9660>

    Add some doxygen to this function indicating that p->owner (if it exists) is expected to be locked before calling this function.



/branches/1.8/channels/chan_sip.c
<https://reviewboard.asterisk.org/r/1668/#comment9659>

    You should do a p->owner check before you allocate the udptl structure. The way it's written now, if p->owner is NULL, the UDPTL structure will be allocated but will not be used for the lifetime of p. If you detect that an owner is not present immediately, then you can exit early without having to allocate the udptl.
    
    If you do end up allocating a udptl, then you can just unconditionally set the channel fd on p->owner.



/branches/1.8/channels/chan_sip.c
<https://reviewboard.asterisk.org/r/1668/#comment9656>

    You can remove this if block. Since a udptl struct should not exist prior to channel creation, it should not be possible for i->udptl to be true.
    
    You may have been thinking of a case where some idiotic endpoint decides to indicate its support for T.38 in the initial INVITE it sends to Asterisk. The way you have written initialize_udptl(), if this occurs, then the sip_pvt will have a udptl struct allocated, but the sip_pvt's flag for UDPTL support will be cleared. The result is that any further attempts to change to T.38 will be rejected. And so it still doesn't make sense to set the channel fd in this block.


- Mark


On Jan. 16, 2012, 9:09 a.m., Matt Jordan wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/1668/
> -----------------------------------------------------------
> 
> (Updated Jan. 16, 2012, 9:09 a.m.)
> 
> 
> Review request for Asterisk Developers, Joshua Colp, Mark Michelson, Terry Wilson, and schmidts.
> 
> 
> Summary
> -------
> 
> Currently, the udptl object is allocated in one of three places:
> 1) create_addr_from_peer
> 2) sip_alloc
> 3) handle_request_invite
> 
> This typically results in any dialog associated with a peer that supports T.38 having a udptl object (and its associated UDP ports, system resources, etc.) assigned to it.  This includes non-INVITE requests.
> 
> This patch moves the initialization of a dialog's udptl object to either (a) when the media is negotiated for that dialog, or (b) if a control frame is received in chan_sip indicating that the dialog needs to support T.38.  This should result in only those dialogs that are explicitly involved with sending / receiving image media having a udptl object assigned to them.
> 
> 
> This addresses bugs ASTERISK-16698 and ASTERISK-16794.
>     https://issues.asterisk.org/jira/browse/ASTERISK-16698
>     https://issues.asterisk.org/jira/browse/ASTERISK-16794
> 
> 
> Diffs
> -----
> 
>   /branches/1.8/channels/chan_sip.c 350786 
> 
> Diff: https://reviewboard.asterisk.org/r/1668/diff
> 
> 
> Testing
> -------
> 
> Patch passes the udptl tests in the Asterisk Test Suite.  
> 
> [update] - ported the patch to Asterisk 10 and tested with the Test Suite's gateway tests.  All tests passed.
> 
> However, given the complexity and number of ways in which media can be negotiated, additional testing would be appreciated from the open source community.
> 
> 
> Thanks,
> 
> Matt
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20120116/023766ef/attachment-0001.htm>


More information about the asterisk-dev mailing list