[SR-Users] Dispatcher - failure_route to specific node

Nicholas Gill nick at etellicom.com
Tue Sep 16 03:28:22 CEST 2014


On 15/09/14 16:03, Federico Cabiddu wrote:
> What happens if you call t_relay() after setting $du?
Same result. Kamailio sends 407 to caller, which then creates a new INVITE.

I suspect my configuration doesn't reflect the intent, so I'm adding it 
below along with other particulars of the test environment.

Is there a specific way to cause kamailio to relay the INVITE to a 
particular server based on a dynamic variable?

Cheers,

-nick

192.168.20.215 - Caller
192.168.20.214:5060 Kamailio (node1.etellicom.com)
192.168.20.214:5080 FS1 (node1.etellicom.com)
192.168.20.198:5080 FS2 (node2.etellicom.com)

Kamailio:

version: kamailio 4.1.5 (x86_64/linux) 2b3d4b

Configuration diff from default:

*** kamailio.cfg.default    2014-08-29 15:07:42.336496172 +1000
--- kamailio.cfg    2014-09-16 10:43:50.199400261 +1000
*************** loadmodule "xmlrpc.so"
*** 283,288 ****
--- 283,296 ----
   loadmodule "debugger.so"
   #!endif

+ loadmodule "dispatcher.so"
+ modparam("dispatcher", "flags", 2)
+ modparam("dispatcher", "list_file", "/root/dispatcher.list")
+ modparam("dispatcher", "dst_avp", "$avp(AVP_DST)")
+ modparam("dispatcher", "grp_avp", "$avp(AVP_GRP)")
+ modparam("dispatcher", "cnt_avp", "$avp(AVP_CNT)")
+ #modparam("dispatcher", "ds_ping_interval", 60)
+
   # ----------------- setting module-specific parameters ---------------


*************** request_route {
*** 491,496 ****
--- 499,509 ----
           setflag(FLT_ACC); # do accounting
       }

+     if(!ds_is_from_list("1"))
+     {
+         route(DISPATCH);
+     }
+
       # dispatch requests to foreign domains
       route(SIPOUT);

*************** request_route {
*** 516,521 ****
--- 529,576 ----
       route(LOCATION);
   }

+ # Dispatch requests
+ route[DISPATCH] {
+
+     # Hash over to uri for test purposes
+     if(!ds_select_dst("1", "2"))
+     {
+         send_reply("404", "No destination");
+         exit;
+     }
+     xlog("L_DBG", "--- SCRIPT: going to <$ru> via <$du>\n");
+     t_on_failure("RTF_DISPATCH");
+     route(RELAY);
+     exit;
+ }
+
+ # Dispatch failure route
+ failure_route[RTF_DISPATCH] {
+     if (t_is_canceled()) {
+         exit;
+     }
+     # next DST - only for 500 or local timeout
+     if (t_check_status("500")
+             or (t_branch_timeout() and !t_branch_replied()))
+     {
+         if(ds_next_dst())
+         {
+             t_on_failure("RTF_DISPATCH");
+             route(RELAY);
+             exit;
+         }
+     }
+
+     if ($avp(imx-redirect) != $null)
+     {
+         $du = $avp(imx-redirect);
+         xlog("SCRIPT: REDIRECT: going to <$ru> via <$du>\n");
+ #        route(RELAY);
+         t_relay();
+         exit;
+     }
+
+ }

   route[RELAY] {

*************** onreply_route[MANAGE_REPLY] {
*** 911,916 ****
--- 966,977 ----
       xdbg("incoming reply\n");
       if(status=~"[12][0-9][0-9]")
           route(NATMANAGE);
+
+     if (t_check_status("3[0-9][0-9]") and is_present_hf("X-imx-redirect"))
+     {
+         $avp(imx-redirect) = $hdr(X-imx-redirect);
+         xlog("SCRIPT: REDIRECT, Store avp for redirect: 
$avp(imx-redirect)\n");
+     }
   }

   # manage failure routing cases


SIP trace of call intended to be redirected to a specific server.

Scenario starts with normal INVITE, 100, proxy auth from backend server, 
INVITE with auth.
When FS2 receives the authenticated invite, it responds with 302 and 
indicates via the X-imx-redirect header to redirect the request to FS1.

Then I want to send the INVITE to the given server by setting $du and 
calling t_relay() but my current configuration seems to cause kamailio 
to respond to the caller with 407 instead.


10:46:27.361991 IP 192.168.20.215.5062 > 192.168.20.214.5060
INVITE sip:*591000 at test.etellicom.com SIP/2.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 INVITE
Contact: <sip:1001 at 192.168.20.215:5062>
Content-Type: application/sdp
Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, 
SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
Max-Forwards: 70
User-Agent: Yealink SIP-T38G 38.70.0.115
Supported: replaces
Allow-Events: talk,hold,conference,refer,check-sync
Content-Length: 310

SDP

10:46:27.362567 IP 192.168.20.214.5060 > 192.168.20.215.5062
SIP/2.0 100 trying -- your call is important to us
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 INVITE
Server: kamailio (4.1.5 (x86_64/linux))
Content-Length: 0


10:46:27.362745 IP 192.168.20.214.5060 > 192.168.20.198.5080
INVITE sip:*591000 at test.etellicom.com SIP/2.0
Record-Route: <sip:192.168.20.214;lr=on>
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bKa4a8.9a165b4901cf1602b3146c7f0bf0a191.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 INVITE
Contact: <sip:1001 at 192.168.20.215:5062>
Content-Type: application/sdp
Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, 
SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
Max-Forwards: 69
User-Agent: Yealink SIP-T38G 38.70.0.115
Supported: replaces
Allow-Events: talk,hold,conference,refer,check-sync
Content-Length: 310

SDP

10:46:27.383907 IP 192.168.20.198.5080 > 192.168.20.214.5060
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bKa4a8.9a165b4901cf1602b3146c7f0bf0a191.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947
Record-Route: <sip:192.168.20.214;lr=on>
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 INVITE
User-Agent: IMX
Content-Length: 0


10:46:27.553363 IP 192.168.20.198.5080 > 192.168.20.214.5060
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bKa4a8.9a165b4901cf1602b3146c7f0bf0a191.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=Ke2rvve07SK3N
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 INVITE
User-Agent: IMX
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, 
REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, 
dialog, line-seize, call-info, sla, include-session-description, 
presence.winfo, message-summary, refer
Proxy-Authenticate: Digest realm="test.etellicom.com", nonce="xxx", 
algorithm=MD5, qop="auth"
Content-Length: 0


10:46:27.553574 IP 192.168.20.214.5060 > 192.168.20.198.5080
ACK sip:*591000 at test.etellicom.com SIP/2.0
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bKa4a8.9a165b4901cf1602b3146c7f0bf0a191.0
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=Ke2rvve07SK3N
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 ACK
Max-Forwards: 69
Content-Length: 0


10:46:27.553718 IP 192.168.20.214.5060 > 192.168.20.215.5062
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=Ke2rvve07SK3N
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 INVITE
User-Agent: IMX
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, 
REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, 
dialog, line-seize, call-info, sla, include-session-description, 
presence.winfo, message-summary, refer
Proxy-Authenticate: Digest realm="test.etellicom.com", nonce="xxx", 
algorithm=MD5, qop="auth"
Content-Length: 0


10:46:27.592662 IP 192.168.20.215.5062 > 192.168.20.214.5060
ACK sip:*591000 at test.etellicom.com SIP/2.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=Ke2rvve07SK3N
Call-ID: 1766438446 at 192.168.20.215
CSeq: 1 ACK
Content-Length: 0


10:46:27.630142 IP 192.168.20.215.5062 > 192.168.20.214.5060
INVITE sip:*591000 at test.etellicom.com SIP/2.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 INVITE
Contact: <sip:1001 at 192.168.20.215:5062>
Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", 
nonce="xxx", uri="sip:*591000 at test.etellicom.com", response="xxx", 
algorithm=MD5, cnonce="xxx", qop=auth, nc=00000001
Content-Type: application/sdp
Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, 
SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
Max-Forwards: 70
User-Agent: Yealink SIP-T38G 38.70.0.115
Supported: replaces
Allow-Events: talk,hold,conference,refer,check-sync
Content-Length: 310

SDP

10:46:27.630721 IP 192.168.20.214.5060 > 192.168.20.215.5062
SIP/2.0 100 trying -- your call is important to us
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 INVITE
Server: kamailio (4.1.5 (x86_64/linux))
Content-Length: 0


10:46:27.630896 IP 192.168.20.214.5060 > 192.168.20.198.5080
INVITE sip:*591000 at test.etellicom.com SIP/2.0
Record-Route: <sip:192.168.20.214;lr=on>
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bK74a8.d3d3ad8bb9b1c73c12e16cdab447472e.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 INVITE
Contact: <sip:1001 at 192.168.20.215:5062>
Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", 
nonce="xxx", uri="sip:*591000 at test.etellicom.com", response="xxx", 
algorithm=MD5, cnonce="xxx", qop=auth, nc=00000001
Content-Type: application/sdp
Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, 
SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
Max-Forwards: 69
User-Agent: Yealink SIP-T38G 38.70.0.115
Supported: replaces
Allow-Events: talk,hold,conference,refer,check-sync
Content-Length: 310

SDP

10:46:27.631731 IP 192.168.20.198.5080 > 192.168.20.214.5060
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bK74a8.d3d3ad8bb9b1c73c12e16cdab447472e.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902
Record-Route: <sip:192.168.20.214;lr=on>
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 INVITE
User-Agent: IMX
Content-Length: 0


10:46:29.187901 IP 192.168.20.198.5080 > 192.168.20.214.5060
SIP/2.0 302 Moved Temporarily
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bK74a8.d3d3ad8bb9b1c73c12e16cdab447472e.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902
Max-Forwards: 69
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=mQUHyQZ3429NH
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 INVITE
Contact: "unknown" <sip:node1.etellicom.com>
User-Agent: IMX
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, 
REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, 
dialog, line-seize, call-info, sla, include-session-description, 
presence.winfo, message-summary, refer
Reason: Q.850;cause=31;text="NORMAL_UNSPECIFIED"
Content-Length: 0
X-imx-redirect: sip:192.168.20.214:5080


10:46:29.188327 IP 192.168.20.214.5060 > 192.168.20.198.5080
ACK sip:*591000 at test.etellicom.com SIP/2.0
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bK74a8.d3d3ad8bb9b1c73c12e16cdab447472e.0
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=mQUHyQZ3429NH
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 ACK
Max-Forwards: 69
Content-Length: 0


  7(17488) ERROR: <script>: SCRIPT: REDIRECT, Store avp for redirect: 
sip:192.168.20.214:5080
  7(17488) ERROR: <script>: SCRIPT: REDIRECT: going to 
<sip:*591000 at test.etellicom.com> via <sip:192.168.20.214:5080>

10:46:29.432573 IP 192.168.20.214.5060 > 192.168.20.215.5062
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=ZS5Q6Xem0Umaj
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 INVITE
User-Agent: IMX
Accept: application/sdp
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, 
REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Allow-Events: talk, hold, conference, presence, as-feature-event, 
dialog, line-seize, call-info, sla, include-session-description, 
presence.winfo, message-summary, refer
Proxy-Authenticate: Digest realm="test.etellicom.com", 
nonce="eac7076b-4c13-4492-838c-14039cc2beb6", stale=true, algorithm=MD5, 
qop="auth"
Content-Length: 0


10:46:29.452446 IP 192.168.20.215.5062 > 192.168.20.214.5060
ACK sip:*591000 at test.etellicom.com SIP/2.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>;tag=ZS5Q6Xem0Umaj
Call-ID: 1766438446 at 192.168.20.215
CSeq: 2 ACK
Content-Length: 0


10:46:29.490390 IP 192.168.20.215.5062 > 192.168.20.214.5060
INVITE sip:*591000 at test.etellicom.com SIP/2.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK2079130033
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 3 INVITE
Contact: <sip:1001 at 192.168.20.215:5062>
Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", 
nonce="xxx", uri="sip:*591000 at test.etellicom.com", response="xxx", 
algorithm=MD5, cnonce="xxx", qop=auth, nc=00000001
Content-Type: application/sdp
Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, 
SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
Max-Forwards: 70
User-Agent: Yealink SIP-T38G 38.70.0.115
Supported: replaces
Allow-Events: talk,hold,conference,refer,check-sync
Content-Length: 310

SDP

10:46:29.490694 IP 192.168.20.214.5060 > 192.168.20.215.5062
SIP/2.0 100 trying -- your call is important to us
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK2079130033
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 3 INVITE
Server: kamailio (4.1.5 (x86_64/linux))
Content-Length: 0


10:46:29.490782 IP 192.168.20.214.5060 > 192.168.20.198.5080
INVITE sip:*591000 at test.etellicom.com SIP/2.0
Record-Route: <sip:192.168.20.214;lr=on>
Via: SIP/2.0/UDP 
192.168.20.214;branch=z9hG4bK84a8.289b7cd802ed6efd2f25721d6b8f29d6.0
Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK2079130033
From: "1001" <sip:1001 at test.etellicom.com>;tag=1860002040
To: <sip:*591000 at test.etellicom.com>
Call-ID: 1766438446 at 192.168.20.215
CSeq: 3 INVITE
Contact: <sip:1001 at 192.168.20.215:5062>
Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", 
nonce="xxx", uri="sip:*591000 at test.etellicom.com", response="xxx", 
algorithm=MD5, cnonce="xxx", qop=auth, nc=00000001
Content-Type: application/sdp
Allow: INVITE, INFO, PRACK, ACK, BYE, CANCEL, OPTIONS, NOTIFY, REGISTER, 
SUBSCRIBE, REFER, PUBLISH, UPDATE, MESSAGE
Max-Forwards: 69
User-Agent: Yealink SIP-T38G 38.70.0.115
Supported: replaces
Allow-Events: talk,hold,conference,refer,check-sync
Content-Length: 310

SDP




More information about the sr-users mailing list