2008/6/4, Steven.Wu@teleca.com Steven.Wu@teleca.com:
Hi Iñaki,
Hi Steven, for next time please mantain the thread in the maillist ;)
See inline:
At first, I repied the PRACK without Route header but contian the to tag. I added the Route header after receive your opinion. But also failed. I attached my SIP message, could you please take a look them and give me some suggestion?
First of all, do you mean that you added the Route in the UAC? are you programming the UAC?
UDP Data send to: 10.57.39.120:5060
This INVITE goes to the proxy: 10.57.39.120
INVITE sip:1141@10.57.39.120 SIP/2.0 Via: SIP/2.0/UDP 10.57.39.33:5060 From: sip:6846@10.57.39.120;tag=032baj647 To: sip:1141@10.57.39.120 Call-ID: asdbasdb3-asdb552 CSeq: 899 INVITE Contact: sip:6846@10.57.39.33 Max-Forwards: 70 Content-Type: application/sdp Expires: 180 Accept-Contact: *;+mckoppa Supported: precondition, 100Rel Require: precondition Content-Length: 392 v=0 o=Inviter2007 63241204263093750 132223800 IN IP4 10.57.39.33 s=- c=IN IP4 10.57.39.33 t=0 0 m=audio 5000 RTP/AVP 106 8 0 a=sendrecv a=rtpmap:106 AMR/8000 a=ptime:160 a=maxptime:200 a=fmtp:106 octet-align=1; mode-set=7 a=rtpmap:8 PCMA/8000 a=rtpmap:0 PCMU/8000 a=curr:qos local none a=curr:qos remote none a=des:qos mandatory local sendrecv a=des:qos none remote sendrecv
UDP Data received from: 10.57.39.120:5060
The proxy replies.
SIP/2.0 183 Session Progress Record-Route: sip:10.57.39.120;lr=on
This Record-Route forces the UAC to include a "Route" header with same value and send there future *in-dialog* requests.
Via: SIP/2.0/UDP 10.57.39.33:5060 Require: 100Rel To: sip:1141@10.57.39.120;tag=53m9f85odqq1uld83vs6 Contact: sip:0y9N9S0dFpYtlSrLGwwF@10.57.39.114
Note that the UAS location is 10.57.39.114 so future **in-dialog** requests MUST have this IP 10.57.39.114 in the RURI and NOT the proxy IP.
From: sip:6846@10.57.39.120;tag=032baj647 Supported: 100Rel,precondition RSeq: 2956138 Call-ID: asdbasdb3-asdb552 CSeq: 899 INVITE Allow: UPDATE,PRACK,SUBSCRIBE,REFER,NOTIFY,INVITE,ACK,CANCEL,OPTIONS,BYE Content-Type: application/sdp Content-Length: 465 v=0 o=1141 63380817057795000 63380817057795000 IN IP4 10.57.39.114 s=- c=IN IP4 10.57.39.114 t=0 0 m=audio 5000 RTP/AVP 106 8 0 a=sendrecv a=curr:qos local sendrecv a=curr:qos remote none a=des:qos mandatory local sendrecv a=des:qos mandatory remote sendrecv a=conf:qos remote sendrecv a=rtcp:5001 IN IP4 10.57.39.114 a=rtpmap:106 AMR/8000 a=ptime:160 a=maxptime:200 a=fmtp:106 octet-align=1; mode-set=7 a=rtpmap:8 PCMA/8000 a=rtpmap:0 PCMU/8000
UDP Data send to: 10.57.39.120:5060
This is an in-dialog message (it has "To" tag) but the RURI is not the received Contact (10.57.39.114). It's the proxy IP, why??? this is completely incorrect. An in-dialog request must have in the RURI the URI received in the 183 Contact. And if the in-dialog request has a "Route" header it must be send to that location. This is how loose routing works.
PRACK sip:1141@10.57.39.120 SIP/2.0 Via: SIP/2.0/UDP 10.57.39.33:5060 From: sip:6846@10.57.39.120;tag=032baj647 To: sip:1141@10.57.39.120;tag=53m9f85odqq1uld83vs6 Call-ID: asdbasdb3-asdb552 CSeq: 89951 PRACK Contact: sip:6846@10.57.39.33 Max-Forwards: 70 Route: sip:10.57.39.120;lr=on Content-Type: application/sdp Expires: 180 Accept-Contact: *;+mckoppa Supported: precondition, 100Rel Require: precondition RAck:2956138 899 INVITE Content-Length: 278 v=0 o=Inviter2007 63241204263093750 132223801 IN IP4 10.57.39.33 s=- c=IN IP4 10.57.39.33 t=0 0 m=audio 5000 RTP/AVP 106 a=rtpmap:106 AMR/8000 a=curr:qos local sendrecv a=curr:qos remote sendrecv a=des:qos mandatory local sendrecv a=des:qos mandatory remote sendrecv
If added a route rule 'if ( is_method("PRACK") ) { t_relay(); exit;} ' , I'll receive the 483 response. Otherwise, receive 404 Not here
It makes sense 100%. It's an error in the RURI of your PRACK.
Please, read again http://tools.ietf.org/html/rfc3261#section-12.2
Regards.