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
