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

Author: Stefan Sayer <[email protected]>
Committer: Stefan Sayer <[email protected]>
Date:   Fri Dec  3 01:22:48 2010 +0100

DSM: param() function, access param named by a var

like #($paramname)

patch by Matthew Williams

---

 apps/dsm/DSMCoreModule.cpp |   25 +++++++++++++++++++++++++
 apps/dsm/DSMCoreModule.h   |    1 +
 doc/dsm/dsm_syntax.txt     |    2 ++
 3 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/apps/dsm/DSMCoreModule.cpp b/apps/dsm/DSMCoreModule.cpp
index 9ab4987..189045b 100644
--- a/apps/dsm/DSMCoreModule.cpp
+++ b/apps/dsm/DSMCoreModule.cpp
@@ -79,6 +79,7 @@ DSMAction* DSMCoreModule::getAction(const string& from_str) {
   DEF_CMD("eval", SCEvalAction);
   DEF_CMD("setVar", SCSetVarAction);
   DEF_CMD("var", SCGetVarAction);
+  DEF_CMD("param", SCGetParamAction);
   DEF_CMD("append", SCAppendAction);
   DEF_CMD("substr", SCSubStrAction);
   DEF_CMD("inc", SCIncAction);
@@ -627,6 +628,30 @@ EXEC_ACTION_START(SCSetVarAction) {
       var_name.c_str(), sc_sess->var[var_name].c_str());
 } EXEC_ACTION_END;
 
+CONST_ACTION_2P(SCGetParamAction,'=', false);
+EXEC_ACTION_START(SCGetParamAction){
+
+  string dst_var_name = (par1.length() && par1[0] == '$')?
+    par1.substr(1) : par1;
+  string param_name = resolveVars(par2, sess, sc_sess, event_params);
+  
+  DBG("param_name = %s, dst = %s\n", param_name.c_str(), dst_var_name.c_str());
+
+  if (NULL==event_params) {
+    sc_sess->var[dst_var_name] = "";
+    EXEC_ACTION_STOP;
+  }
+
+  map<string, string>::iterator it = event_params->find(param_name);
+  if (it != event_params->end()) {
+    sc_sess->var[dst_var_name] = it->second;
+  } else {
+    sc_sess->var[dst_var_name] = "";
+  }
+  
+  DBG("set $%s='%s'\n", 
+      dst_var_name.c_str(), sc_sess->var[dst_var_name].c_str());
+} EXEC_ACTION_END;
 
 CONST_ACTION_2P(SCGetVarAction,'=', false);
 EXEC_ACTION_START(SCGetVarAction){
diff --git a/apps/dsm/DSMCoreModule.h b/apps/dsm/DSMCoreModule.h
index c7523bd..67a3d3c 100644
--- a/apps/dsm/DSMCoreModule.h
+++ b/apps/dsm/DSMCoreModule.h
@@ -93,6 +93,7 @@ DEF_ACTION_1P(SCLogParamsAction);
 DEF_ACTION_1P(SCLogSelectsAction);
 DEF_ACTION_1P(SCLogAllAction);
 DEF_ACTION_2P(SCGetVarAction);
+DEF_ACTION_2P(SCGetParamAction);
 DEF_ACTION_2P(SCSetVarAction);
 DEF_ACTION_2P(SCPlayFileAction);
 DEF_ACTION_2P(SCPlayFileFrontAction);
diff --git a/doc/dsm/dsm_syntax.txt b/doc/dsm/dsm_syntax.txt
index d32cfec..7acfd63 100644
--- a/doc/dsm/dsm_syntax.txt
+++ b/doc/dsm/dsm_syntax.txt
@@ -135,6 +135,8 @@ sendDTMFSequence(sequence [, duration_ms])
   e.g.  set($var="text and some $variable and some #param");
  var($dstvar=srcvarname)
   e.g.  var($dstvar=$var_counter)
+ param($dstvar=srcparamname)
+  e.g. param($dstvar=$myparam) (like: #($myparam) )
  eval($var=value) 
   evaluate expression (only simple binary + and - supported)
   e.g.  set($var=1+5); set($var=$var2); set($var=#key)

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

Reply via email to