Module: sems
Branch: master
Commit: ef515aff9f22a1cfc516afa00f0e769ecf81c903
URL: 
https://github.com/sems-server/sems/commit/ef515aff9f22a1cfc516afa00f0e769ecf81c903

Author: Juha Heinanen <[email protected]>
Committer: Juha Heinanen <[email protected]>
Date: 2015-12-02T05:29:14+02:00

apps/dsm/mods/mod_utils: added replace function

---

Modified: apps/dsm/mods/mod_utils/ModUtils.cpp
Modified: apps/dsm/mods/mod_utils/ModUtils.h
Modified: doc/dsm/mods/Readme.mod_utils.txt

---

Diff:  
https://github.com/sems-server/sems/commit/ef515aff9f22a1cfc516afa00f0e769ecf81c903.diff
Patch: 
https://github.com/sems-server/sems/commit/ef515aff9f22a1cfc516afa00f0e769ecf81c903.patch

---

diff --git a/apps/dsm/mods/mod_utils/ModUtils.cpp 
b/apps/dsm/mods/mod_utils/ModUtils.cpp
index 14c9e4f..444f23d 100644
--- a/apps/dsm/mods/mod_utils/ModUtils.cpp
+++ b/apps/dsm/mods/mod_utils/ModUtils.cpp
@@ -54,6 +54,7 @@ MOD_ACTIONEXPORT_BEGIN(MOD_CLS_NAME) {
   DEF_CMD("utils.sub", SCUSSubAction);
   DEF_CMD("utils.int", SCUIntAction);
   DEF_CMD("utils.md5", SCUMD5Action);
+  DEF_CMD("utils.replace", SCUReplaceAction);
   DEF_CMD("utils.splitStringCR", SCUSplitStringAction);
   DEF_CMD("utils.escapeCRLF", SCUEscapeCRLFAction);
   DEF_CMD("utils.unescapeCRLF", SCUUnescapeCRLFAction);
@@ -387,6 +388,56 @@ EXEC_ACTION_START(SCUMD5Action) {
 
 } EXEC_ACTION_END;
 
+CONST_ACTION_2P(SCUReplaceAction, ',', false);
+EXEC_ACTION_START(SCUReplaceAction) {
+
+  string subject = resolveVars(par1, sess, sc_sess, event_params);
+
+  vector<string> vars = explode(par2, "=>");
+  if (vars.size() != 2) {
+    ERROR("could not parse search=>replace '%s'\n", par2.c_str());
+    sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG);
+    sc_sess->SET_STRERROR("could not parse search=>replace '" + par2 +"'\n");
+    return false;
+  }
+
+  string search;
+
+  if ((vars[0])[0] != '$') {
+    search = vars[0];
+  } else {
+    search = resolveVars(vars[0], sess, sc_sess, event_params);
+    if (search.length() == 0) {
+      ERROR("search var '%s' value is empty\n", vars[0].c_str());
+      sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG);
+      sc_sess->SET_STRERROR("search var '" + vars[0] + "' value is empty\n");
+      return false;
+    }
+  }
+
+  string replace;
+
+  if ((vars[1])[0] != '$') {
+    replace = vars[1];
+  } else {
+    replace = resolveVars(vars[1], sess, sc_sess, event_params);
+  }
+
+  size_t pos = 0;
+  while ((pos = subject.find(search, pos)) != std::string::npos) {
+    subject.replace(pos, search.length(), replace);
+    pos += replace.length();
+  }
+
+  string varname = par1;
+  if (varname.length() && varname[0] == '$')
+    varname = varname.substr(1);
+
+  INFO("setting var[%s] = %s\n", varname.c_str(), subject.c_str());
+  sc_sess->var[varname] = subject;
+
+} EXEC_ACTION_END;
+
 CONST_ACTION_2P(SCUSplitStringAction, ',', true);
 EXEC_ACTION_START(SCUSplitStringAction) {
   size_t cntr = 0;
diff --git a/apps/dsm/mods/mod_utils/ModUtils.h 
b/apps/dsm/mods/mod_utils/ModUtils.h
index e522d53..b4bf1ea 100644
--- a/apps/dsm/mods/mod_utils/ModUtils.h
+++ b/apps/dsm/mods/mod_utils/ModUtils.h
@@ -53,6 +53,7 @@ DEF_ACTION_2P(SCUSSubAction);
 DEF_ACTION_2P(SCUIntAction);
 DEF_ACTION_2P(SCUSplitStringAction);
 DEF_ACTION_2P(SCUMD5Action);
+DEF_ACTION_2P(SCUReplaceAction);
 
 DEF_ACTION_1P(SCUEscapeCRLFAction);
 DEF_ACTION_1P(SCUUnescapeCRLFAction);
diff --git a/doc/dsm/mods/Readme.mod_utils.txt 
b/doc/dsm/mods/Readme.mod_utils.txt
index 82944ad..be91a61 100644
--- a/doc/dsm/mods/Readme.mod_utils.txt
+++ b/doc/dsm/mods/Readme.mod_utils.txt
@@ -50,6 +50,9 @@ Actions:
  utils.md5($var, val)
    calculate md5 hex digest of val to $var
 
+ utils.replace($subject, (search|$search)=>(replace|$replace))
+   in $subject, replace each search string with replace string   
+
  utils.splitStringCR($var [, $dstvar])
  utils.splitStringCR(val, $dstvar])
    split a string on newline (carriage return, \n) 

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

Reply via email to