[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