Module: sip-router Branch: pd/outbound Commit: 9f636841675f9cdd5a4baf768784564be71660b0 URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=9f636841...
Author: Peter Dunkley peter.dunkley@crocodile-rcs.com Committer: Peter Dunkley peter.dunkley@crocodile-rcs.com Date: Sun Jan 6 19:32:45 2013 +0000
modules_k/outbound: Updates to outbound module documentation
---
modules_k/outbound/README | 72 +++++++++++++++++++++++++++-- modules_k/outbound/doc/outbound_admin.xml | 72 +++++++++++++++++++++++++++-- 2 files changed, 136 insertions(+), 8 deletions(-)
diff --git a/modules_k/outbound/README b/modules_k/outbound/README index 8a98e0c..d1d920b 100644 --- a/modules_k/outbound/README +++ b/modules_k/outbound/README @@ -117,12 +117,70 @@ modparam("websocket", "keepalive_timeout", FLOW_TIMER+5) modparam("outbound", "flow_token_key", "!!!Kamailio rocks!!!") ... route { -... - if (is_method("INVITE|SUBSCRIBE")) + route(REQINIT); + ... + t_check_trans(); + + if (is_method("INVITE|SUBSCRIBE")) { record_route(); - else if (is_method("REGISTER")) + + if ($rU==$null) { + sl_send_reply("484", "Address Incomplete"); + exit; + } + + if (!loose_route()) { + switch($rc) { + case -2: + # Flow-token has been tampered with + sl_send_reply("403", "Forbidden"); + exit; + case -1: + # Handle -1 here if all dialog forming requests + # must be outbound routed + } + } + route(RELAY); + } else if (is_method("REGISTER")) { add_path(); + if (!t_relay("### Registrar ###")) { + sl_reply_error(); + } + exit; + } +} + +route[RELAY] { + t_on_failure("FAIL_OUTBOUND"); + if (!t_relay()) { + sl_send_reply("430", "Flow Failed"); + } + exit; +} ... +route[WITHINDLG] { + if (has_totag()) { + if (!loose_route()) { + switch($rc) { + case -2: + sl_send_reply("403", "Forbidden"); + exit; + case -1: + if (is_method("ACK")) { + if (t_check_trans()) { + t_relay(); + exit; + } else { + exit; + } + } + sl_send_reply("404", "Not Found"); + } + } else { + route(RELAY); + } + exit; + } } ... onreply_route { @@ -137,11 +195,17 @@ onreply_route { } }
+failure_route[REPLY_OUTBOUND] { + if (t_branch_timeout() || !t_branch_replied()) { + send_reply("430", "Flow Failed"); + } +} + Example 1.3. Registrar Configuration ... loadmodule "registrar.so" ... -modparam("registrar", "outbound_mode", 2) +TBD ...
2. Dependencies diff --git a/modules_k/outbound/doc/outbound_admin.xml b/modules_k/outbound/doc/outbound_admin.xml index 992c0c4..97e718d 100644 --- a/modules_k/outbound/doc/outbound_admin.xml +++ b/modules_k/outbound/doc/outbound_admin.xml @@ -72,12 +72,70 @@ modparam("websocket", "keepalive_timeout", FLOW_TIMER+5) modparam("outbound", "flow_token_key", "!!!Kamailio rocks!!!") ... route { -... - if (is_method("INVITE|SUBSCRIBE")) + route(REQINIT); + ... + t_check_trans(); + + if (is_method("INVITE|SUBSCRIBE")) { record_route(); - else if (is_method("REGISTER")) + + if ($rU==$null) { + sl_send_reply("484", "Address Incomplete"); + exit; + } + + if (!loose_route()) { + switch($rc) { + case -2: + # Flow-token has been tampered with + sl_send_reply("403", "Forbidden"); + exit; + case -1: + # Handle -1 here if all dialog forming requests + # must be outbound routed + } + } + route(RELAY); + } else if (is_method("REGISTER")) { add_path(); + if (!t_relay("### Registrar ###")) { + sl_reply_error(); + } + exit; + } +} + +route[RELAY] { + t_on_failure("FAIL_OUTBOUND"); + if (!t_relay()) { + sl_send_reply("430", "Flow Failed"); + } + exit; +} ... +route[WITHINDLG] { + if (has_totag()) { + if (!loose_route()) { + switch($rc) { + case -2: + sl_send_reply("403", "Forbidden"); + exit; + case -1: + if (is_method("ACK")) { + if (t_check_trans()) { + t_relay(); + exit; + } else { + exit; + } + } + sl_send_reply("404", "Not Found"); + } + } else { + route(RELAY); + } + exit; + } } ... onreply_route { @@ -91,6 +149,12 @@ onreply_route { insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID"); } } + +failure_route[REPLY_OUTBOUND] { + if (t_branch_timeout() || !t_branch_replied()) { + send_reply("430", "Flow Failed"); + } +} ]]></programlisting> </example> <example> @@ -99,7 +163,7 @@ onreply_route { ... loadmodule "registrar.so" ... -modparam("registrar", "outbound_mode", 2) +TBD ... ]]></programlisting> </example>