[OpenSIPS-Users] Problem with mediaproxy/engage_media_proxy with branches to same endpoint

Saúl Ibarra Corretgé saul at ag-projects.com
Tue Mar 9 17:40:25 CET 2010


Hi Henk,

On 7/3/10 12:37 AM, Henk Hesselink wrote:
> We're running up against a problem where engage_media_proxy seems to
> handle multiple branches to the same endpoint incorrectly.  We've been
> getting sporadic cases of no audio and we can now reproduce it.  This
> is the simplest setup where it happens:
>
>               R
>               |
>       A ----- P ----- D ----- T
>                       |
>                       M
>
> A = Asterisk
> P = proxy (OpenSIPS)
> R = registrar (OpenSIPS)
> D = dispatcher (OpenSIPS)
> M = Mediaproxy
> T = phone
>
> What happens is:
>
> 1. the phone is unplugged (so can't unregister)
> 2. the phone is plugged in again and registers - there are now 2 entries
>      in the location table until the old registration expires
> 3. a call is made from Asterisk to the phone
> 4. the lookup() in the proxy results in 2 branches
> 5. both INVITE branches are sent to the dispatcher
> 6. both result in a call to engage_media_proxy()
> 7. both INVITE branches are forwarded to the phone
> 8. the phone responds to one branch with
>        a. "482 Loop Detected"
>      and the other with
>        b. "180 Ringing" and then "200 OK" with an SDP payload
>
> If the dispatcher receives the 482 response before the 180/200 then the
> SDP payload in the OK is for a different (new) mediaproxy session and we
> get no audio.  What it looks like is happening is that the 482 response
> causes the original mediaproxy session for all branches to terminate.
>
> This doesn't seem correct behaviour to us, or is it correct and should
> we be handling it in one of the configs?  We currently have a workaround
> where we regularly flush old duplicate registrations, but it seems like
> that shouldn't be necessary.

I may need some confirmation on this from Bogdan, but I think your 
problem here has to do with the actual lack of support for early dialogs 
in the dialog module IIRC.

There was a long thread discussing this: 
http://www.openser.org/pipermail/devel/2009-August/003806.html but I'n 
not sure of what got finally implemented or if it was left for the 2.0 
version.

If I'm not mistaken, then this is a situation that currently we can't 
deal with.

In order to solve it, you may use the  separate functions for doing the 
nat traversal: use_media_proxy and end_media_session. Those functions 
don't use the dialog module, so are not affected by this issue.


Kind regards,

-- 
Saúl Ibarra Corretgé
AG Projects



More information about the Users mailing list