[Users] Proxy Route Processing
Victor Gamov
vit at lipetsk.ru
Thu Apr 19 22:24:05 CEST 2007
Hi gentlemen!
Sorry for my perseverance but I'll try to ask my question one more time.
I have following SIP-network configuration
Term=192.168.100.77 <-> NAT=Y.Y.Y.Y <-> OpenSER=X.X.X.X <-> GW=Z.Z.Z.Z
Term uses X.X.X.X as registrar and outbound proxy. It registered on
OpenSER as "vit-horosho at X.X.X.X". GW is gateway connected to POTS.
Then I make call from Term to POTS number 74951000000.
'ngrep SIP port 5060' output from OpenSER machine followed (I strip some
unimportant info from requests. My comments before requests)
Initial request from Term comes to OpenSER:
U Y.Y.Y.Y:60767 -> X.X.X.X:5060
INVITE sip:74951000000 at X.X.X.X:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.100.77:5060;branch=z9hG4bK_00179A52BC45_T63F7A22E
Session-Expires: 1800
From: "Vit-Horosho" <sip:vit-horosho at X.X.X.X>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>
Call-ID: CALL_ID4_00179A52BC45_T397365265 at 192.168.100.77
CSeq: 397703138 INVITE
Contact: <sip:vit-horosho at 192.168.100.77:5060>
OK. OpenSER send prov. reply to Term:
U X.X.X.X:5060 -> Y.Y.Y.Y:60767
SIP/2.0 100 Giving a try
Via: SIP/2.0/UDP
192.168.100.77:5060;branch=z9hG4bK_00179A52BC45_T63F7A22E;
rport=60767;received=Y.Y.Y.Y
From: "Vit-Horosho" <sip:vit-horosho at X.X.X.X>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>
Call-ID: CALL_ID4_00179A52BC45_T397365265 at 192.168.100.77
CSeq: 397703138 INVITE
Content-Length: 0
Then I make my own transformations on Contact: header and OpenSER resend
request to GW. OpenSER adds Record-Route: header into request also.
U X.X.X.X:5060 -> Z.Z.Z.Z:5060
INVITE sip:74951000000 at Z.Z.Z.Z;user=phone SIP/2.0
Record-Route: <sip:X.X.X.X;lr=on;
ftag=00179A52BC45_T1011336699>
Via: SIP/2.0/UDP X.X.X.X;branch=z9hG4bK7a3.0ae7d67.0
Via: SIP/2.0/UDP 192.168.100.77:5060;rport=60767;received=
Y.Y.Y.Y;branch=z9hG4bK_00179A52BC45_T63F7A22E
Session-Expires: 1800
From: "Vit-Horosho" <sip:vit-horosho at 80.23 7.15.3>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>
Call-ID: CALL_ID4_00179A52BC45_T397365265@
192.168.100.77
CSeq: 397703138 INVITE
Contact: <sip:vit-horosho at X.X.X.X;nat=yes>
OK. GW send prov. reply to OpenSER
U Z.Z.Z.Z:5060 -> X.X.X.X:5060
SIP/2.0 100 Trying
Via: SIP/2.0/UDP X.X.X.X;branch=z9hG4bK7a3.0ae7d67.0,SIP/2.0/UDP
192.168.100.77:5060;rport=60767
;received=Y.Y.Y.Y;branch=z9hG4bK_00179A52BC45_T63F7A22E
From: "Vit-Horosho" <sip:vit-horosho at X.X.X.X>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>;tag=54E1EED8-D8E
Date: Thu, 19 Apr 2007 18:37:57 GMT
Call-ID: CALL_ID4_00179A52BC45_T397365265 at 192.168.100.77
CSeq: 397703138 INVITE
OK. OpenSER resend prov. reply to Term
U X.X.X.X:5060 -> Y.Y.Y.Y:60767
SIP/2.0 100 Giving a try
Via: SIP/2.0/UDP 192.168.100.77:5060;branch=z9hG4bK_00179A52BC45_T63F7A22E;
rport=60767;received=Y.Y.Y.Y
From: "Vit-Horosho" <sip:vit-horosho at X.X.X.X>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>
Call-ID: CALL_ID4_00179A52BC45_T397365265 at 192.168.100.77
CSeq: 397703138 INVITE
GW send 183 to OpenSER. Record-Route: header present in this reply.
U Z.Z.Z.Z:5060 -> X.X.X.X:5060
SIP/2.0 183 Session Progress
Via: SIP/2.0/UDP X.X.X.X;branch=z9hG4bK7a3.0ae7d67.0,SIP/2.0/UDP
192.168.100.77:5060;rport=60767;received=Y.Y.Y.Y;
branch=z9hG4bK_00179A52BC45_T63F7A22E
From: "Vit-Horosho" <sip:vit-horosho at X.X.X.X>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>;tag=54E1EED8-D8E
Date: Thu, 19 Apr 2007 18:37:58 GMT
Call-ID: CALL_ID4_00179A52BC45_T397365265 at 192.168.100.77
Server: Cisco-SIPGateway/IOS-12.x..
CSeq: 397703138 INVITE
RSeq: 3722
Contact: <sip:74951000000 at Z.Z.Z.Z:5060>
Record-Route: <sip:X.X.X.X;lr=on;ftag=00179A52BC45_T1011336699>
OpenSER make my own transformation on Contact: header and resend 183 to
Term.
U X.X.X.X:5060 -> Y.Y.Y.Y:60767
SIP/2.0 183 Session Progress
Via: SIP/2.0/UDP 192.168.100.77:5060;rport=60767;
received=Y.Y.Y.Y;
branch=z9hG4bK_00179A52BC45_T63F7A22E
From: "Vit-Horosho" <sip:vit-horosho at X.X.X.X>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>;tag=54E1EED8-D8E
Date: Thu, 19 Apr 2007 18:37:58 GMT
Call-ID: CALL_ID4_00179A52BC45_T397365265 at 192.168.100.77
CSeq: 397703138 INVITE
Allow: INVITE, OPTIONS, BYE, CANCEL, ACK, PRAC
K, UPDATE, REFER, SUBSCRIBE, NOTIFY, INFO, REGISTER
Require: 100rel
RSeq: 3722
Record-Route: <sip:X.X.X.X;lr=on;ftag=00179A52BC45_T1011336699>
Contact: <sip:74951000000 at X.X.X.X:5060;nat=yes>
Term try to send PRACK to GW. It sets RURI to value getted from Contact:
header of 183 reply. It adds Route: getted from Term's route set (comes
from 183) also. So PRACK getted by OpenSER:
U Y.Y.Y.Y:60767 -> X.X.X.X:5060
PRACK sip:74951000000 at X.X.X.X:5060;nat=yes SIP/2.0
Via: SIP/2.0/UDP 192.168.100.77:5060;
branch=z9hG4bK_00179A52BC45_T16F15B76
From: "Vit-Horosho" <sip:vit-horosho at X.X.X.X>;
tag=00179A52BC45_T1011336699
To: <sip:74951000000 at X.X.X.X:5060>;tag=54E1EED8-D8E
Call-ID: CALL_ID4_00179A52BC45_T397365265 at 192.168.100.77
RAck: 3722 397703138 INVITE
CSeq: 397703139 PRACK
Contact: <sip:vit-horosho at 192.168.100.77:5060>
Route: <sip:X.X.X.X;lr=on;ftag=00179A52BC45_T1011336699>
And I have misunderstood at this point. I use following logic in my
openser.cfg:
route {
...
record_route();
if ( loose_route() ) {
append_hf("P-hint: rr-enforced\r\n");
# we don't call route(1) here -- we need to process all requests later
}
# main request process logic followed
...
}
and I found the following in my debug:
0(41063) after_strict: Next hop:
'sip:X.X.X.X;lr=on;ftag=00179A52BC45_T1011336699' is loose router
0(41063) parse_headers: flags=ffffffffffffffff
0(41063) rewrite_uri: Rewriting Request-URI with
'sip:X.X.X.X;lr=on;ftag=00179A52BC45_T1011336699'
0(41063) after_strict: The last route URI:
'sip:X.X.X.X;lr=on;ftag=00179A52BC45_T1011336699'
0(41063) parse_headers: flags=ffffffffffffffff
As I founded in RFC-3261 section 16.12:
"1. The proxy will inspect the Request-URI. If it indicates a
resource owned by this proxy, the proxy will replace it with
the results of running a location service. Otherwise, the
proxy will not change the Request-URI.
2. The proxy will inspect the URI in the topmost Route header
field value. If it indicates this proxy, the proxy removes it
from the Route header field (this route node has been
reached)."
So my question:
why loose_route() don't treat PRACK RURI
sip:74951000000 at X.X.X.X:5060;nat=yes
as resource owned by this proxy and rewrite it with Route: header URI
sip:X.X.X.X;lr=on;ftag=00179A52BC45_T1011336699 ?
--
CU,
Victor Gamov
More information about the sr-users
mailing list