[SR-Users] Workings of the kamailio dispatcher module
Grant Bagdasarian
GB at cm.nl
Tue Aug 6 15:48:32 CEST 2013
Ahh, right! Got it.
Thanks!
-----Original Message-----
From: sr-users-bounces at lists.sip-router.org [mailto:sr-users-bounces at lists.sip-router.org] On Behalf Of Alex Balashov
Sent: Tuesday, August 6, 2013 3:40 PM
To: sr-users at 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 at lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users
More information about the sr-users
mailing list