First, the nuts and bolts.

In the loose_route section:

        if (!is_method("ACK")) {
                perl_exec("nonack_delay");
        }

And, in the Perl file:

        sub nonack_delay {
                select(undef,undef,undef,0.060);
                return 1;
        }

I lied.  Not 100ms, but 60ms.

This worked like a champ, at the cost of keeping a non-ACK message fermenting 
in the process for exactly 60ms longer than it otherwise would have.  A bit of 
a kick in teeth to scalability but I saw no other solution.

I do believe 400 was the negative response of choice from most UAs subjected to 
the out-of-order ugliness.


- Jeff



On Apr 1, 2010, at 4:21 PM, Brett Nemeroff wrote:

> WOW
> 
> Ok, well the real question is.. did the 100ms sleep fix your problem?
> And what was the result of the ordering issue for you? Did you get a
> 400 from the provider like I'm seeing?
> 
> 
> I'll give it a shot..
> -Brett
> 
> 
> On Thu, Apr 1, 2010 at 2:56 PM, Jeff Pyle <[email protected]> wrote:
>> This goes way back.  Bogdan addressed it last year sometime, citing a reason 
>> why ACK processing is slower than other processing.  And, since the two 
>> messages hit different children of Opensips, the ACK hits the exit gate 
>> after the reINVITE, even though the ACK arrived first.  I've seen it with 
>> Broadworks and Asterisk.
>> 
>> There were a number of solutions posted although none of them worked for me. 
>>  My workaround is to call a perl script to sleep for 100ms if the message is 
>> not an ACK.  That allows the ACK time to get through.  I would certainly 
>> love a "real" solution, that is, speeding up the ACK or some other mechanism 
>> to enforce the sequence.
>> 
>> 
>> - Jeff
>> 
>> On Apr 1, 2010, at 3:47 PM, Brett Nemeroff wrote:
>> 
>>> Hello All,
>>> I'm working with a Broadsoft which is setup to send outbound calls to
>>> OpenSIPs. The Broadsoft extension is set to ring simultaneously
>>> multiple extensions. One which hits the proxy and the other is
>>> internal on the broadsoft.
>>> 
>>> What I'm seeing is an outbound call from broadsoft to the proxy to the
>>> provider (normal)
>>> the provider answers and replies with a 200 OK, forwarded onto
>>> broadsoft, without problem.
>>> 
>>> However, then I immediately get a ACK / INVITE FROM the broadsoft in
>>> reply to the 200 OK. That seems ok, but when it goes to the provider
>>> the ORDER is switched and it forwards the INVITE first THEN the ACK.
>>> 
>>> I'm not sure if that matters, but the provider is replying with a 400
>>> Bad Request. Which may be because I'm trying to reinvite a call which
>>> hasn't been ACKd yet?
>>> 
>>> Any ideas here? why would the order change? And could this potentially
>>> cause call setup issues?
>>> 
>>> Thanks,
>>> Brett
>>> 
>>> _______________________________________________
>>> Users mailing list
>>> [email protected]
>>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>> 
>> 
>> _______________________________________________
>> Users mailing list
>> [email protected]
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>> 
> 
> _______________________________________________
> Users mailing list
> [email protected]
> http://lists.opensips.org/cgi-bin/mailman/listinfo/users


_______________________________________________
Users mailing list
[email protected]
http://lists.opensips.org/cgi-bin/mailman/listinfo/users

Reply via email to