2 Unix SMB/CIFS implementation.
4 provide hooks into smbd C calls from ejs scripts
6 Copyright (C) Jelmer Vernooij 2005
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "param/param.h"
24 #include "scripting/ejs/smbcalls.h"
25 #include "lib/appweb/ejs/ejs.h"
30 value = param.get("name");
31 value = param.get("section", "name");
33 static int ejs_param_get(MprVarHandle eid, int argc, char **argv)
35 struct param_context *ctx;
37 if (argc != 1 && argc != 2) {
38 ejsSetErrorMsg(eid, "param.get invalid argument count");
42 ctx = (struct param_context *)mprGetThisPtr(eid, "param");
46 ret = param_get_string(ctx, argv[0], argv[1]);
48 ret = param_get_string(ctx, argv[0], NULL);
52 mpr_Return(eid, mprString(ret));
54 mpr_Return(eid, mprCreateUndefinedVar());
62 ok = param.get_list("name");
63 ok = param.get_list("section", "name");
65 static int ejs_param_get_list(MprVarHandle eid, int argc, char **argv)
67 struct param_context *ctx;
70 if (argc != 1 && argc != 2) {
71 ejsSetErrorMsg(eid, "param.get_list invalid argument count");
75 ctx = (struct param_context *)mprGetThisPtr(eid, "param");
79 ret = param_get_string_list(ctx, argv[0], argv[1], NULL);
81 ret = param_get_string_list(ctx, argv[0], NULL, NULL);
85 mpr_Return(eid, mprList("array", ret));
87 mpr_Return(eid, mprCreateUndefinedVar());
95 ok = param.set("name", "value");
96 ok = param.set("section", "name", "value");
98 static int ejs_param_set(MprVarHandle eid, int argc, struct MprVar **argv)
100 struct param_context *ctx;
102 const char *section, *paramname;
103 struct MprVar *value;
105 if (argc != 2 && argc != 3) {
106 ejsSetErrorMsg(eid, "param.set invalid argument count");
110 ctx = (struct param_context *)mprGetThisPtr(eid, "param");
115 section = mprToString(argv[0]);
116 paramname = mprToString(argv[1]);
120 paramname = mprToString(argv[0]);
124 list = mprToList(mprMemCtx(), value);
126 ret = param_set_string_list(ctx, paramname, list, section);
128 ret = param_set_string(ctx, paramname, mprToString(value), section);
131 mpr_Return(eid, mprCreateBoolVar(ret));
136 param data as a two-level array
140 static int ejs_param_data(MprVarHandle eid, int argc, char **argv)
142 struct param_context *ctx;
144 struct param_section *sec;
147 ejsSetErrorMsg(eid, "param.data does not take arguments");
151 ctx = (struct param_context *)mprGetThisPtr(eid, "param");
154 ret = mprObject("array");
156 for (sec = ctx->sections; sec; sec = sec->next) {
157 struct MprVar ps = mprObject("array");
160 for (p = sec->parameters; p; p = p->next) {
161 mprSetVar(&ps, p->key, mprString(p->value));
164 mprSetVar(&ret, sec->name, ps);
167 mpr_Return(eid, ret);
175 ok = param.load(file);
177 static int ejs_param_load(MprVarHandle eid, int argc, char **argv)
179 struct param_context *ctx;
183 ejsSetErrorMsg(eid, "param.load invalid argument count");
187 ctx = (struct param_context *)mprGetThisPtr(eid, "param");
190 ret = param_read(ctx, argv[0]);
192 mpr_Return(eid, mprCreateBoolVar(ret));
200 ok = param.save(file);
202 static int ejs_param_save(MprVarHandle eid, int argc, char **argv)
204 struct param_context *ctx;
208 ejsSetErrorMsg(eid, "param.save invalid argument count");
212 ctx = (struct param_context *)mprGetThisPtr(eid, "param");
215 ret = param_write(ctx, argv[0]);
217 mpr_Return(eid, mprCreateBoolVar(ret));
221 static void param_add_members(struct MprVar *obj)
223 mprSetStringCFunction(obj, "get", ejs_param_get);
224 mprSetStringCFunction(obj, "get_list", ejs_param_get_list);
225 mprSetCFunction(obj, "set", ejs_param_set);
226 mprSetStringCFunction(obj, "load", ejs_param_load);
227 mprSetStringCFunction(obj, "save", ejs_param_save);
228 mprSetStringCFunction(obj, "data", ejs_param_data);
232 initialise param ejs subsystem
234 static int ejs_param_init(MprVarHandle eid, int argc, struct MprVar **argv)
236 struct MprVar *obj = mprInitObject(eid, "param", argc, argv);
238 mprSetPtrChild(obj, "param", param_init(mprMemCtx()));
240 param_add_members(obj);
245 struct MprVar mprParam(struct param_context *ctx)
247 struct MprVar mpv = mprObject("param");
248 mprSetPtrChild(&mpv, "param", ctx);
249 param_add_members(&mpv);
254 setup C functions that be called from ejs
256 void smb_setup_ejs_param(void)
258 ejsDefineCFunction(-1, "param_init", ejs_param_init, NULL, MPR_VAR_SCRIPT_HANDLE);