Browse Source

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
Daniel-Constantin Mierla 14 năm trước cách đây
mục cha
commit
023381eb3e
1 tập tin đã thay đổi với 62 bổ sung19 xóa
  1. 62 19
      etc/kamailio.cfg

+ 62 - 19
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
 }