r2256: Include autogenerated interfaces for lsa and samr pipes. Typemaps are currently
authorTim Potter <tpot@samba.org>
Wed, 8 Sep 2004 12:56:57 +0000 (12:56 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:58:35 +0000 (12:58 -0500)
not working though.
(This used to be commit 55bd2dc02de13ee3da1cde20694f452df0899a9f)

source4/build/pidl/swig.pm
source4/build/smb_build/makefile.pl
source4/scripting/swig/dcerpc.i

index 124b6e593e0e9bf871376869d46cf20ecb2ab848..71b28ccfb7f756ae9c0de05e983424e6116cbdb3 100644 (file)
@@ -6,16 +6,81 @@
 package IdlSwig;
 
 use strict;
+use Data::Dumper;
+
+my($res);
+my($name);
+
+sub ParseFunction($)
+{
+    my($fn) = shift;
+
+#    print Dumper($fn);
+
+    # Input typemap
+
+    $res .= "%typemap(in) struct $fn->{NAME} * (struct $fn->{NAME} temp) {\n";
+    $res .= "\tif (!PyDict_Check(\$input)) {\n";
+    $res .= "\t\tPyErr_SetString(PyExc_TypeError, \"dict arg expected\");\n";
+    $res .= "\t\treturn NULL;\n";
+    $res .= "\t}\n\n";
+    $res .= "\tmemset(&temp, 0, sizeof(temp));\n\n";
+    $res .= "\t/* store input params in dict */\n\n";
+    $res .= "\t\$1 = &temp;\n";
+    $res .= "}\n\n";
+
+    # Output typemap
+
+    $res .= "%typemap(argout) struct $fn->{NAME} * {\n";
+    $res .= "\tlong status = PyLong_AsLong(resultobj);\n";
+    $res .= "\tPyObject *dict;\n";
+    $res .= "\n";
+    $res .= "\tif (status != 0) {\n";
+    $res .= "\t\tset_ntstatus_exception(status);\n";
+    $res .= "\t\treturn NULL;\n";
+    $res .= "\t}\n";
+    $res .= "\n";
+    $res .= "\tdict = PyDict_New();\n\n";
+    $res .= "\t/* store output params in dict */\n\n";
+    $res .= "\tresultobj = dict;\n";
+    $res .= "}\n\n";
+
+    # Function definitions
+
+    $res .= "%rename($fn->{NAME}) dcerpc_$fn->{NAME};\n";
+    $res .= "$fn->{RETURN_TYPE} dcerpc_$fn->{NAME}(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $fn->{NAME} *r);\n\n";
+}
+
+sub ParseInheritedData($)
+{
+    my($data) = shift;
+
+    foreach my $e (@{$data}) {
+       ($e->{TYPE} eq "FUNCTION") && ParseFunction($e);
+    }
+}
+
+sub ParseHeader($)
+{
+    my($hdr) = shift;
+
+    $name = $hdr->{NAME};
+    $res .= "#define DCERPC_" . uc($name) . "_UUID \"$hdr->{PROPERTIES}->{uuid}\"\n";
+    $res .= "const int DCERPC_" . uc($name) . "_VERSION = " . $hdr->{PROPERTIES}->{version} . ";\n";
+    $res .= "#define DCERPC_" . uc($name) . "_NAME \"" . $name . "\"\n";
+    $res .= "\n";
+
+    ParseInheritedData($hdr->{INHERITED_DATA});    
+}
 
 sub Parse($)
 {
     my($idl) = shift;
-    my($res) = "";
-
-    $res = "/* header auto-generated by pidl */\n\n";
+    
+    $res = "/* auto-generated by pidl */\n\n";
 
     foreach my $x (@{$idl}) {
-#      ($x->{TYPE} eq "INTERFACE") && HeaderInterface($x);
+       ($x->{TYPE} eq "INTERFACE") && ParseHeader($x);
     }
 
     return $res;
index 3bbe7b5b71d1fdc98cfe5cd95e7ad97bfd3f0a1a..325c7c61e6235dc3645c97352c703f254a5b6027 100644 (file)
@@ -776,7 +776,9 @@ PYTHON_DCERPC_OBJ = \$(SUBSYSTEM_LIBRPC_RAW_OBJS) \\
 
 PYTHON_DCERPC_LIBS = -lldap
 
-scripting/swig/dcerpc.py: scripting/swig/dcerpc.i scripting/swig/samr.i scripting/swig/samba.i
+SWIG_INCLUDES = librpc/gen_ndr/samr.i librpc/gen_ndr/lsa.i
+
+scripting/swig/dcerpc.py: scripting/swig/dcerpc.i scripting/swig/samba.i \$(SWIG_INCLUDES)
        swig -python scripting/swig/dcerpc.i
 
 scripting/swig/_dcerpc.so: scripting/swig/dcerpc.py scripting/swig/dcerpc_wrap.o \$(PYTHON_DCERPC_OBJ)
index 6769b4efc1b728c00e535c7af73b118e53580342..5ace564359910f059490122b83584be6daae2d59 100644 (file)
@@ -121,4 +121,6 @@ NTSTATUS dcerpc_pipe_connect(struct dcerpc_pipe **OUT,
                              const char *domain,
                              const char *username,
                              const char *password);
-%include "samr.i"
+
+%include "librpc/gen_ndr/samr.i"
+%include "librpc/gen_ndr/lsa.i"