Author: sayer
Date: 2010-05-19 12:00:50 +0200 (Wed, 19 May 2010)
New Revision: 1924

Modified:
   trunk/apps/dsm/DSMCoreModule.cpp
   trunk/doc/dsm/dsm_syntax.txt
Log:
json object as DI parameter

Modified: trunk/apps/dsm/DSMCoreModule.cpp
===================================================================
--- trunk/apps/dsm/DSMCoreModule.cpp    2010-05-19 09:52:17 UTC (rev 1923)
+++ trunk/apps/dsm/DSMCoreModule.cpp    2010-05-19 10:00:50 UTC (rev 1924)
@@ -31,6 +31,8 @@
 #include "AmSessionContainer.h"
 #include "AmUtils.h"
 
+#include "jsonArg.h"
+
 DSMCoreModule::DSMCoreModule() {
 }
 
@@ -833,6 +835,7 @@
 
 SCDIAction::SCDIAction(const string& arg, bool get_res) 
   : get_res(get_res) {
+  // TODO: don't ignore "" (don't use explode here)
   params = explode(arg,",");
   if (params.size()<2) {
     ERROR("DI needs at least: mod_name, "
@@ -915,7 +918,7 @@
       }
     } else if (p.length() > 8 &&  
               p.substr(0, 8) =="(struct)") {
-      p = p.substr(8);
+      p.erase(0, 8);
       AmArg var_struct;
       string varprefix = p+".";
       bool has_vars = false;
@@ -937,7 +940,7 @@
       di_args.push(var_struct);
     } else if (p.length() > 7 &&  
               p.substr(0, 7) =="(array)") {
-      p = p.substr(7);
+      p.erase(0, 7);
       di_args.push(AmArg());
       AmArg& var_array = di_args.get(di_args.size()-1);
       
@@ -950,6 +953,22 @@
        var_array.push(it->second);
        i++;
       }
+    } else if (p.length() > 6 &&  
+              p.substr(0, 6) == "(json)") {
+      p.erase(0, 6);
+      if (p.length() && p[0] == '"') {
+       // remove quotes if parameter in form (json)"{"json":"object"}"
+       p = trim(p,"\"");
+      } else {
+       p = resolveVars(p, sess, sc_sess, event_params);
+      }
+
+      di_args.push(AmArg());
+      AmArg& var_json = di_args.get(di_args.size()-1);
+      if (!json2arg(p, var_json)) {
+       WARN("Error parsing JSON object '%s'\n", p.c_str());
+       // todo: throw exception? 
+      }      
     } else {
       di_args.push(resolveVars(p, sess, sc_sess, event_params).c_str());
     }

Modified: trunk/doc/dsm/dsm_syntax.txt
===================================================================
--- trunk/doc/dsm/dsm_syntax.txt        2010-05-19 09:52:17 UTC (rev 1923)
+++ trunk/doc/dsm/dsm_syntax.txt        2010-05-19 10:00:50 UTC (rev 1924)
@@ -156,7 +156,7 @@
    * sets $errno (config)
 
   DI(factory, function [, params...])
-  e.g. DI(factory, function, $var_param, (int)int_param, "str param", 
@select_par, (array)arrayname, (struct)structname, ...)
+  e.g. DI(factory, function, $var_param, (int)int_param, "str param", 
@select_par, (array)arrayname, (struct)structname, (json)json_object...)
        DI(user_timer, setTimer, (int)1, (int)5, @local_tag);
 
        set($sweets.candy="nice");
@@ -167,6 +167,9 @@
        set($bi[0]="ba");
        set($bi[1]="butzki");
        DI(myfactory, myfunc, (array)bi);
+        
+       set($js="{"x":"y", "a": 1}");
+       DI(myfactory, myfunc, (json)$js);
 
    * sets $errno (arg,config)
 

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

Reply via email to