2 server side js functions for handling async calls from js clients
4 Copyright Andrew Tridgell 2005
5 released under the GNU GPL Version 2 or later
8 libinclude("encoder.js");
11 a remote printf, for displaying stuff on smbd stdout
13 function __server_printf()
15 print(vsprintf(arguments));
22 function __register_call(name, func)
29 run a call sent from the client, and output the returned object (if any)
31 function __run_call() {
33 var name = form['func'];
34 if (name == undefined) {
35 println("no function name given in run_call");
38 var args = form['args'];
39 if (args == undefined) {
40 println("no function arguments given in run_call");
43 args = decodeObject(args);
44 if (c.calls[name] == undefined) {
45 println("undefined remote call " + name);
48 var f = c.calls[name];
50 /* oh what a hack - should write a varargs ejs helper */
51 if (args.length == 0) {
53 } else if (args.length == 1) {
55 } else if (args.length == 2) {
56 res = f(args[0], args[1]);
57 } else if (args.length == 3) {
58 res = f(args[0], args[1], args[2]);
59 } else if (args.length == 4) {
60 res = f(args[0], args[1], args[2], args[3]);
61 } else if (args.length == 5) {
62 res = f(args[0], args[1], args[2], args[3], args[4]);
63 } else if (args.length == 6) {
64 res = f(args[0], args[1], args[2], args[3], args[4], args[5]);
65 } else if (args.length == 7) {
66 res = f(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
67 } else if (args.length == 8) {
68 res = f(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
70 println("too many arguments for remote call: " + name);
73 var repobj = new Object();
75 write(encodeObject(repobj));
81 initialise a server call object
83 function servCallObj()
86 c.add = __register_call;
88 c.calls = new Object();
90 /* add some basic calls */
91 c.add('printf', __server_printf);