[SR-Users] Dispatcher - failure_route to specific node

Federico Cabiddu federico.cabiddu at gmail.com
Tue Sep 16 07:55:07 CEST 2014


Hi,
looking at the trace, it seems to me that the 407 is not sent by Kamailio
but by the FS1 server ("User-Agent: IMX" in the 407, as for the 1st 407
sent by FS2), and that you are probably missing in the trace the messages
between Kamailio and FS1.
If this is the case you could either:
- disable the authentication in freeswitch if you don't need it
- store the custom header when receiving the 302 and use it to set $du upon
receiving the 2nd INVITE
For the latter you can have several solutions, I suggest you to have a a
look at the htable module. For example you could use it to store the key
USERID::CALLID with the value of your custom header and retrieve it when
you receive the authenticated INVITE from the client. Something like

sht(TABLE_NAME=>$fU::$ci) = $avp(imx-redirect);

to store it, and then

$avp(imx-redirect) = sht(TABLE_NAME=>$fU::$ci);

to retrieve it.

Hope this helps.

CHeers,

Federico


On Tue, Sep 16, 2014 at 3:28 AM, Nicholas Gill <nick at etellicom.com> wrote:

> 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
>
>
>
> _______________________________________________
> SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list
> sr-users at lists.sip-router.org
> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sip-router.org/pipermail/sr-users/attachments/20140916/7aa61b3d/attachment.html>


More information about the sr-users mailing list