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

Reply via email to