Module: sems Branch: master Commit: 7c772cd20735ffe317ebfc4e69c91552eaf6592e URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=7c772cd20735ffe317ebfc4e69c91552eaf6592e
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Tue Mar 11 15:38:57 2014 +0100 sbc:dsm: conditions for call leg status --- apps/dsm/mods/mod_sbc/ModSbc.cpp | 38 ++++++++++++++++++++++++++++++++++++++ apps/dsm/mods/mod_sbc/ModSbc.h | 6 ++++++ doc/dsm/dsm_sbc_syntax.txt | 10 +++++++--- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/apps/dsm/mods/mod_sbc/ModSbc.cpp b/apps/dsm/mods/mod_sbc/ModSbc.cpp index 5e8a428..b475ade 100644 --- a/apps/dsm/mods/mod_sbc/ModSbc.cpp +++ b/apps/dsm/mods/mod_sbc/ModSbc.cpp @@ -117,6 +117,22 @@ MOD_CONDITIONEXPORT_BEGIN(MOD_CLS_NAME) { if (cmd == "sbc.isOnHold") return new SBCIsOnHoldCondition(params, false); + if (cmd == "sbc.isDisconnected") + return new SBCIsDisconnectedCondition(params, false); + + if (cmd == "sbc.isNoReply") + return new SBCIsNoReplyCondition(params, false); + + if (cmd == "sbc.isRinging") + return new SBCIsRingingCondition(params, false); + + if (cmd == "sbc.isConnected") + return new SBCIsConnectedCondition(params, false); + + if (cmd == "sbc.isDisconnecting") + return new SBCIsDisconnectingCondition(params, false); + + } MOD_CONDITIONEXPORT_END @@ -150,6 +166,28 @@ MATCH_CONDITION_START(SBCIsOnHoldCondition) { return res; } MATCH_CONDITION_END; +#define DEF_CALLSTATUS_COND(cond_name, cond_desc, call_status) \ + \ + MATCH_CONDITION_START(cond_name) { \ + SBCCallLeg* call_leg = dynamic_cast<SBCCallLeg*>(sess); \ + if (NULL == call_leg) { \ + DBG("script writer error: DSM condition used without call leg\n"); \ + return false; \ + } \ + \ + bool b = call_leg->getCallStatus() == call_status; \ + bool res = inv ^ b; \ + DBG("SBC: " cond_desc " == %s (res = %s)\n", \ + b ? "true":"false", res ? "true":"false"); \ + return res; \ + } MATCH_CONDITION_END + + +DEF_CALLSTATUS_COND(SBCIsDisconnectedCondition, "sbc.isDisconnected", CallLeg::Disconnected); +DEF_CALLSTATUS_COND(SBCIsNoReplyCondition, "sbc.isNoReply", CallLeg::NoReply); +DEF_CALLSTATUS_COND(SBCIsRingingCondition, "sbc.isRinging", CallLeg::Ringing); +DEF_CALLSTATUS_COND(SBCIsConnectedCondition, "sbc.isConnected", CallLeg::Connected); +DEF_CALLSTATUS_COND(SBCIsDisconnectingCondition, "sbc.isDisconnecting", CallLeg::Disconnecting); #define ACTION_GET_PROFILE \ SBCCallProfile* profile = NULL; \ diff --git a/apps/dsm/mods/mod_sbc/ModSbc.h b/apps/dsm/mods/mod_sbc/ModSbc.h index 8676f44..f17bec5 100644 --- a/apps/dsm/mods/mod_sbc/ModSbc.h +++ b/apps/dsm/mods/mod_sbc/ModSbc.h @@ -47,6 +47,12 @@ DEF_ACTION_1P(MODSBCActionGetCallStatus); DEF_SCCondition(SBCIsALegCondition); DEF_SCCondition(SBCIsOnHoldCondition); +DEF_SCCondition(SBCIsDisconnectedCondition); +DEF_SCCondition(SBCIsNoReplyCondition); +DEF_SCCondition(SBCIsRingingCondition); +DEF_SCCondition(SBCIsConnectedCondition); +DEF_SCCondition(SBCIsDisconnectingCondition); + DEF_ACTION_2P(MODSBCActionB2BRelayReliable); DEF_ACTION_2P(MODSBCActionAddCallee); diff --git a/doc/dsm/dsm_sbc_syntax.txt b/doc/dsm/dsm_sbc_syntax.txt index ab4f1c6..cc0c312 100644 --- a/doc/dsm/dsm_sbc_syntax.txt +++ b/doc/dsm/dsm_sbc_syntax.txt @@ -144,10 +144,13 @@ Conditions ---------- call leg events (don't work in non-call SBC DSMs) -sbc.isALeg +sbc.isALeg - is A leg of the call -sbc.isOnHold +sbc.isOnHold - is on hold +sbc.isDisconnected() / sbc.isNoReply() / sbc.isRinging() / sbc.isConnected() / sbc.isDisconnecting() + call leg status + Actions ------- sbc.profileSet(profile_variable, value) - set SBC profile options @@ -177,7 +180,8 @@ sbc.putOnHold() - put this call leg on hold sbc.resumeHeld() - resume from hold -sbc.getSBCCallStatus(varname) - get sbc call status into $varname +sbc.getSBCCallStatus(varname) - get sbc call status into $varname: + Disconnected/NoReply/Ringing/Connected/Disconnecting/Unknown sbc.relayReliableEvent(paramlist, processed_paramlist, unprocessed_paramlist) - relay reliable Event if processed (#processed=true in other leg), event is sent back with processed_paramlist parameters, _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
