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
