[OpenSIPS-Devel] [NEW] Branch manipulation in failure route

Bogdan-Andrei Iancu bogdan at voice-system.ro
Mon Jan 12 16:33:08 CET 2009


Hi,

There are some recent change in OpenSIPS about how the call branches are 
handled in the failure route. These changes tries to simplify the usage 
and understanding of the OpenSIPS scripting by unifying the branch logic 
between request and failure routes and also between all the modules 
using branches in failure route.

Former problems:

1)  in request route, the first destination is in RURI and the 
additional destination are filled in as branches; but in failure route 
all the destinations were filled in as branched - this discrepancy made 
the failure route understanding more difficult and also the scripting 
itself more complex as you need different behaviours in the 2 routes

2) modules operating with branches in failure routes implemented 2 
different approaches: (a) fill in the new destination directly as branch 
or (b) fill in the new destination as RURI and expect the script writer 
to do an append_branch before t_relay; This was confusing as each module 
had its own approach.


Current behaviour:

1) both in request and failure route, the destinations are now filled in 
in RURI + branches - in it the same logic (as previously for request 
route). So, there is no need for the append_branch() in failure route, 
only if you have more than one branch

Ex:
Previously:
route{
    seturi("sip:nam1 at host.com");
    t_on_failure("1");
    t_relay();
}

failure_route[1] {
    seturi("sip:nam2 at host.com");
    append_branch();
    t_relay();  
}

Current format:
route{
    seturi("sip:nam1 at host.com");
    t_on_failure("1");
    t_relay();
}

failure_route[1] {
    seturi("sip:nam2 at host.com");
    t_relay();  
}

Note, there is no need for the append_branch() for using the RURI in 
failure route.



2) all modules are filling the RURI and branches, as standard behaviour. 
Changed modules: cpl-c, dispatcher, lcr, uac_redirect. Instead of 
directly pushing the new destination to branch, the destination goes to 
RURI, it is expose to script changes and then automatically used by t_relay.

Actually for lcr and dispatcher module, nothing have to be changed in 
failure route logic as the two changes (in t_relay() and modules) are 
complementary. The only difference here is that the new destination is 
exposed via RURI in script, so you can do script manipulation on it 
before relay.


Best regards,
Bogdan

PS: for any questions or doubts on these changes, please let me know ;)



More information about the Devel mailing list