|
@@ -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
|
|
|
}
|