r8483: switched our generated ejs rpc code over to the new OO interface. This
authorAndrew Tridgell <tridge@samba.org>
Fri, 15 Jul 2005 07:18:23 +0000 (07:18 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:23:08 +0000 (13:23 -0500)
means we don't pollute the name space, and also makes for faster
startup times as we only create variables for the pipes that we use,
not all pipes
(This used to be commit 57d7a585e8162d21c7152952aa0cc7471968784f)

12 files changed:
source4/build/pidl/Parse/Pidl/Samba/EJS.pm
source4/lib/appweb/ejs/ejsProcs.c
source4/scripting/ejs/ejsrpc.c
source4/scripting/ejs/ejsrpc.h
source4/scripting/ejs/smbcalls.c
source4/scripting/ejs/smbcalls.h
source4/scripting/ejs/smbcalls_rpc.c
source4/scripting/ejs/smbscript.c
source4/scripting/libjs/samr.js
source4/web_server/http.c
testprogs/ejs/echo.js
testprogs/ejs/nbtstats

index d2d8b41507df4bf7983bb1d404187250c49a26b3..0aa8de7c93dacc0d6f653766974b1cc5568ea44a 100644 (file)
@@ -689,33 +689,30 @@ sub EjsInterface($$)
                EjsConst($d);
        }
 
-       pidl "void setup_ejs_$name(void)";
+       pidl "static int ejs_$name\_init(int eid, int argc, struct MprVar **argv)";
        pidl "{";
        indent;
+       pidl "struct MprVar obj = mprObject(\"$name\");";
        foreach (@fns) {
-               pidl "ejsDefineCFunction(-1, \"dcerpc_$_\", ejs_$_, NULL, MPR_VAR_SCRIPT_HANDLE);";
+               pidl "mprSetCFunction(&obj, \"$_\", ejs_$_);";
        }
-       deindent;
-       pidl "}\n";
-
-       pidl "void setup_ejs_constants_$name(int eid)";
-       pidl "{";
-       indent;
        foreach my $v (keys %constants) {
                my $value = $constants{$v};
                if (substr($value, 0, 1) eq "\"") {
-                       pidl "ejs_set_constant_string(eid, \"$v\", $value);";
+                       pidl "mprSetVar(&obj, \"$v\", mprString($value));";
                } else {
-                       pidl "ejs_set_constant_int(eid, \"$v\", $value);";
+                       pidl "mprSetVar(&obj, \"$v\", mprCreateNumberVar($value));";
                }
        }
+       pidl "mpr_Return(eid, obj);";
+       pidl "return 0;";
        deindent;
        pidl "}\n";
 
        pidl "NTSTATUS ejs_init_$name(void)";
        pidl "{";
        indent;
-       pidl "return smbcalls_register_ejs(\"$name\", setup_ejs_$name, setup_ejs_constants_$name);";
+       pidl "return smbcalls_register_ejs(\"$name\_init\", ejs_$name\_init);";
        deindent;
        pidl "}";
 }
@@ -734,6 +731,7 @@ sub Parse($$)
 #include \"includes.h\"
 #include \"lib/appweb/ejs/ejs.h\"
 #include \"scripting/ejs/ejsrpc.h\"
+#include \"scripting/ejs/smbcalls.h\"
 #include \"librpc/gen_ndr/ndr_misc_ejs.h\"
 #include \"$hdr\"
 #include \"$ejs_hdr\"
index c01f4111612099c4dff1e5b13d7e864adbeca2d9..adef6e898a6ec95f3ef449fd8e0c43d313282015 100644 (file)
@@ -629,6 +629,7 @@ int ejsDefineStandardProperties(MprVar *obj)
        mprCreatePropertyValue(obj, "undefined", mprCreateUndefinedVar());
        mprCreatePropertyValue(obj, "true", mprCreateBoolVar(1));
        mprCreatePropertyValue(obj, "false", mprCreateBoolVar(0));
+       mprCreatePropertyValue(obj, "NULL", mprCreatePtrVar(NULL));
 
 #if BLD_FEATURE_LEGACY_API
        /*
index e152c8fcd15322fcceb40092e00525a5360c4c8a..08bc4a94ba68e35d292394f62eb0eae1b312a554 100644 (file)
@@ -229,25 +229,6 @@ NTSTATUS ejs_push_string(struct ejs_rpc *ejs,
        return mprSetVar(v, name, mprString(s));
 }
 
-/*
-  setup a constant int
-*/
-void ejs_set_constant_int(int eid, const char *name, int value)
-{
-       struct MprVar *v = ejsGetGlobalObject(eid);
-       mprSetVar(v, name, mprCreateIntegerVar(value));
-}
-
-/*
-  setup a constant string
-*/
-void ejs_set_constant_string(int eid, const char *name, const char *value)
-{
-       struct MprVar *v = ejsGetGlobalObject(eid);
-       mprSetVar(v, name, mprCreateStringVar(value, False));
-}
-
-
 NTSTATUS ejs_pull_dom_sid(struct ejs_rpc *ejs, 
                          struct MprVar *v, const char *name, struct dom_sid *r)
 {
index e4b623750de13658c881caef1af1f23330d2d101..dbd147fe1d8edabb00213d5dbd84f168f1b8331f 100644 (file)
@@ -36,12 +36,8 @@ typedef NTSTATUS (*ejs_push_function_t)(struct ejs_rpc *, struct MprVar *, const
 NTSTATUS ejs_panic(struct ejs_rpc *ejs, const char *why);
 void ejs_set_switch(struct ejs_rpc *ejs, uint32_t switch_var);
 
-typedef void (*ejs_setup_t)(void);
-typedef void (*ejs_constants_t)(int);
+NTSTATUS smbcalls_register_ejs(const char *name, MprCFunction fn);
 
-NTSTATUS smbcalls_register_ejs(const char *name, 
-                              ejs_setup_t setup,
-                              ejs_constants_t constants);
 
 int ejs_rpc_call(int eid, int argc, struct MprVar **argv,
                 const struct dcerpc_interface_table *iface, int callnum,
@@ -120,3 +116,4 @@ BOOL ejs_pull_null(struct ejs_rpc *ejs, struct MprVar *v, const char *name);
 #define ejs_push_dom_sid2 ejs_push_dom_sid
 #define ejs_pull_NTTIME_hyper ejs_pull_NTTIME
 #define ejs_push_NTTIME_hyper ejs_push_NTTIME
+
index 49bcc64c9650cd60a4c41e34dcc97e0c2900f42b..59e5b170341ce73f5558952ad1d51eb28f655657 100644 (file)
@@ -132,10 +132,3 @@ void smb_setup_ejs_functions(void)
        ejsDefineStringCFunction(-1, "libinclude", ejs_libinclude, NULL, MPR_VAR_SCRIPT_HANDLE);
 }
 
-/*
-  setup constants that can be used from ejs
-*/
-void smb_setup_ejs_constants(int eid)
-{
-       smb_setup_ejs_rpc_constants(eid);
-}
index aa5c27b4f56eed4166ff93e24efde9cf342c57a5..927c3ccf2f7cfbfcfe9fcc9b92a2fa05c24dec37 100644 (file)
@@ -28,4 +28,3 @@ NTSTATUS mprGetVar(struct MprVar **v, const char *name);
 void mprAddArray(struct MprVar *var, int i, struct MprVar v);
 void mprSetCFunction(struct MprVar *obj, const char *name, MprCFunction fn);
 void mprSetStringCFunction(struct MprVar *obj, const char *name, MprStringCFunction fn);
-
index ccb2026446e1335f3fbfcfffcb94cf30882ea088..8e7bf57972475460c4be1afee8f28e49f3d085aa 100644 (file)
@@ -361,16 +361,13 @@ done:
 static struct ejs_register {
        struct ejs_register *next, *prev;
        const char *name;
-       ejs_setup_t setup;
-       ejs_constants_t constants;
+       MprCFunction fn;
 } *ejs_registered;
 
 /*
   register a generated ejs module
 */
- NTSTATUS smbcalls_register_ejs(const char *name, 
-                               ejs_setup_t setup,
-                               ejs_constants_t constants)
+ NTSTATUS smbcalls_register_ejs(const char *name, MprCFunction fn)
 {
        struct ejs_register *r;
        void *ctx = ejs_registered;
@@ -380,8 +377,7 @@ static struct ejs_register {
        r = talloc(ctx, struct ejs_register);
        NT_STATUS_HAVE_NO_MEMORY(r);
        r->name = name;
-       r->setup = setup;
-       r->constants = constants;
+       r->fn = fn;
        DLIST_ADD(ejs_registered, r);
        return NT_STATUS_OK;
 }
@@ -396,24 +392,6 @@ void smb_setup_ejs_rpc(void)
        ejsDefineCFunction(-1, "rpc_connect", ejs_rpc_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
        ejsDefineCFunction(-1, "irpc_connect", ejs_irpc_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
        for (r=ejs_registered;r;r=r->next) {
-               r->setup();
+               ejsDefineCFunction(-1, r->name, r->fn, NULL, MPR_VAR_SCRIPT_HANDLE);
        }
 }
-
-/*
-  setup constants for rpc calls
-*/
-void smb_setup_ejs_rpc_constants(int eid)
-{
-       struct ejs_register *r;
-       struct MprVar v;
-
-       for (r=ejs_registered;r;r=r->next) {
-               r->constants(eid);
-       }
-
-       v = mprCreatePtrVar(NULL);
-       mprSetProperty(ejsGetGlobalObject(eid), "NULL", &v);
-}
-
-
index d71d0847792fa79ed898251b73b4ed3057812053..8359629a852027d95dec165dba80140fd75f54c6 100644 (file)
@@ -71,8 +71,6 @@ void ejs_exception(const char *reason)
                exit(127);
        }
 
-       smb_setup_ejs_constants(eid);
-
        /* setup ARGV[] in the ejs environment */
        for (i=1;argv[i];i++) {
                argv_list = str_list_add(argv_list, argv[i]);
index a1f79b541a4a006d1b7fab578c8e4e15cedd7b9e..2363dde6862b56e9dcac4fe88348949619f66339 100644 (file)
@@ -18,7 +18,7 @@ function samArray(output)
        if (output.sam == NULL) {
                return list;
        }
-       var entries = output.sam.entries;
+       var i, entries = output.sam.entries;
        for (i=0;i<output.num_entries;i++) {
                list[i] = new Object();
                 list[i].name = entries[i].name;
@@ -32,10 +32,12 @@ function samArray(output)
 */
 function samrConnect(conn)
 {
+       conn.samr = samr_init();
+       conn.sec = security_init();
        var io = irpcObj();
        io.input.system_name = NULL;
-       io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
-       status = dcerpc_samr_Connect(conn, io);
+       io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
+       var status = conn.samr.samr_Connect2(conn, io);
        check_status_ok(status);
        return io.output.connect_handle;
 }
@@ -47,7 +49,7 @@ function samrClose(conn, handle)
 {
        var io = irpcObj();
        io.input.handle = handle;
-       status = dcerpc_samr_Close(conn, io);
+       var status = conn.samr.samr_Close(conn, io);
        check_status_ok(status);
 }
 
@@ -59,7 +61,7 @@ function samrLookupDomain(conn, handle, domain)
        var io = irpcObj();
        io.input.connect_handle = handle;
        io.input.domain_name = domain;
-       status = dcerpc_samr_LookupDomain(conn, io);
+       var status = conn.samr.samr_LookupDomain(conn, io);
        check_status_ok(status);
        return io.output.sid;
 }
@@ -71,9 +73,9 @@ function samrOpenDomain(conn, handle, sid)
 {
        var io = irpcObj();
        io.input.connect_handle = handle;
-       io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+       io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
        io.input.sid = sid;
-       status = dcerpc_samr_OpenDomain(conn, io);
+       var status = conn.samr.samr_OpenDomain(conn, io);
        check_status_ok(status);
        return io.output.domain_handle;
 }
@@ -85,9 +87,9 @@ function samrOpenUser(conn, handle, rid)
 {
        var io = irpcObj();
        io.input.domain_handle = handle;
-       io.input.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
+       io.input.access_mask = conn.sec.SEC_FLAG_MAXIMUM_ALLOWED;
        io.input.rid = rid;
-       status = dcerpc_samr_OpenUser(conn, io);
+       var status = conn.samr.samr_OpenUser(conn, io);
        check_status_ok(status);
        return io.output.user_handle;
 }
@@ -102,7 +104,7 @@ function samrEnumDomainUsers(conn, dom_handle)
        io.input.resume_handle = 0;
        io.input.acct_flags = 0;
        io.input.max_size = -1;
-       status = dcerpc_samr_EnumDomainUsers(conn, io);
+       var status = conn.samr.samr_EnumDomainUsers(conn, io);
        check_status_ok(status);
        return samArray(io.output);
 }
@@ -117,7 +119,7 @@ function samrEnumDomainGroups(conn, dom_handle)
        io.input.resume_handle = 0;
        io.input.acct_flags = 0;
        io.input.max_size = -1;
-       status = dcerpc_samr_EnumDomainGroups(conn, io);
+       var status = conn.samr.samr_EnumDomainGroups(conn, io);
        check_status_ok(status);
        return samArray(io.output);
 }
@@ -131,7 +133,7 @@ function samrEnumDomains(conn, handle)
        io.input.connect_handle = handle;
        io.input.resume_handle = 0;
        io.input.buf_size = -1;
-       status = dcerpc_samr_EnumDomains(conn, io);
+       var status = conn.samr.samr_EnumDomains(conn, io);
        check_status_ok(status);
        return samArray(io.output);
 }
@@ -144,7 +146,7 @@ function samrQueryUserInfo(conn, user_handle, level)
        var r, io = irpcObj();
        io.input.user_handle = user_handle;
        io.input.level = level;
-       status = dcerpc_samr_QueryUserInfo(conn, io);
+       var status = conn.samr.samr_QueryUserInfo(conn, io);
        check_status_ok(status);
        return io.output.info.info3;
 }
@@ -167,4 +169,3 @@ function samrFillUserInfo(conn, dom_handle, users, level)
        }
 }
 
-
index d6d8196ced8d46fe1e5854565dd45af4388c37a9..ec4b7770a64b9eb6081785a19b73d3f8f27b82fb 100644 (file)
@@ -822,8 +822,6 @@ void http_process_input(struct websrv_context *web)
        esp->req = espCreateRequest(web, web->input.url, esp->variables);
        if (esp->req == NULL) goto internal_error;
 
-       smb_setup_ejs_constants(esp->req->eid);
-
        /* work out the mime type */
        p = strrchr(web->input.url, '.');
        if (p == NULL) {
index e5b0b2b1bf306355416600c705ee49a57de0be33..d464f8623ef7c9528d830c23e00b77374bb91893 100755 (executable)
@@ -16,6 +16,8 @@ if (ok == false) {
 
 libinclude("base.js");
 
+echo = rpcecho_init();
+
 /*
   generate a ramp as an integer array
  */
@@ -40,7 +42,7 @@ function test_AddOne(conn)
 
        for (i=0;i<10;i++) {
                io.input.in_data = i;
-               status = dcerpc_echo_AddOne(conn, io);
+               status = echo.echo_AddOne(conn, io);
                check_status_ok(status);
                assert(io.output.out_data == i + 1);
        }
@@ -58,7 +60,7 @@ function test_EchoData(conn)
        for (i=0; i<30; i=i+5) {
                io.input.len = i;
                io.input.in_data = ramp_array(i);
-               status = dcerpc_echo_EchoData(conn, io);
+               status = echo.echo_EchoData(conn, io);
                check_status_ok(status);
                check_array_equal(io.input.in_data, io.output.out_data);
        }
@@ -77,7 +79,7 @@ function test_SinkData(conn)
        for (i=0; i<30; i=i+5) {
                io.input.len = i;
                io.input.data = ramp_array(i);
-               status = dcerpc_echo_SinkData(conn, io);
+               status = echo.echo_SinkData(conn, io);
                check_status_ok(status);
        }
 }
@@ -94,7 +96,7 @@ function test_SourceData(conn)
 
        for (i=0; i<30; i=i+5) {
                io.input.len = i;
-               status = dcerpc_echo_SourceData(conn, io);
+               status = echo.echo_SourceData(conn, io);
                check_status_ok(status);
                correct = ramp_array(i);
                check_array_equal(correct, io.output.data);
@@ -112,7 +114,7 @@ function test_TestCall(conn)
        print("Testing echo_TestCall\n");
 
        io.input.s1 = "my test string";
-       status = dcerpc_echo_TestCall(conn, io);
+       status = echo.echo_TestCall(conn, io);
        check_status_ok(status);
        assert("this is a test string" == io.output.s2);
 }
@@ -128,7 +130,7 @@ function test_TestCall2(conn)
 
        for (i=1;i<=7;i++) {
                io.input.level = i;
-               status = dcerpc_echo_TestCall2(conn, io);
+               status = echo.echo_TestCall2(conn, io);
                check_status_ok(status);
        }
 }
@@ -143,7 +145,7 @@ function test_TestSleep(conn)
        print("Testing echo_TestSleep\n");
 
        io.input.seconds = 1;
-       status = dcerpc_echo_TestSleep(conn, io);
+       status = echo.echo_TestSleep(conn, io);
        check_status_ok(status);
 }
 
@@ -156,18 +158,18 @@ function test_TestEnum(conn)
 
        print("Testing echo_TestEnum\n");
 
-       io.input.foo1 = ECHO_ENUM1;
+       io.input.foo1 = echo.ECHO_ENUM1;
        io.input.foo2 = new Object();
-       io.input.foo2.e1 = ECHO_ENUM1;
-       io.input.foo2.e2 = ECHO_ENUM1_32;
+       io.input.foo2.e1 = echo.ECHO_ENUM1;
+       io.input.foo2.e2 = echo.ECHO_ENUM1_32;
        io.input.foo3 = new Object();
-       io.input.foo3.e1 = ECHO_ENUM2;
-       status = dcerpc_echo_TestEnum(conn, io);
+       io.input.foo3.e1 = echo.ECHO_ENUM2;
+       status = echo.echo_TestEnum(conn, io);
        check_status_ok(status);
-       assert(io.output.foo1    == ECHO_ENUM1);
-       assert(io.output.foo2.e1 == ECHO_ENUM2);
-       assert(io.output.foo2.e2 == ECHO_ENUM1_32);
-       assert(io.output.foo3.e1 == ECHO_ENUM2);
+       assert(io.output.foo1    == echo.ECHO_ENUM1);
+       assert(io.output.foo2.e1 == echo.ECHO_ENUM2);
+       assert(io.output.foo2.e2 == echo.ECHO_ENUM1_32);
+       assert(io.output.foo3.e1 == echo.ECHO_ENUM2);
 }
 
 /*
@@ -182,7 +184,7 @@ function test_TestSurrounding(conn)
        io.input.data = new Object();
        io.input.data.x = 10;
        io.input.data.surrounding = ramp_array(10);
-       status = dcerpc_echo_TestSurrounding(conn, io);
+       status = echo.echo_TestSurrounding(conn, io);
        check_status_ok(status);
        assert(io.output.data.surrounding.length == 20);
        check_array_zero(io.output.data.surrounding);
@@ -198,7 +200,7 @@ function test_TestDoublePointer(conn)
        print("Testing echo_TestDoublePointer\n");
        
        io.input.data = 7;
-       status = dcerpc_echo_TestDoublePointer(conn, io);
+       status = echo.echo_TestDoublePointer(conn, io);
        check_status_ok(status);
        assert(io.input.data == io.input.data);
 }
index fe93a728cd7e7a221233332356cbf593c7261281..20bc781f03c387ce9d05c2831a38dfe651e76d12 100755 (executable)
@@ -14,14 +14,15 @@ if (ok == false) {
 }
 
 var conn = new Object();
+var irpc = irpc_init();
 
 status = irpc_connect(conn, "nbt_server");
 assert(status.is_ok == true);
 
 io = new Object();
 io.input = new Object();
-io.input.level = NBTD_INFO_STATISTICS;
-status = dcerpc_nbtd_information(conn, io);
+io.input.level = irpc.NBTD_INFO_STATISTICS;
+status = irpc.nbtd_information(conn, io);
 assert(status.is_ok == true);
 assert(io.results.length == 1);