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@test.etellicom.com SIP/2.0 Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947 From: "1001" sip:1001@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@192.168.20.215 CSeq: 1 INVITE Contact: sip:1001@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@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@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@192.168.20.215 CSeq: 1 INVITE Contact: sip:1001@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=Ke2rvve07SK3N Call-ID: 1766438446@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@test.etellicom.com SIP/2.0 Via: SIP/2.0/UDP 192.168.20.214;branch=z9hG4bKa4a8.9a165b4901cf1602b3146c7f0bf0a191.0 From: "1001" sip:1001@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=Ke2rvve07SK3N Call-ID: 1766438446@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=Ke2rvve07SK3N Call-ID: 1766438446@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@test.etellicom.com SIP/2.0 Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK1598556947 From: "1001" sip:1001@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=Ke2rvve07SK3N Call-ID: 1766438446@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@test.etellicom.com SIP/2.0 Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902 From: "1001" sip:1001@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@192.168.20.215 CSeq: 2 INVITE Contact: sip:1001@192.168.20.215:5062 Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", nonce="xxx", uri="sip:*591000@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@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@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@192.168.20.215 CSeq: 2 INVITE Contact: sip:1001@192.168.20.215:5062 Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", nonce="xxx", uri="sip:*591000@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=mQUHyQZ3429NH Call-ID: 1766438446@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@test.etellicom.com SIP/2.0 Via: SIP/2.0/UDP 192.168.20.214;branch=z9hG4bK74a8.d3d3ad8bb9b1c73c12e16cdab447472e.0 From: "1001" sip:1001@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=mQUHyQZ3429NH Call-ID: 1766438446@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@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=ZS5Q6Xem0Umaj Call-ID: 1766438446@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@test.etellicom.com SIP/2.0 Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK416062902 From: "1001" sip:1001@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com;tag=ZS5Q6Xem0Umaj Call-ID: 1766438446@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@test.etellicom.com SIP/2.0 Via: SIP/2.0/UDP 192.168.20.215:5062;branch=z9hG4bK2079130033 From: "1001" sip:1001@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@192.168.20.215 CSeq: 3 INVITE Contact: sip:1001@192.168.20.215:5062 Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", nonce="xxx", uri="sip:*591000@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@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@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@test.etellicom.com;tag=1860002040 To: sip:*591000@test.etellicom.com Call-ID: 1766438446@192.168.20.215 CSeq: 3 INVITE Contact: sip:1001@192.168.20.215:5062 Proxy-Authorization: Digest username="1001", realm="test.etellicom.com", nonce="xxx", uri="sip:*591000@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