[Freeswitch-users] Loopback and bypass_media

Mathieu Rene mrene_lists at avgs.ca
Thu Aug 13 16:54:08 PDT 2009


Hi All,

The reason it works when you wait 3 seconds is that mod_loopback bails  
out of the equation as soon as it detects a bridge.
It'll call switch_ivr_uuid_bridge() and you'll end up with 2 sofia  
channels.

Now the reason why you can't do uuid_media over a loopback channel is  
because it doesn't pass on SWITCH_MESSAGE_INDICATE_MEDIA and   
SWITCH_MESSAGE_INDICATE_NOMEDIA onto the underlying channel.
The handler for those two events require accessing channel variables  
on the both channels to get the ip+port of where the audio should go  
through, so that mod_sofia can send a re-invite.
Since mod_loopback is a completely different channel, it has its own  
channel variables, independent from mod_sofia (provided you have sofia  
channels on both side).  That's why even sofia<>loopback won't do  
bypass media.

On another note, mod_sofia will behave differently when it detects its  
being bridge with another sofia channel, providing optimizations when  
both call legs are SIP.

My personal opinion is not to use mod_loopback unless absolutely  
necessary, FreeSWITCH's core is very flexible and there's often a  
(better) way than using mod_loopback.

Mathieu Rene
Avant-Garde Solutions Inc
Office: + 1 (514) 664-1044 x100
Cell: +1 (514) 664-1044 x200
mrene at avgs.ca




On 13-Aug-09, at 6:59 PM, Phillip Jones wrote:

> Rupa / all,
>
> Just a quick follow up to this.
>
> This is appears to a timing issue. If I try and do a "uuid_media off +
> uuid"  in  "api_after_bridge"  it fails with "CHAN_NOT_IMPLEMENTED"
> and  the call is dropped.
>
> If appears to be trying to do a SIP reinvite on the loopback channel
> which is of course just about to / has disappear/ed.
>
> So I tried this, after the call is established, at the commend line, I
> do "show calls" and using the uuid shown, type "uuid_media off  uuid".
> The SIP REINVITE is issued and works.
>
> I think the switch_ivr_nomedia function in switch_ivr_c is getting the
> loopback uuid when it calls "other_uuid =
> switch_channel_get_variable(channel, SWITCH_BRIDGE_VARIABLE)"
>
> That's why the SIP REINVITE fails.
>
> So... in api_after_bridge I issue:
>
> "sched_api", "+3 none uuid_media off " + uuid. This calls the
> switch_ivr_nomedia function 3 seconds after the calls bridge is
> established.
>
>
> And it works, Not nice - not scalable or production ready - but the
> SIP-REINVITE is successful and at least now I understand what is going
> on.
>
> Make sense?
>
> Thanks
>
>
> Phil
>
>
> On Wed, Aug 12, 2009 at 12:21 PM, Rupa Schomaker<rupa at rupa.com> wrote:
>> On Wed, Aug 12, 2009 at 10:22 AM, Phillip  
>> Jones<pjintheusa at gmail.com> wrote:
>>> Hi there,
>>>
>>>>> application="originate" data="(sofia/foo/bar|sofia/baz/bar), 
>>>>> (sofia/foo/yum|sofia/baz/yum)"
>>>
>>> I agree. However, perhaps the ideal is not to specify the carriers  
>>> at
>>> this level, as carriers are added and removed fairly often as  
>>> costings
>>> change. So it would be nice to have some sort of proxy that resolves
>>> to a list of carriers:
>>>
>>> application="originate" data="sofia/MyCarriers/bar,sofia/ 
>>> MyCarriers/yum"
>>
>>> <MyCarriers>
>>> <action application="carrier" data="sofia/foo"/>
>>> <action application="carrier" data="sofia/baz"/>
>>> <action application="carrier" data="sofia/etc"/>
>>> </MyCarriers>
>>>
>>>
>>> or something similar. This would achieve the same as loopback in  
>>> this
>>> use case but without dangers of looping? Complicated stuff though.
>>
>> Well, that is all done by mod_lcr.  I was simplifying to narrow down
>> to just originate.
>>
>> First we need to see if this is worth pursuing over fixing  
>> (modifying,
>> whatever) loopback to handle bypass media.  If it is, then I'll  
>> modify
>> mod_lcr to deal with the situation in question (comma or pipe sep  
>> list
>> of numbers to call.  mod_lcr would then group as appropriate).
>>
>> Right now, my bridge is setup in a small javascript script that  
>> builds
>> the appropriate dialstring (using loopback for external calls, user/
>> for internal calls) and then when doing the loopback call to mod_lcr
>> to get the dialstring with all providers in the right order.
>>
>>>>> Perhaps have an on answer hook that tries to enable bypass media  
>>>>> (re-invite) after the call is setup?
>>>
>>> That's a good idea - I will look into that.
>>>
>>>
>>> Thanks again.
>>>
>>>
>>> Phillip
>>
>> Let us know how it works for you...
>>
>> --
>> -Rupa
>>
>> _______________________________________________
>> FreeSWITCH-users mailing list
>> FreeSWITCH-users at lists.freeswitch.org
>> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
>> http://www.freeswitch.org
>>
>
> _______________________________________________
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org





More information about the FreeSWITCH-users mailing list