– Kamailio SIP Server –

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

old-content:t_on_branch_branch_route_comments [2006/06/08 02:00] (current)
Line 1: Line 1:
 +Jan Janak wrote:
 +
 +"The latest development version of SER has support for branch_route
 +sections and tm module contains new function called t_on_branch.
 +
 +The branch_route section is a section that can be defined in the
 +configuration file, just like failure_route or onreply_route sections:
 +
 +branch_route[1]
 +{
 + if (uri == "sip:a at iptel.org"​) {
 + append_hf("​P-RURI:​ sip:a at iptel.org\r\n"​);​
 + };
 +}
 +
 +branch_route sections can be activated using t_on_branch,​ for example:
 +
 +t_on_branch("​1"​);​
 +t_relay();
 +break;
 +
 +branch_route sections are executed for each downstream branch. In other
 +words, if SER forks a message to 3 destinations then the branch_route
 +section will be executed 3 times:
 +
 +                 a
 +             ​+-*----->​
 +             ​| ​  b
 +----> SER ----------+-*----->​
 +             ​| ​  c
 +             ​+-*----->​
 +
 +* - branch_route will be executed here.
 +
 +It is not possible to stop the processing or generate a reply in
 +branch_route sections at the moment, you can only do last-minute
 +modifications to the SIP message and it will be forwarded automatically
 +once branch_route section finishes.
 +
 +branch_route sections can be used to perform actions that are branch
 +specific, for examply you can add a header field to a message only in a
 +particular branch and leave other branches unmodified, based on the
 +Request-URI.
 +
 +In the future we could implement better NAT traversal (where RTP proxy
 +will only be applied to branches where it is really needed), proper PSTN
 +gateway checks, and so on.
 +
 +Attached is a short example file that demonstrates the use of
 +t_on_branch and branch_route sections.
 +
 +  Jan.
 +
 +route 
 +{
 + # send it out now; use stateful forwarding as it works reliably
 + # even for UDP2TCP
 +
 + xdbg("​Appending branches\n"​);​
 + append_branch("​sip:​a at iptel.org"​);​
 + append_branch("​sip:​b at iptel.org"​);​
 + t_on_branch("​1"​);​
 + if (!t_relay()) {
 + sl_reply_error();​
 + };
 +}
 +
 +branch_route[1]
 +{
 + if (uri == "sip:a at iptel.org"​) {
 + append_hf("​Test:​ foo\r\n"​);​
 + };
 + xdbg("​Executing branch %ru\n"​);​
 +}
 +"