Module: sip-router
Branch: master
Commit: 4f68c5626530a1bfe2c7ce72eb3de24b3e7e73dc
URL:    
http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=4f68c5626530a1bfe2c7ce72eb3de24b3e7e73dc

Author: Peter Dunkley <peter.dunk...@crocodile-rcs.com>
Committer: Peter Dunkley <peter.dunk...@crocodile-rcs.com>
Date:   Wed Apr 24 21:06:36 2013 +0100

examples: added outbound edge proxy and registrar example configurations

---

 examples/outbound/edge.cfg      |  172 +++++++++++++++++++++++++++++++++
 examples/outbound/registrar.cfg |  202 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 374 insertions(+), 0 deletions(-)

diff --git a/examples/outbound/edge.cfg b/examples/outbound/edge.cfg
new file mode 100644
index 0000000..2bdf93b
--- /dev/null
+++ b/examples/outbound/edge.cfg
@@ -0,0 +1,172 @@
+#!KAMAILIO
+#
+# Edge proxy configuration
+#
+
+#!substdef "!REGISTRAR_IP!a.b.c.d!g"
+#!substdef "!REGISTRAR_PORT!5060!g"
+#!substdef "!FLOW_TIMER!20!g"
+
+####### Global Parameters #########
+
+debug=2
+log_stderror=no
+log_facility=LOG_LOCAL0
+fork=yes
+children=4
+alias="example.com"
+mpath="/usr/lib64/kamailio/modules"
+tcp_connection_lifetime=30 # FLOW_TIMER + 10
+force_rport=yes
+
+
+####### Modules Section ########
+
+loadmodule "tm.so"
+loadmodule "sl.so"
+loadmodule "outbound.so"
+loadmodule "rr.so"
+loadmodule "path.so"
+loadmodule "pv.so"
+loadmodule "maxfwd.so"
+loadmodule "xlog.so"
+loadmodule "sanity.so"
+loadmodule "ctl.so"
+loadmodule "mi_rpc.so"
+loadmodule "mi_fifo.so"
+loadmodule "textops.so"
+loadmodule "siputils.so"
+loadmodule "stun.so"
+
+# ----------------- setting module-specific parameters ---------------
+
+# ----- mi_fifo params -----
+modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
+
+# ----- tm params -----
+modparam("tm", "failure_reply_mode", 3)
+
+# ----- rr params -----
+modparam("rr", "append_fromtag", 0)
+
+
+####### Routing Logic ########
+
+request_route {
+       route(REQINIT);
+
+       if (is_method("CANCEL")) {
+               if (t_check_trans()) {
+                       route(RELAY);
+               }
+               exit;
+       }
+
+       route(WITHINDLG);
+
+       t_check_trans();
+
+       if (is_method("REGISTER")) {
+               remove_hf("Route");
+               add_path();
+               $du = "sip:REGISTRAR_IP:REGISTRAR_PORT";
+       } else {
+               if (is_method("INVITE|SUBSCRIBE"))
+                       record_route();
+
+               if (@via[2] == "") {
+                       # From client so route to registrar...
+
+                       if ($rU == $null) {
+                               sl_send_reply("484", "Address Incomplete");
+                               exit;
+                       }
+                       remove_hf("Route");
+                       $du = "sip:REGISTRAR_IP:REGISTRAR_PORT";
+               } else {
+                       # From registrar so route using "Route:" headers...
+
+                       if (!loose_route()) {
+                               switch($rc) {
+                               case -2:
+                                       sl_send_reply("403", "Forbidden");
+                                       exit;
+                               default:
+                                       xlog("L_ERR", "in request_route\n");
+                                       sl_reply_error();
+                                       exit;
+                               }
+                       }
+
+                       t_on_failure("FAIL_OUTBOUND");
+               }
+       }
+
+       route(RELAY);
+}
+
+route[RELAY] {
+       if (!t_relay()) {
+               sl_reply_error();
+       }
+       exit;
+}
+
+route[REQINIT] {
+       if (!mf_process_maxfwd_header("10")) {
+               sl_send_reply("483","Too Many Hops");
+               exit;
+       }
+
+       if(!sanity_check("1511", "7"))
+       {
+               xlog("Malformed SIP message from $si:$sp\n");
+               exit;
+       }
+}
+
+route[WITHINDLG] {
+       if (has_totag()) {
+               if (!loose_route()) {
+                       switch($rc) {
+                       case -2:
+                               sl_send_reply("403", "Forbidden");
+                               exit;
+                       default:
+                               if (is_method("ACK")) {
+                                       if ( t_check_trans() ) {
+                                               route(RELAY);
+                                               exit;
+                                       } else {
+                                               exit;
+                                       }
+                               }
+                               sl_send_reply("404","Not Found");
+                       }
+               } else {
+                       if (is_method("NOTIFY")) {
+                               record_route();
+                       }
+                       route(RELAY);
+               }
+               exit;
+       }
+}
+
+onreply_route {
+       if (!t_check_trans()) {
+               drop;
+       }
+
+       if ($rm == "REGISTER" && $rs >= 200 && $rs <= 299) {
+               remove_hf("Flow-Timer");
+               if ($(hdr(Require)[*])=~"outbound")
+                       insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID");
+       }
+}
+
+failure_route[FAIL_OUTBOUND] {
+       if (t_branch_timeout() || !t_branch_replied()) {
+               send_reply("430", "Flow Failed");
+       }
+}
diff --git a/examples/outbound/registrar.cfg b/examples/outbound/registrar.cfg
new file mode 100644
index 0000000..db920fa
--- /dev/null
+++ b/examples/outbound/registrar.cfg
@@ -0,0 +1,202 @@
+#!KAMAILIO
+#
+# Registrar configuration
+#
+
+
+####### Global Parameters #########
+
+debug=2
+log_stderror=no
+log_facility=LOG_LOCAL0
+fork=yes
+children=4
+alias="example.com"
+mpath="/usr/lib64/kamailio/modules"
+
+
+####### Modules Section ########
+
+loadmodule "tm.so"
+loadmodule "tmx.so"
+loadmodule "sl.so"
+loadmodule "rr.so"
+loadmodule "pv.so"
+loadmodule "maxfwd.so"
+loadmodule "xlog.so"
+loadmodule "sanity.so"
+loadmodule "ctl.so"
+loadmodule "mi_rpc.so"
+loadmodule "mi_fifo.so"
+loadmodule "textops.so"
+loadmodule "siputils.so"
+loadmodule "usrloc.so"
+loadmodule "registrar.so"
+
+# ----------------- setting module-specific parameters ---------------
+
+# ----- mi_fifo params -----
+modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo")
+
+
+# ----- tm params -----
+modparam("tm", "failure_reply_mode", 3)
+modparam("tm", "restart_fr_on_each_reply", 0)
+modparam("tm", "contact_flows_avp", "tm_contact_flows")
+modparam("tm", "contacts_avp", "tm_contacts")
+
+# ----- rr params -----
+modparam("rr", "append_fromtag", 0)
+
+# ----- registrar params -----
+modparam("registrar", "use_path", 1)
+modparam("registrar", "gruu_enabled", 1)
+modparam("registrar", "outbound_mode", 1)
+
+
+####### Routing Logic ########
+
+request_route {
+       route(REQINIT);
+
+       if (is_method("CANCEL")) {
+               if (t_check_trans()) {
+                       route(RELAY);
+               }
+               exit;
+       }
+
+       route(WITHINDLG);
+
+       t_check_trans();
+
+       remove_hf("Route");
+       if (is_method("INVITE|SUBSCRIBE"))
+               record_route();
+
+       route(REGISTRAR);
+
+       if ($rU==$null) {
+               xlog("L_INFO", "Address Incomplete\n");
+               send_reply("484","Address Incomplete");
+               exit;
+       }
+
+       route(LOCATION);
+}
+
+
+route[RELAY] {
+       if (!t_relay()) {
+               xlog("L_ERR", "t_relay() failed\n");
+               sl_reply_error();
+       }
+       exit;
+}
+
+route[REQINIT] {
+       if (!mf_process_maxfwd_header("10")) {
+               xlog("L_INFO", "Too Many Hops\n");
+               send_reply("483","Too Many Hops");
+               exit;
+       }
+
+       if(!sanity_check("1511", "7"))
+       {
+               xlog("Malformed SIP message from $si:$sp\n");
+               exit;
+       }
+}
+
+route[WITHINDLG] {
+       if (has_totag()) {
+               if (loose_route()) {
+                       if (is_method("NOTIFY")) {
+                               record_route();
+                       }
+                       route(RELAY);
+               } else {
+                       if (is_method("ACK")) {
+                               if (t_check_trans()) {
+                                       route(RELAY);
+                                       exit;
+                               } else {
+                                       exit;
+                               }
+                       }
+                       xlog("L_INFO", "Not Found");
+                       send_reply("404","Not Found");
+               }
+               exit;
+       }
+}
+
+route[REGISTRAR] {
+       if (is_method("REGISTER"))
+       {
+               if (!save("location")) {
+                       xlog("L_ERR", "Unable to save location\n");
+                       sl_reply_error();
+               }
+               exit;
+       }
+}
+
+route[LOCATION] {
+       if (!lookup("location")) {
+               $var(rc) = $rc;
+               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() || !t_next_contacts()) {
+               xlog("L_ERR", "t_(load|next)_contacts() failed\n");
+               sl_reply_error();
+               exit;
+       }
+
+       t_on_failure("FAIL_TRANSACTION");
+       t_on_branch_failure("FAIL-BRANCH");
+       route(RELAY);
+       exit;
+}
+
+onreply_route {
+       if (!t_check_trans()) {
+               drop;
+       }
+}
+
+failure_route[FAIL_TRANSACTION] {
+       if (!t_check_status("6[0-9][0-9]")) {
+               if (t_next_contacts()) {
+                       t_relay();
+                       exit;
+               }
+       }
+
+       if (t_check_status("430")) {
+               t_reply("480", "Temporarily Unavailable");
+               exit;
+       }
+}
+
+event_route[tm:branch-failure:FAIL-BRANCH] {
+       if (t_check_status("403|430")
+                       || (t_branch_timeout() && !t_branch_replied())) {
+               unregister("location", "$tu", "$T_reply_ruid");
+
+               if (t_next_contact_flow()) {
+                       t_on_branch_failure("FAIL-BRANCH");
+                       t_relay();
+               }
+       }
+}


_______________________________________________
sr-dev mailing list
sr-dev@lists.sip-router.org
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to