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