[Asterisk-Dev] Manager API Bridge channels help

mattf mattf at vicimarketing.com
Mon May 16 14:58:18 MST 2005


OK, it's working under CVS_HEAD and releases v1.0.6-7 and I have posted the
patches to the bugtracker:
http://bugs.digium.com/view.php?id=4297

You can use this either through the Manager API or by calling the
action_bridge function with 2 channels as your arguments.

MATT---


-----Original Message-----
From: mattf [mailto:mattf at vicimarketing.com]
Sent: Monday, May 16, 2005 2:37 PM
To: 'Asterisk Developers Mailing List'
Subject: RE: [Asterisk-Dev] Manager API Bridge channels help


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