[sr-dev] git:master: kamailio.cfg: added two new define options

Daniel-Constantin Mierla miconda at gmail.com
Wed May 25 23:46:33 CEST 2011


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date:   Wed May 25 23:44:22 2011 +0200

kamailio.cfg: added two new define options

- WITH_BLOCK3XX - block 3xx replies
- WITH_VOICEMAIL - redirect call to voicemail server on not found, busy
  or no answer

---

 etc/kamailio.cfg |   81 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 62 insertions(+), 19 deletions(-)

diff --git a/etc/kamailio.cfg b/etc/kamailio.cfg
index decfd0f..7a545db 100644
--- a/etc/kamailio.cfg
+++ b/etc/kamailio.cfg
@@ -68,6 +68,14 @@
 #       block if more than 16 requests in 2 seconds and ban for 300 seconds)
 #     - define WITH_ANTIFLOOD
 #
+# *** To block 3XX redirect replies execute:
+#     - define WITH_BLOCK3XX
+#
+# *** To enable VoiceMail routing execute:
+#     - define WITH_VOICEMAIL
+#     - set the value of voicemail.srv_ip
+#     - adjust the value of voicemail.srv_port
+#
 # *** To enhance accounting execute:
 #     - enable mysql
 #     - define WITH_ACCDB
@@ -170,6 +178,13 @@ enable_tls=yes
 pstn.gw_ip = "" desc "PSTN GW Address"
 #!endif
 
+#!ifdef WITH_VOICEMAIL
+# VoiceMail Routing on offline, busy or no answer
+#
+# - by default Voicemail server IP is empty to avoid misrouting
+voicemail.srv_ip = "" desc "VoiceMail IP Address"
+voicemail.srv_port = "5060" desc "VoiceMail Port"
+#!endif
 
 ####### Modules Section ########
 
@@ -586,15 +601,18 @@ route[LOCATION] {
 	alias_db_lookup("dbaliases");
 #!endif
 
+	$avp(oexten) = $rU;
 	if (!lookup("location")) {
-		switch ($rc) {
+		$var(rc) = $rc;
+		route(TOVOICEMAIL);
+		t_newtran();
+		switch ($var(rc)) {
 			case -1:
 			case -3:
-				t_newtran();
-				t_reply("404", "Not Found");
+				send_reply("404", "Not Found");
 				exit;
 			case -2:
-				sl_send_reply("405", "Method Not Allowed");
+				send_reply("405", "Method Not Allowed");
 				exit;
 		}
 	}
@@ -784,8 +802,7 @@ route[PSTN] {
 
 # XMLRPC routing
 #!ifdef WITH_XMLRPC
-route[XMLRPC]
-{
+route[XMLRPC] {
 	# allow XMLRPC from localhost
 	if ((method=="POST" || method=="GET")
 			&& (src_ip==127.0.0.1)) {
@@ -802,6 +819,29 @@ route[XMLRPC]
 }
 #!endif
 
+# route to voicemail server
+route[TOVOICEMAIL] {
+#!ifdef WITH_VOICEMAIL
+	if(!is_method("INVITE"))
+		return;
+
+	# check if VoiceMail server IP is defined
+	if (strempty($sel(cfg_get.voicemail.srv_ip))) {
+		xlog("SCRIPT: VoiceMail rotuing enabled but IP not defined\n");
+		return;
+	}
+	if($avp(oexten)==$null)
+		return;
+
+	$ru = "sip:" + $avp(oexten) + "@" + $sel(cfg_get.voicemail.srv_ip)
+				+ $sel(cfg_get.voicemail.srv_port);
+	route(RELAY);
+	exit;
+#!endif
+
+	return;
+}
+
 # Sample branch router
 branch_route[BRANCH_ONE] {
 	xdbg("new branch at $ru\n");
@@ -834,17 +874,20 @@ failure_route[FAIL_ONE] {
 		exit;
 	}
 
-	# uncomment the following lines if you want to block client 
-	# redirect based on 3xx replies.
-	##if (t_check_status("3[0-9][0-9]")) {
-	##	t_reply("404","Not found");
-	##	exit;
-	##}
-
-	# uncomment the following lines if you want to redirect the failed 
-	# calls to a different new destination
-	##if (t_check_status("486|408")) {
-	##	sethostport("192.168.2.100:5060");
-	##	t_relay();
-	##}
+#!ifdef WITH_BLOCK3XX
+	# block call redirect based on 3xx replies.
+	if (t_check_status("3[0-9][0-9]")) {
+		t_reply("404","Not found");
+		exit;
+	}
+#!endif
+
+#!ifdef WITH_VOICEMAIL
+	# serial forking
+	# - route to voicemail on busy or no answer (timeout)
+	if (t_check_status("486|408")) {
+		route(TOVOICEMAIL);
+		exit;
+	}
+#!endif
 }




More information about the sr-dev mailing list