> On May 20, 2014, 11 a.m., Joshua Colp wrote:
> > /branches/12/include/asterisk/bridge.h, lines 906-908
> > <https://reviewboard.asterisk.org/r/3485/diff/6/?file=58657#file58657line906>
> >
> >     This should be documented more since it's now a wrapper. Are there any 
> > expectations? Should it be allocated in any specific way? In the case of 
> > res_pjsip_refer it expects this as an AO2 object, but that's currently an 
> > implementation detail of the blind transfer/parking code that is not 
> > documented. Could your stack usage of this be passed into the announcement 
> > tracker and hilarity ensue?

Yeah, that's true. The data field for this wrapper is only valid during the 
transfer_channel_cb itself and not for anything that it spins off for instance. 
Trying to access it at that point could be pretty bad. I'll make a note of that 
in the documentation.

It will always be allocated as an AO2 object. That way transfer_channel_cb 
functions can bump the ref and track so that they can track the 'completed' 
variable in another function.

/*!
 * \brief AO2 object that wraps data for transfer_channel_cb
 */
struct transfer_channel_data {
        void *data;    /*! Data to be used by the transfer_channel_cb -- note 
that this
                        *  pointer is going to be pointing to something on the 
stack, so
                        *  it must not be used at any point after returning 
from the
                        *  transfer_channel_cb. */
        int completed; /*! Initially 0, This will be set to 1 by either the 
transfer
                        *  code or by transfer code hooks (e.g. parking) when 
the
                        *  transfer is completed and any remaining actions have 
taken
                        *  place (e.g. parking announcements). It will never be 
reset
                        *  to 0. This is used for deferring progress for channel
                        *  drivers that support deferred progress. */
};


- Jonathan


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


On May 19, 2014, 1:25 p.m., Jonathan Rose wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3485/
> -----------------------------------------------------------
> 
> (Updated May 19, 2014, 1:25 p.m.)
> 
> 
> Review request for Asterisk Developers, Matt Jordan and Mark Michelson.
> 
> 
> Repository: Asterisk
> 
> 
> Description
> -------
> 
> If a PJSIP endpoint attempts to blind transfer to a parking extension, there 
> is an override to the normal transfer logic that can make things act a little 
> weird. We noticed that this would leave various phones hanging on transfer 
> screens without progressing. When the transfer was considered successful, 
> PJSIP deferred the actual action of sending the 200 notify and the actual 
> trigger for that happening never occurs when the transfer is to a parking 
> extension.
> 
> In order to handle this, the bridge function that handles blind transfers now 
> returns a different value if a call was parked and if the channel driver 
> needs to react differently in this case, it can.  In the case of PJSIP, we 
> respond to transfers to park by immediately sending the notify with 200 OK 
> sip frag instead of deferring the action.
> 
> 
> Diffs
> -----
> 
>   /branches/12/res/res_pjsip_refer.c 413303 
>   /branches/12/res/parking/parking_bridge_features.c 413303 
>   /branches/12/res/parking/parking_applications.c 413303 
>   /branches/12/main/parking.c 413303 
>   /branches/12/main/bridge_basic.c 413303 
>   /branches/12/main/bridge.c 413303 
>   /branches/12/include/asterisk/parking.h 413303 
>   /branches/12/include/asterisk/bridge.h 413303 
>   /branches/12/channels/sig_analog.c 413303 
>   /branches/12/channels/chan_sip.c 413303 
>   /branches/12/channels/chan_mgcp.c 413303 
>   /branches/12/channels/chan_dahdi.c 413303 
> 
> Diff: https://reviewboard.asterisk.org/r/3485/diff/
> 
> 
> Testing
> -------
> 
> Before patch:
> * Blind transfer on Polycom SPIP: Phone is on the blind transfer screen until 
> it either manually hangs up or 60 seconds pass and Asterisk terminates the 
> session.
> 
> After the patch:
> * Blind transfer on Polycom SPIP: Phone immediately leaves the blind transfer 
> screen and goes back to idle mode.
> 
> 
> Thanks,
> 
> Jonathan Rose
> 
>

-- 
_____________________________________________________________________
-- 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