[SR-Dev] new feature: event_route

Daniel-Constantin Mierla miconda at gmail.com
Wed May 20 13:53:38 CEST 2009


Hello,

I just introduced support for a new type of route in configuration file 
- event_route. The prototype for it is:

event_route[groupid:eventid] {
    [actions]
}

The main purpose for it is to allow modules (and core) to be able to 
execute code written in configuration file when a specific event 
happens, without altering the config grammar. Also, in short term, the 
modules that fire events should be able to impose what type of actions 
can be used in the respective event_route - now functions allowed in 
request route can be used.

First module that uses this feature is htable, executing an event route 
only once, when all modules were initialized. A typical use case is to 
initialize some items in a hash table. Example:

modparam("htable", "htable", "a=>size=4;")

event_route[htable:mod-init] {
  $sht(a=>calls-to::10.10.10.10) = 0;
  $sht(a=>max-calls-to::10.10.10.10) = 100;
}

route {
  if(is_method("INVITE") && !has_totag())
  {
    switch($rd) {
      case "10.10.10.10":
        lock("calls-to::10.10.10.10");
        $sht(a=>calls-to::10.10.10.10) =
            $sht(a=>calls-to::10.10.10.10) + 1;
        unlock("calls-to::10.10.10.10");
        if($sht(a=>calls-to::10.10.10.10)>$sht(a=>max-calls-to::10.10.10.10))
        {
           sl_send_reply("500", "To many calls to .10");
           exit;
        }
      break;
      ...
    }
  }
}

This system will be used to get kamailio's error_route and local_route 
functionalities. Other cases I have in mind now are:
- auto-expired dialog route introduced in kamailio 1.5.0 to become 
event_route[dialog:auto-expired]
- call event route when a location record has expired on timer: 
event_route[usrloc:auto-expired] making available via PV details of 
expired contact
- rtimer module routes to become event routes

Cheers,
Daniel

-- 
Daniel-Constantin Mierla
http://www.asipto.com/




More information about the sr-dev mailing list