[asterisk-users] How does chan_sip match an ACK?

Tony Mountifield tony at softins.co.uk
Tue Mar 31 10:38:00 CDT 2015


In article <mfbt6f$9rt$1 at softins.softins.co.uk>,
Tony Mountifield <tony at softins.co.uk> wrote:
> I am trying to debug a SIP issue, between an Asterisk 1.2.32 system that
> is behind a network device to which I don't have ready access, which is
> performing NAT with possibly some kind of SIP ALG, and an Asterisk 11
> system on a public IP.
> 
> My question is very specific, and I don't need right now to discuss the
> ins and outs of the above setup.
> 
> What I am seeing is that when I have set up a call from the Asterisk 11
> system, the 1.2.32 system is sending 200 OK, and sip debug shows the
> ACK response coming back from the Asterisk 11 box. However, the ACK
> appears not to be understood, because the 200 OK gets re-sent, multiple
> times, and eventually gives up.

OK, for the future reference of anyone else having a similar problem,
this is what was happening:

The dialplan was doing an immediate Answer:

exten => _X.,1,Answer
exten => _X.,n,Goto(wherever)

This means that the answering system, upon receiving the SIP INVITE,
would reply with a 100 Trying, followed immediately by a 200 OK.

Now, the two systems are actually on opposite sides of the Atlantic,
and the sending system sent the INVITE with a very short retransmission
timeout (T1 appeared to be 228ms due to a qualify time of 114ms). And by
the time it received the replies from the receiving system, it had
already retransmitted the INVITE.

However, the receiving system, having sent the 200 OK, then received
the repeat INVITE. It looks like it repeated the 200 OK, but then the
ACK from the sending system didn't get recognised properly.

I appear to have overcome it by putting in a delay before the Answer,
so that any repeated INVITE would arrive before the receiving system
tried sending the 200 OK to Answer:

exten => _X.,1,Ringing
exten => _X.,n,Wait(1)
exten => _X.,n,Answer
exten => _X.,n,Goto(wherever)

On further reading, I would think I could also solve it by setting the
T1 values in sip.conf, instead of doing the above:

Should I set "timert1=500", or "t1min=500" or both, or what?

Cheers
Tony
-- 
Tony Mountifield
Work: tony at softins.co.uk - http://www.softins.co.uk
Play: tony at mountifield.org - http://tony.mountifield.org



More information about the asterisk-users mailing list