Module: sems Branch: master Commit: d9aaac69f6a0281cd7a9e8e4abc979c615b2915e URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sems/?a=commit;h=d9aaac69f6a0281cd7a9e8e4abc979c615b2915e
Author: Stefan Sayer <[email protected]> Committer: Stefan Sayer <[email protected]> Date: Wed Sep 8 17:22:08 2010 +0200 DSM: support $var in jumpFSM($var)/callFSM($var) support $var or @select or #param in jumpFSM/callFSM --- apps/dsm/DSMCoreModule.cpp | 24 ++++++++++++++++++------ apps/dsm/DSMModule.h | 9 +++++++-- apps/dsm/DSMStateEngine.cpp | 8 +++++--- apps/dsm/DSMStateEngine.h | 5 ++++- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/apps/dsm/DSMCoreModule.cpp b/apps/dsm/DSMCoreModule.cpp index 20b85f4..11a6038 100644 --- a/apps/dsm/DSMCoreModule.cpp +++ b/apps/dsm/DSMCoreModule.cpp @@ -376,24 +376,36 @@ EXEC_ACTION_START(SCStopAction) { } \ DEF_SCModActionExec(SCRepostAction); -DSMAction::SEAction SCRepostAction::getSEAction(string& param) { +DSMAction::SEAction SCRepostAction::getSEAction(string& param, + AmSession* sess, DSMSession* sc_sess, + DSMCondition::EventType event, + map<string,string>* event_params) { return Repost; } DEF_SCModActionExec(SCJumpFSMAction); -DSMAction::SEAction SCJumpFSMAction::getSEAction(string& param) { - param = arg; +DSMAction::SEAction SCJumpFSMAction::getSEAction(string& param, + AmSession* sess, DSMSession* sc_sess, + DSMCondition::EventType event, + map<string,string>* event_params) { + param = resolveVars(arg, sess, sc_sess, event_params); return Jump; } DEF_SCModActionExec(SCCallFSMAction); -DSMAction::SEAction SCCallFSMAction::getSEAction(string& param) { - param = arg; +DSMAction::SEAction SCCallFSMAction::getSEAction(string& param, + AmSession* sess, DSMSession* sc_sess, + DSMCondition::EventType event, + map<string,string>* event_params) { + param = resolveVars(arg, sess, sc_sess, event_params); return Call; } DEF_SCModActionExec(SCReturnFSMAction); -DSMAction::SEAction SCReturnFSMAction::getSEAction(string& param) { +DSMAction::SEAction SCReturnFSMAction::getSEAction(string& param, + AmSession* sess, DSMSession* sc_sess, + DSMCondition::EventType event, + map<string,string>* event_params) { return Return; } diff --git a/apps/dsm/DSMModule.h b/apps/dsm/DSMModule.h index 78c58b7..fa88281 100644 --- a/apps/dsm/DSMModule.h +++ b/apps/dsm/DSMModule.h @@ -105,12 +105,17 @@ class SCStrArgAction #define DEF_SCModSEStrArgAction(CL_Name) \ class CL_Name \ : public SCStrArgAction { \ + bool is_evaluated; \ public: \ - CL_Name(const string& arg) : SCStrArgAction(arg) { } \ + CL_Name(const string& arg) : SCStrArgAction(arg), \ + is_evaluated(false) { } \ bool execute(AmSession* sess, DSMSession* sc_sess, \ DSMCondition::EventType event, \ map<string,string>* event_params); \ - SEAction getSEAction(std::string&); \ + SEAction getSEAction(std::string&, \ + AmSession* sess, DSMSession* sc_sess, \ + DSMCondition::EventType event, \ + map<string,string>* event_params); \ }; \ #define DEF_ACTION_2P(CL_Name) \ diff --git a/apps/dsm/DSMStateEngine.cpp b/apps/dsm/DSMStateEngine.cpp index e883999..e9cb9bf 100644 --- a/apps/dsm/DSMStateEngine.cpp +++ b/apps/dsm/DSMStateEngine.cpp @@ -228,17 +228,19 @@ bool DSMStateEngine::runactions(vector<DSMAction*>::iterator from, DBG("executing '%s'\n", (*it)->name.c_str()); if ((*it)->execute(sess, sc_sess, event, event_params)) { string se_modifier; - switch ((*it)->getSEAction(se_modifier)) { + switch ((*it)->getSEAction(se_modifier, + sess, sc_sess, event, event_params)) { case DSMAction::Repost: is_consumed = false; break; case DSMAction::Jump: - DBG("jumping %s\n", se_modifier.c_str()); + DBG("jumping to %s\n", se_modifier.c_str()); if (jumpDiag(se_modifier, sess, sc_sess, event, event_params)) { // is_consumed = false; return true; } break; - case DSMAction::Call: + case DSMAction::Call: + DBG("calling %s\n", se_modifier.c_str()); if (callDiag(se_modifier, sess, sc_sess, event, event_params)) { // is_consumed = false; return true; diff --git a/apps/dsm/DSMStateEngine.h b/apps/dsm/DSMStateEngine.h index 961b8b3..0ceac7f 100644 --- a/apps/dsm/DSMStateEngine.h +++ b/apps/dsm/DSMStateEngine.h @@ -128,7 +128,10 @@ class DSMAction map<string,string>* event_params) = 0; /** @return state engine modification */ - virtual SEAction getSEAction(string& param) { return None; } + virtual SEAction getSEAction(string& param, + AmSession* sess, DSMSession* sc_sess, + DSMCondition::EventType event, + map<string,string>* event_params) { return None; } }; class DSMTransition; _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
