Module: sems Branch: master Commit: 8a2c0cdbe87118494da2170ef0bdd1d17f64e486 URL: https://github.com/sems-server/sems/commit/8a2c0cdbe87118494da2170ef0bdd1d17f64e486
Author: Juha Heinanen <[email protected]> Committer: Juha Heinanen <[email protected]> Date: 2016-04-25T14:18:20+03:00 apps/dsm: added DIgetResultArray core function --- Modified: apps/dsm/DSMCoreModule.cpp Modified: doc/dsm/dsm_syntax.txt --- Diff: https://github.com/sems-server/sems/commit/8a2c0cdbe87118494da2170ef0bdd1d17f64e486.diff Patch: https://github.com/sems-server/sems/commit/8a2c0cdbe87118494da2170ef0bdd1d17f64e486.patch --- diff --git a/apps/dsm/DSMCoreModule.cpp b/apps/dsm/DSMCoreModule.cpp index a6b2269..c9145f3 100644 --- a/apps/dsm/DSMCoreModule.cpp +++ b/apps/dsm/DSMCoreModule.cpp @@ -138,6 +138,12 @@ DSMAction* DSMCoreModule::getAction(const string& from_str) { return a; } + if (cmd == "DIgetResultArray") { + SCDIAction * a = new SCDIAction(params, true); + a->name = from_str; + return a; + } + DEF_CMD("B2B.connectCallee", SCB2BConnectCalleeAction); DEF_CMD("B2B.terminateOtherLeg", SCB2BTerminateOtherLegAction); DEF_CMD("B2B.sendReinvite", SCB2BReinviteAction); @@ -1445,30 +1451,49 @@ EXEC_ACTION_START(SCDIAction) { else if (isArgInt(sc_sess->di_res)) sc_sess->var["DI_res"] = int2str(sc_sess->di_res.asInt()); else if (isArgArray(sc_sess->di_res)) { - // copy results to $DI_res0..$DI_resn - for (size_t i=0;i<sc_sess->di_res.size();i++) { - switch (sc_sess->di_res.get(i).getType()) { - case AmArg::CStr: { - sc_sess->var["DI_res"+int2str((unsigned int)i)] = - sc_sess->di_res.get(i).asCStr(); - } break; - case AmArg::Int: { - sc_sess->var["DI_res"+int2str((unsigned int)i)] = - int2str(sc_sess->di_res.get(i).asInt()); - } break; - default: { - ERROR("unsupported AmArg return type!"); - flag_error = true; - sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG); - sc_sess->SET_STRERROR("unsupported AmArg return type"); + if (name.compare(0, 12, "DIgetResult(") == 0) { + // copy results to $DI_res0..$DI_resn + for (size_t i=0;i<sc_sess->di_res.size();i++) { + switch (sc_sess->di_res.get(i).getType()) { + case AmArg::CStr: { + sc_sess->var["DI_res"+int2str((unsigned int)i)] = + sc_sess->di_res.get(i).asCStr(); + } break; + case AmArg::Int: { + sc_sess->var["DI_res"+int2str((unsigned int)i)] = + int2str(sc_sess->di_res.get(i).asInt()); + } break; + default: { + ERROR("unsupported AmArg return type!"); + flag_error = true; + sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG); + sc_sess->SET_STRERROR("unsupported AmArg return type"); + } + } } + } else { + // copy results to $DI_res[0]..$DI_res[n] and n to $DI_res_size + INFO("======== got '%d' results\n", (int)sc_sess->di_res.size()); + for (size_t i=0;i<sc_sess->di_res.size();i++) { + switch (sc_sess->di_res.get(i).getType()) { + case AmArg::CStr: { + sc_sess->var["DI_res["+int2str((unsigned int)i)+"]"] = + sc_sess->di_res.get(i).asCStr(); + } break; + case AmArg::Int: { + sc_sess->var["DI_res["+int2str((unsigned int)i)+"]"] = + int2str(sc_sess->di_res.get(i).asInt()); + } break; + default: { + ERROR("unsupported AmArg return type!"); + flag_error = true; + sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG); + sc_sess->SET_STRERROR("unsupported AmArg return type"); + } + } } + sc_sess->var["DI_res_size"] = int2str((int)sc_sess->di_res.size()); } - } else { - ERROR("unsupported AmArg return type!"); - flag_error = true; - sc_sess->SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG); - sc_sess->SET_STRERROR("unsupported AmArg return type"); } } if (!flag_error) { diff --git a/doc/dsm/dsm_syntax.txt b/doc/dsm/dsm_syntax.txt index 299c41c..e4b3c76 100644 --- a/doc/dsm/dsm_syntax.txt +++ b/doc/dsm/dsm_syntax.txt @@ -326,6 +326,12 @@ B2B call control array are supported * sets $errno (arg,config) + DIgetResultArray(factory, function, param,...) + saves result from DI call to DI_res or DI_res[0], DI_res[1], ..., DI_res[N] + and N to DI_res_size; currently result types int, double, string, + boolean, invalid, and array are supported + * sets $errno (arg,config) + Exception handling ------------------ throw(<type>[,arg1=val1;arg2=val2;...]) _______________________________________________ Semsdev mailing list [email protected] http://lists.iptel.org/mailman/listinfo/semsdev
