[OpenSIPS-Users] Troubleshooting unabsorbed 200 OK retransmissions

Michael Schloh osipslist at encambio.com
Sun Jan 27 17:28:08 CET 2013


Hello list,

An upstream PSTN gateway is retransmitting 200 OK just some hundreds
milliseconds after the first 200 OK (following my outgoing INVITE.)
My OpenSIPS 1.7.2 on Solaris 11 AMD64 is sending both 200 OK
messages to the UAC which initiates the INVITE. The retransmitted
200 OK messages are identical.

The only send_reply commands that I'm using are for 403 and 404 and
otherwise I'm only using t_* commands like t_relay so I don't
understand why the tm module is not absorbing the duplicate 200 OKs.

My INVITEs are processed with t_on_reply("1") so I expect that the
200 OKs are appearing in the script first in onreply_route[1] (not
in the main route block.) If that's true then could it be a problem
that the onreply_route[1] just manipulates NAT headers and doesn't
explicitly drop() exit or t_relay the 200 OKs?

Is that why the 200 OKs are being retransmitted to my UAC?

I tried using t_checktrans() but it's not allowed in onreply_route
where the 200 OK messages are processed.

Here's how the 200 OK messages from the upstream provider look:

2013-01-26 11:31:52 | tls:111.111.111.111:5061 | tls:222.222.222.222:5061
SIP/2.0 200 OK
Via: SIP/2.0/TLS 222.222.222.222:5061;branch=z9hG4bKf2bf.8094.0;i=3
Via: SIP/2.0/TLS 192.168.1.5:2732;received=58.180.46.114;branch=z9hG4bK-tsd12ipnh39x;rport=52859
Record-Route: <sip:111.111.111.111;r2=on;lr=on;ftag=lrei0taqz5>
Record-Route: <sip:111.111.111.111:5061;transport=tls;r2=on;lr=on;ftag=lrei0taqz5>
Record-Route: <sip:222.222.222.222:5061;transport=tls;lr;ftag=lrei0taqz5;did=bfa.6bc6>
From: "Michael" <sip:116087943 at sip.callwithus.com>;tag=0taqz5laei
To: <sip:+123456789 at sip.mypstnprovider.com;user=phone>;tag=56Zy822Br9y5H
Call-ID: 2253ba7f90c2-42346662aa2f
CSeq: 2 INVITE
Contact: <sip:+123456789 at 46.58.200.4:5060;transport=udp>
User-Agent: MY SIP GW
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, NOTIFY
Supported: timer, precondition, path, replaces
Allow-Events: talk, hold, refer
Session-Expires: 3600;refresher=uas
Min-SE: 120
Content-Type: application/sdp
Content-Disposition: session
Content-Length: 165

v=0
o=- 1986643739 1986643741 IN IP4 46.58.200.231
s=-
c=IN IP4 57.227.101.2
t=0 0
m=audio 18104 RTP/AVP 0 101
a=rtpmap:101 telephone-event/8000
a=ptime:20

...and here's the parts of my route script dealing with replies:

# There is no (default) onreply_route {}
onreply_route[1] {
    if ((nat_uac_test("1") || search('^Contact:.*169\.254\.')) && status =~ "(18)[0-3]|2[0-9][0-9]")
        fix_nated_contact();
    if (has_body("application/sdp") && (nat_uac_test("8") || search_body("[co]=.*169\.254\.") || search_body("a=rtcp.*169\.254\."))) {  # test SDP body
        if (search_body("a=rtcp:.*IP[46].*(192\.168\.|10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|169\.254\.)"))
            fix_nated_sdp("26");  # rewrite o=, c=, and a=rtcp lines
        else                      # otherwise...
            fix_nated_sdp("10");  # rewrite only o= and c= lines
    }
}

I'd like to avoid using t_newtrans() because I modify
the messages quite a lot for things like NAT.

How can I force OpenSIPS to absorb the 200 OK retransmissions?

Regards,
Michael



More information about the Users mailing list