Differences
This shows you the differences between two versions of the page.
old-content:t_on_branch_branch_route_comments [2006/06/08 02:00] |
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(" | ||
+ | }; | ||
+ | } | ||
+ | |||
+ | branch_route sections can be activated using t_on_branch, | ||
+ | |||
+ | t_on_branch(" | ||
+ | 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 | ||
+ | | ||
+ | | ||
+ | ----> SER ----------+-*-----> | ||
+ | | ||
+ | | ||
+ | |||
+ | * - 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(" | ||
+ | append_branch(" | ||
+ | append_branch(" | ||
+ | t_on_branch(" | ||
+ | if (!t_relay()) { | ||
+ | sl_reply_error(); | ||
+ | }; | ||
+ | } | ||
+ | |||
+ | branch_route[1] | ||
+ | { | ||
+ | if (uri == "sip:a at iptel.org" | ||
+ | append_hf(" | ||
+ | }; | ||
+ | xdbg(" | ||
+ | } | ||
+ | " | ||