[Asterisk-Dev] Manager API Bridge channels help
mattf
mattf at vicimarketing.com
Mon May 16 11:37:27 MST 2005
Thanks for the suggestions, I think I've got it working now on 1.0.6 stable
with no more lockups or persistant zombies, I'm going to clean up the code a
bit then post it to the bugtracker with patches for 1.0.6, 1.0.7 and
CVS-HEAD. I'll post here with the tracker number when I'm all done.
Thanks again,
MATT---
-----Original Message-----
From: C. Maj [mailto:cmaj-SPAM at freedomcorpse.com]
Sent: Monday, May 16, 2005 11:00 AM
To: Asterisk Developers Mailing List
Subject: Re: [Asterisk-Dev] Manager API Bridge channels help
On Fri, 13 May 2005, mattf waxed:
> Hello,
>
> I've seen the concept of this batted around a few times in the last
> year(taking 2 existing conversations, removing one party from each and
> Bridging them together by way of a Manager API Action: Bridge), but noone
> seems to have gotten it to fully work. I took several pointers from
several
> people, but now my lack of knowledge about the core channel handling in
> Asterisk has stopped me.
>
> In the code below you can see that I MASQ both channels I want to bridge
> together and drop the other two, and as far as the talking parties can
tell
> they are then connected and the other two lines are dead, (and 'show
> channels' reflects this point as well.). The problem is that one or both
of
> the dropped off channels will be stuck in ast_channel_walk_locked mode
> unless you do a hard hangup(in which case the do not disappear from 'show
After the masquerade, aren't they zombies ? I thought there
was an automatic zombie killer. Careful tho with calls to
ast_do_masquerade because that can fail so you should check
the return result. That function in general looks pretty
scary. (Speaking from experience with Resident Evil 4,
anything that creates a bunch of zombies Is A Bad Thing.)
> channels') and even though the 2 bridged lines can converse and show
> channels says they are together, the manager does not return a success or
> failure and it seems to be stuck at the ast_channel_bridge function.
I see that ast_channel_bridge, in channel.c, gets you into a
loop that doesn't break until the bridge ends. The bridge
can end for a variety of reasons: hangup, timeout, etc. Do
you receive the manager "Link" event ? That would be the
confirmation of success, and "Unlink" would be an indication
of failure/end of bridge.
But whenever you see something like:
for (;;) { blah }
you can plan on things going "blah" for a while.
If you really need this action_bridge call to return before
the bridge is completed, you'll need to spawn a new thread
and perform ast_channel_bridge inside there. That might get
pretty thread heavy, tho. But it's used with attended
transfers -- see ast_bridge_call_thread in res_features.c,
and that seems pretty similar to what you are trying to do.
--Chris
--
Chris Maj, Rochester
cmaj_at_freedomcorpse_dot_com
Pronunciation Guide: Maj == May
_______________________________________________
Asterisk-Dev mailing list
Asterisk-Dev at lists.digium.com
http://lists.digium.com/mailman/listinfo/asterisk-dev
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev
More information about the asterisk-dev
mailing list