Ahh, right! Got it. Thanks!
-----Original Message----- From: sr-users-boun...@lists.sip-router.org [mailto:sr-users-boun...@lists.sip-router.org] On Behalf Of Alex Balashov Sent: Tuesday, August 6, 2013 3:40 PM To: sr-users@lists.sip-router.org Subject: Re: [SR-Users] Workings of the kamailio dispatcher module On 08/06/2013 09:00 AM, Grant Bagdasarian wrote: > Hello, > > Consider the following Kamailio script: > > route { > > .... > > route(DISPATCH); > > route(RELAY); > > } > > route[DISPATCH] { > > ds_select_domain("1", "8"); > > return; > > } > > Dispatcher Table > > SetID > > > > Destination > > 1 > > > > 192.168.1.10 > > 1 > > > > 192.168.1.11 > > Algorithm 8 uses the first destination, but if it's not available, it > uses the next one. > > Does the ds_select_domain function send the SIP request to the first > destination or is it the responsibility of the RELAY route to do this? > I believe it's the latter, according to the documentation. All the ds_select_domain() function does is change the domain part of the Request URI ($rd). It's still up to you to take that modified SIP request, perform any additional processing, and relay/forward it as desired. When you do this, t_relay() will consume the domain part of the request URI, in the absence of an overriding destination set ($du, as would be the case if you used ds_select_dst()). > When Kamailio can't reach the first destination, how does it > internally handle the failover? Because once the SIP request has been > relayed to the host, the script doesn't have any instructions anymore. You must arm a failure_route before t_relay(), and call ds_select_domain() again to advance through the gateways in the dispatcher set. Example: route[DISPATCHER_INITIAL] { xlog("L_INFO", "[R-DISPATCHER-INITIAL:$ci] Entering dispatcher selection route\n"); if(!ds_select_domain("1", "4")) { # This should only happen if the route set is empty. sl_send_reply("503", "Out of Gateways"); xlog("L_ERR", "[R-DISPATCHER-INITIAL:$ci] !> " "No gateways available!\n"); exit; } xlog("L_INFO", "[R-DISPATCHER-INITIAL:$ci] -> " "Selected gateway: $rd:$rp\n"); t_on_failure("DISPATCHER_ROLLOVER"); t_relay() etc blah blah; } failure_route[DISPATCHER_ROLLOVER] { xlog("L_INFO", "[R-DISPATCHER-ROLLOVER:$ci] " "Relay to dispatcher-selected gateway failed\n"); if(t_is_expired()) { xlog("L_INFO", "[R-DISPATCHER-ROLLOVER:$ci] !> " "Transaction expired - aborting\n"); exit; } if(t_is_canceled()) { xlog("L_INFO", "[R-DISPATCHER-ROLLOVER:$ci] !> " "Transaction cancelled - aborting\n"); exit; } if(!ds_next_domain()) { # This should happen when we are out of gateways/have tried # the last one in the route set. xlog("L_ERR", "[R-DISPATCHER-ROLLOVER:$ci] !> " "No more gateways in route set\n"); t_reply("503", "Out of gateways"); exit; } xlog("L_INFO", "[R-DISPATCHER-ROLLOVER:$ci] -> " "Attempting relay to new gateway: $rd:$rp\n"); t_on_failure("DISPATCHER_ROLLOVER"); t_relay(); } -- Alex -- Alex Balashov - Principal Evariste Systems LLC 235 E Ponce de Leon Ave Suite 106 Decatur, GA 30030 United States Tel: +1-678-954-0670 Web: http://www.evaristesys.com/, http://www.alexbalashov.com/ _______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users _______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users