Module: sip-router
Branch: master
Commit: 82303dfad79c601767bb8e1a115fd30d1fb3a282
URL:
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=82303df…
Author: Peter Dunkley <peter.dunkley(a)crocodile-rcs.com>
Committer: Peter Dunkley <peter.dunkley(a)crocodile-rcs.com>
Date: Tue Jan 8 11:27:11 2013 +0000
modules_k/outbound: updated documentation
- Fixed some mistakes in the Edge Proxy example
- Filled in more detail in the Registrar example
---
modules_k/outbound/README | 62 +++++++++++++++++++++++++++-
modules_k/outbound/doc/outbound_admin.xml | 62 +++++++++++++++++++++++++++-
2 files changed, 118 insertions(+), 6 deletions(-)
diff --git a/modules_k/outbound/README b/modules_k/outbound/README
index ff5c195..af8fb1f 100644
--- a/modules_k/outbound/README
+++ b/modules_k/outbound/README
@@ -140,6 +140,8 @@ route {
# must be outbound routed
}
}
+
+ t_on_failure("FAIL_OUTBOUND");
route(RELAY);
} else if (is_method("REGISTER")) {
add_path();
@@ -151,7 +153,6 @@ route {
}
route[RELAY] {
- t_on_failure("FAIL_OUTBOUND");
if (!t_relay()) {
sl_send_reply("430", "Flow Failed");
}
@@ -193,20 +194,75 @@ onreply_route {
if ($(hdr(Require)[*])=~"outbound")
insert_hf("Flow-Timer: FLOW_TIMER\r\n",
"Call-ID");
}
+
+...
}
-failure_route[REPLY_OUTBOUND] {
+failure_route[FAIL_OUTBOUND] {
if (t_branch_timeout() || !t_branch_replied()) {
send_reply("430", "Flow Failed");
}
}
+...
Example 1.3. Registrar Configuration
...
+loadmodule "tm.so"
+...
loadmodule "registrar.so"
...
+modparam("tm", "contacts_avp", "tm_contacts")
+modparam("tm", "contact_flows_avp", "tm_contact_flows")
+...
+modparam("registrar", "use_path", 1)
+modparam("registrar", "path_mode", 2)
modparam("registrar", "outbound_mode", 2)
-### TBD
+...
+route[LOCATION] {
+...
+ if (!lookup("location")) {
+ $var(rc) = $rc;
+ route(TOVOICEMAIL);
+ t_newtran();
+ switch ($var(rc)) {
+ case -1:
+ case -3:
+ send_reply("404", "Not Found");
+ exit;
+ case -2:
+ send_reply("405", "Method Not
Allowed");
+ exit;
+ }
+ }
+
+ if (!t_load_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+
+ if (!t_next_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+
+ t_on_failure(FAIL_OUTBOUND);
+...
+}
+...
+failure_route[FAIL_OUTBOUND] {
+ if (t_check_status("408|430")) {
+ if (!t_next_contact_flows() && !t_next_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+ } else if (!t_next_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+
+ t_on_failure(FAIL_OUTBOUND);
+ route[RELAY];
+}
...
2. Dependencies
diff --git a/modules_k/outbound/doc/outbound_admin.xml
b/modules_k/outbound/doc/outbound_admin.xml
index 8f0b057..28c91d0 100644
--- a/modules_k/outbound/doc/outbound_admin.xml
+++ b/modules_k/outbound/doc/outbound_admin.xml
@@ -95,6 +95,8 @@ route {
# must be outbound routed
}
}
+
+ t_on_failure("FAIL_OUTBOUND");
route(RELAY);
} else if (is_method("REGISTER")) {
add_path();
@@ -106,7 +108,6 @@ route {
}
route[RELAY] {
- t_on_failure("FAIL_OUTBOUND");
if (!t_relay()) {
sl_send_reply("430", "Flow Failed");
}
@@ -148,23 +149,78 @@ onreply_route {
if ($(hdr(Require)[*])=~"outbound")
insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID");
}
+
+...
}
-failure_route[REPLY_OUTBOUND] {
+failure_route[FAIL_OUTBOUND] {
if (t_branch_timeout() || !t_branch_replied()) {
send_reply("430", "Flow Failed");
}
}
+...
]]></programlisting>
</example>
<example>
<title>Registrar Configuration</title>
<programlisting><![CDATA[
...
+loadmodule "tm.so"
+...
loadmodule "registrar.so"
...
+modparam("tm", "contacts_avp", "tm_contacts")
+modparam("tm", "contact_flows_avp", "tm_contact_flows")
+...
+modparam("registrar", "use_path", 1)
+modparam("registrar", "path_mode", 2)
modparam("registrar", "outbound_mode", 2)
-### TBD
+...
+route[LOCATION] {
+...
+ if (!lookup("location")) {
+ $var(rc) = $rc;
+ route(TOVOICEMAIL);
+ t_newtran();
+ switch ($var(rc)) {
+ case -1:
+ case -3:
+ send_reply("404", "Not Found");
+ exit;
+ case -2:
+ send_reply("405", "Method Not Allowed");
+ exit;
+ }
+ }
+
+ if (!t_load_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+
+ if (!t_next_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+
+ t_on_failure(FAIL_OUTBOUND);
+...
+}
+...
+failure_route[FAIL_OUTBOUND] {
+ if (t_check_status("408|430")) {
+ if (!t_next_contact_flows() && !t_next_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+ } else if (!t_next_contacts()) {
+ send_reply("500", "Server Internal Error");
+ exit;
+ }
+
+ t_on_failure(FAIL_OUTBOUND);
+ route[RELAY];
+}
...
]]></programlisting>
</example>