[Users] Dispatcher module - Does it actually work?
Douglas Garstang
dgarstang at oneeighty.com
Fri Nov 25 05:40:04 CET 2005
Well, after 12 hours at this, my brain hurts.
Andreas, I've been trying to get the lcr module to work.
I'd really appreciate some pointers or help. :)
OpenSER is not attempting to contact the second gw. It just sits there forever trying to connect to the first. I even tried setting fr_inv_timer, but it has no effect. The openser.cfg is probably full of errors too, but I can definitely see it trying to connect to the first gw, and it never tries the second. I purposely shut Asterisk down on the first.
Here's my mysql database tables:
mysql> select * from lcr;
+--------+----------+--------+----------+
| prefix | from_uri | grp_id | priority |
+--------+----------+--------+----------+
| | % | 1 | 1 |
| | % | 2 | 2 |
+--------+----------+--------+----------+
2 rows in set (0.00 sec)
mysql> select * from gw;
+-----------+--------+-----------+------+------------+-----------+--------+
| gw_name | grp_id | ip_addr | port | uri_scheme | transport | prefix |
+-----------+--------+-----------+------+------------+-----------+--------+
| asterisk1 | 1 | 369797312 | 5060 | 1 | 1 | |
| asterisk2 | 2 | 386574528 | 5060 | 1 | 1 | |
+-----------+--------+-----------+------+------------+-----------+--------+
2 rows in set (0.00 sec)
And here's the relevant snippets from openser.cfg:
modparam("lcr","fr_inv_timer",1)
# Standard openser.cfg down to here
lookup("aliases");
if (!uri==myself) {
append_hf("P-hint: outbound alias\r\n");
route(1);
};
# I added the line below
route(2);
# More standard openser.cfg lines
# native SIP destinations are handled using our USRLOC DB
if (!lookup("location")) {
sl_send_reply("404", "Not Found");
exit;
};
append_hf("P-hint: usrloc applied\r\n");
#I added the route[2] block
route[2] {
if (!load_gws()) {
sl_send_reply("500", "Server Internal Error - Cannot load gateways");
xlog ("L_INFO","Not found");
return;
} else {
xlog ("L_INFO","Gateways loaded");
}
if (!next_gw()) {
sl_send_reply("503", "Service not available, no gateways found");
xlog ("L_INFO","No more gateways");
return;
} else {
xlog ("L_INFO","Found a gateway");
}
xlog ("L_INFO","Calling t_relay");
t_on_failure("2");
t_relay();
exit;
}
failure_route[2]
{
if(method == "INVITE" && t_check_status("408|500|503"))
{
if (!next_gw())
{
t_reply("503", "Service not available, no more gateways");
return;
}
t_on_failure("2");
t_relay();
}
}
-----Original Message-----
From: Andreas Granig [mailto:andreas.granig at inode.info]
Sent: Thu 11/24/2005 5:24 PM
To: Douglas Garstang
Cc: users at openser.org
Subject: Re: [Users] Dispatcher module - Does it actually work?
Douglas Garstang wrote:
> Andy, no. No one has suggested using the lcr module, and I wasn't even aware of it until you mentioned it just now. I took a look at the module docs, they're way beyond my current understanding. it. I'll have to do some reading. Does it allow you to try another route when one is not responding?
Yes. You have to define a set of destinations which you can load in the
script using load_gws(), and every call to next_gw() sets the ip/port of
another destination as ruri, until no more destinations are available.
You can find an example here:
http://linguin.org/ser/lcr_cap/lcr_config_example.txt
It's for a lcr-version which I have extended a little to be able to
group destinations according to their capabilities
(http://linguin.org/ser.php#lcr-cap), but you should at least get the
idea on how to do it with the vanilla lcr module (just leave out the
argument in load_gws()).
Andy
More information about the Users
mailing list