[asterisk-dev] Question about ast_async_goto()

Joshua Colp jcolp at digium.com
Tue Aug 22 07:56:12 MST 2006


----- Andrew Kohlsmith <akohlsmith-asterisk at benshaw.com> wrote:
> On Tuesday 22 August 2006 09:50, Kevin P. Fleming wrote:
> > This should be handled by ast_do_masquerade(). However, if nothing
> is
> > reading from that channel, then the pending hangup will never get
> > processed. It's not clear exactly why this isn't working in your
> > application, though.
> 
> I've always wondered when/how to use ast_do_masquerade() -- what
> exactly is 
> channel masquerading, when is it to be used, when is it not to be
> used?  It 
> seems to be black magic.

Voodoo. Heavy voodoo.

> I understand that do_masquerade "sucks" the info about one channel
> into 
> another, but why is this necessary?

It's used for things like attended transfers. Basically you have two channels in a bridge talking to eachother, but you want to replace one. Currently we don't have a way of interacting with the bridge itself to do this (it is something that myself and others would like to see). This is where masquerading comes into play. Without touching the bridge, you masquerade the new channel into the channel you want to replace. The old channel dies off, and the two other ones then talk to each other. It's more complicated internally naturally, but you get the drift. It's also used for things like optimizations of channels in chan_local (this is what happens when you don't have /n on the end). Once both Local channels are bridged to other channels (like SIP ones) then they can masquerade themselves out of existence and the other channels can talk directly.

> -A.

Joshua Colp
Software Developer
Digium, Inc.



More information about the asterisk-dev mailing list