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

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Thu Sep 22 15:56:14 2011 +0200

sbc: cc_pcalls: configurable refuse code/reason

---

 .../parallel_calls/CCParallelCalls.cpp             |   93 +++++++++++---------
 .../call_control/parallel_calls/CCParallelCalls.h  |    3 +
 .../call_control/parallel_calls/etc/cc_pcalls.conf |    5 +
 3 files changed, 59 insertions(+), 42 deletions(-)

diff --git a/apps/sbc/call_control/parallel_calls/CCParallelCalls.cpp 
b/apps/sbc/call_control/parallel_calls/CCParallelCalls.cpp
index aa8129a..7da6613 100644
--- a/apps/sbc/call_control/parallel_calls/CCParallelCalls.cpp
+++ b/apps/sbc/call_control/parallel_calls/CCParallelCalls.cpp
@@ -35,36 +35,8 @@
 
 #define SBCVAR_PARALLEL_CALLS_UUID "pcalls_uuid"
 
-class CCParallelCallsFactory : public AmDynInvokeFactory
-{
-public:
-    CCParallelCallsFactory(const string& name)
-       : AmDynInvokeFactory(name) {}
-
-    AmDynInvoke* getInstance(){
-       return CCParallelCalls::instance();
-    }
-
-    int onLoad(){
-      if (CCParallelCalls::instance()->onLoad())
-       return -1;
-
-      DBG("template call control loaded.\n");
-
-      return 0;
-    }
-};
-
-EXPORT_PLUGIN_CLASS_FACTORY(CCParallelCallsFactory,MOD_NAME);
-
-CCParallelCalls* CCParallelCalls::_instance=0;
-
-CCParallelCalls* CCParallelCalls::instance()
-{
-    if(!_instance)
-       _instance = new CCParallelCalls();
-    return _instance;
-}
+unsigned int CCParallelCalls::refuse_code = 402;
+string CCParallelCalls::refuse_reason = "Too Many Simultaneous Calls";
 
 CCParallelCalls::CCParallelCalls()
 {
@@ -73,17 +45,24 @@ CCParallelCalls::CCParallelCalls()
 CCParallelCalls::~CCParallelCalls() { }
 
 int CCParallelCalls::onLoad() {
-  // AmConfigReader cfg;
-
-  // if(cfg.loadFile(AmConfig::ModConfigPath + string(MOD_NAME ".conf"))) {
-  //   INFO(MOD_NAME "configuration  file (%s) not found, "
-  //    "assuming default configuration is fine\n",
-  //    (AmConfig::ModConfigPath + string(MOD_NAME ".conf")).c_str());
-  //   return 0;
-  // }
+  AmConfigReader cfg;
 
-  // syslog_prefix = cfg.hasParameter("cdr_prefix") ? 
-  //   cfg.getParameter("cdr_prefix") : syslog_prefix;
+  if(cfg.loadFile(AmConfig::ModConfigPath + string(MOD_NAME ".conf"))) {
+    INFO(MOD_NAME "configuration  file (%s) not found, "
+        "assuming default configuration is fine\n",
+        (AmConfig::ModConfigPath + string(MOD_NAME ".conf")).c_str());
+    return 0;
+  }
+  
+  refuse_reason = cfg.hasParameter("refuse_reason") ?
+    cfg.getParameter("refuse_reason") : refuse_reason;
+
+  if (cfg.hasParameter("refuse_code")) {
+    if (str2i(cfg.getParameter("refuse_code"), refuse_code)) {
+      ERROR("refuse_code '%s' not understood\n", 
cfg.getParameter("refuse_code").c_str());
+      return -1;
+    }
+  }
 
   return 0;
 }
@@ -184,8 +163,8 @@ void CCParallelCalls::start(const string& ltag, 
SBCCallProfile* call_profile,
     res.push(AmArg());
     AmArg& res_cmd = res[0];
     res_cmd[SBC_CC_ACTION] = SBC_CC_REFUSE_ACTION;
-    res_cmd[SBC_CC_REFUSE_CODE] = 402;
-    res_cmd[SBC_CC_REFUSE_REASON] = "Too many Simultaneous Calls";
+    res_cmd[SBC_CC_REFUSE_CODE] = (int)refuse_code;
+    res_cmd[SBC_CC_REFUSE_REASON] = refuse_reason;
   }
 
 }
@@ -220,3 +199,33 @@ void CCParallelCalls::end(const string& ltag, 
SBCCallProfile* call_profile,
 
   DBG("uuid '%s' now has %u active calls\n", uuid.c_str(), new_call_count);
 }
+
+CCParallelCalls* CCParallelCalls::_instance=0;
+
+CCParallelCalls* CCParallelCalls::instance()
+{
+    if(!_instance)
+       _instance = new CCParallelCalls();
+    return _instance;
+}
+
+class CCParallelCallsFactory : public AmDynInvokeFactory
+{
+public:
+    CCParallelCallsFactory(const string& name)
+      : AmDynInvokeFactory(name) { }
+
+    AmDynInvoke* getInstance(){
+       return CCParallelCalls::instance();
+    }
+
+    int onLoad(){
+      if (CCParallelCalls::instance()->onLoad())
+       return -1;
+
+      DBG("parallel call control loaded.\n");
+
+      return 0;
+    }
+};
+EXPORT_PLUGIN_CLASS_FACTORY(CCParallelCallsFactory,MOD_NAME);
diff --git a/apps/sbc/call_control/parallel_calls/CCParallelCalls.h 
b/apps/sbc/call_control/parallel_calls/CCParallelCalls.h
index 8395d4f..5e3f032 100644
--- a/apps/sbc/call_control/parallel_calls/CCParallelCalls.h
+++ b/apps/sbc/call_control/parallel_calls/CCParallelCalls.h
@@ -38,6 +38,9 @@ using std::map;
  */
 class CCParallelCalls : public AmDynInvoke
 {
+  static unsigned int refuse_code;
+  static string refuse_reason;
+
   // this map contains # of calls per uuid
   map<string, unsigned int> call_control_calls;
   AmMutex call_control_calls_mut;
diff --git a/apps/sbc/call_control/parallel_calls/etc/cc_pcalls.conf 
b/apps/sbc/call_control/parallel_calls/etc/cc_pcalls.conf
new file mode 100644
index 0000000..d3b3078
--- /dev/null
+++ b/apps/sbc/call_control/parallel_calls/etc/cc_pcalls.conf
@@ -0,0 +1,5 @@
+#refuse with code:
+#refuse_code=403
+
+#refuse with reason:
+#refuse_reason="Sorry, Too Many Calls"

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to