It is not clear to me if the ACK in your script hits loose_route().... It would be ideal if you could send the whole script. Also the request-URI has the same IP address as the Route header field -- where else shall the request go than to a loop?
-jiri
At 20:40 21/02/2008, SIP wrote:
While it all works fine for our locally-registered users (and for some of our peers), I'm still having problems from some peers dialing numbers on our service. What happens is that we get an ACK (all our ACKs are set to simply relay), and that ACK bounces around inside our server for a while, then times out without ever replying -- which, after a short period of time, cancels the connection for the peer, since they don't see any ACK replies.
We start with a normal ACK sent from the remote peer (198.65.166.131) to our server (22.33.44.55):
U 198.65.166.131:5060 -> 22.33.44.55:5060 ACK sip:301@22.33.44.55:5060 SIP/2.0. Record-Route: sip:198.65.166.131;ftag=j5j3wijb3t;lr. Via: SIP/2.0/UDP 198.65.166.131;branch=0. Via: SIP/2.0/UDP 192.168.1.51:2051;received=63.95.254.25;branch=z9hG4bK-wv3vqqoh qdm9;rport=2051. Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. From: "User One" sip:17471111111@proxy01.sipphone.com:5060;tag=j5j3wijb3t. To: sip:1101301@proxy01.sipphone.com;user=phone;tag=as6c9ca1f6. Call-ID: 3c26d1cab239-obtsvl9px3gg@snom190. CSeq: 1 ACK. Max-Forwards: 16. Contact: sip:17471111111@192.168.1.51:2051;line=ir1tukx9;nat=yes. Content-Length: 0. P-hint: rr-enforced. P-NATed-URI: YES (1). P-RTP-Proxy: YES (1).
We end up getting things that look like this:
U 22.33.44.55:5060 -> 22.33.44.55:5060 ACK sip:301@22.33.44.55:5060 SIP/2.0. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:22.33.44.55;ftag=j5j3wijb3t;lr=on. Record-Route: sip:198.65.166.131;ftag=j5j3wijb3t;lr. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 22.33.44.55;branch=0. Via: SIP/2.0/UDP 198.65.166.131;branch=0. Via: SIP/2.0/UDP 192.168.1.51:2051;received=63.95.254.25;branch=z9hG4bK-wv3vqqoh qdm9;rport=2051. From: "User One" sip:17471111111@proxy01.sipphone.com:5060;tag=j5j3wijb3t. To: sip:1101301@proxy01.sipphone.com;user=phone;tag=as6c9ca1f6. Call-ID: 3c26d1cab239-obtsvl9px3gg@snom190. CSeq: 1 ACK. Max-Forwards: 2. Contact: sip:17471111111@192.168.1.51:2051;line=ir1tukx9;nat=yes. Content-Length: 0. P-hint: rr-enforced. P-NATed-URI: YES (1). P-RTP-Proxy: YES (1).
The top of that message shows that this is a message sent from our server to our server, and it just tacks on a Record-Route and a Via line one after another until it times out.
Again, my ACK handler is simply:
if(method=="ACK") { route(1); break; }
The record route is the very basic:
if(method!="REGISTER") { record_route(); };
And route[1] is just:
route[1] {
if (!t_relay()) { sl_reply_error(); };
}
All very basic stuff (and straight from the getting started pages I think), and it mostly all works. Local users have no issues. Some peers are okay.
But several of them are NOT, and I've tried everything I can think of and can't get ACKs to behave. Can someone give me a bit of a clue as to what to look at?
I don't understand the reason for tacking on another RR param each time (nor do I REALLY understand why the lr=on is tacked on when this is clearly not loose-routed). Some days, I feel like I really have a handle on SER. Other days, I feel like I'm stumbling blindly. I never seem to get to a level of comfort.
N. _______________________________________________ Serusers mailing list Serusers@lists.iptel.org http://lists.iptel.org/mailman/listinfo/serusers
-- Jiri Kuthan http://iptel.org/~jiri/