[Users] Serial forking

Bogdan-Andrei Iancu bogdan at voice-system.ro
Tue Nov 29 22:20:27 CET 2005


Hi,

I just committed serial proper forking support into core - it was 
migrated from LCR module. I mean proper, since it has q value support 
and it can be used by any module without any inter-module dependencies.

The idea behind was to allow to all module that performs parallel 
forking to do also serial forking - exec, enum, registrar, etc.

There are two new script functions :
     *serialize_branches(n)* : it inherits the functionality of 
load_contacts() from LCR; gets all parallel branches and convert them 
into AVPs for serial forking; numerical parameter 'n' says if any 
previous AVP should be removed (if non-0) or not (if 0). Returns true is 
no error (even if no serialization happened).
     *next_branches()* : it inherits the functionality of 
next_contacts() from LCR; get (based on q value) the next contact(s) to 
be used in  sequential forking. Returns true only if a new contact was 
got to be used.

The AVP containing the branches is accessible only via alias - its ID is 
not configurable or visible; the alias (automatically exported by core) 
is "serial_branch" - it is visible from any module that uses the avp 
core aliasing system.


here are some examples of how to uses this new functionality:
    1) enum doing serial forking:
       {
          .....
          enum_query("e164.arpa.","voice");
          serialize_branches(1);
          if (!next_branches()) {
              sl_send_reply(...no enum found...);
              exit;
          }
          t_on_failure("1");
          t_relay();
       }

       failure_route[1] {
          if (next_branches()) {
              t_relay();
          }
       }

     2) same for registrar, just replace enum_query() with 
lookup("location"). NOTE that this will not work yet if there are nated 
contacts: there is no support to save also the flags and the dst_uri in 
order to perform proper nat traversal.


The code was not yet heavily tested, so any help on this is highly 
appreciated.
On the TO-DO list, related to this subject are:
    1) SRV lookup to use this functionality to provide any additional 
entries.
    2) full support for registrar for nat traversal
    3) remove load/next_contacts() from LCR (once this new functions 
prove to be stable).


regards,
bogdan





More information about the Users mailing list