r24560: rename some DCERPC_ prefixes into NDR_
[ira/wip.git] / source / pidl / lib / Parse / Pidl / Samba4 / NDR / Client.pm
index 1da765303cbbd38d9d96e4a30ad763f60b8f4269..cf14b645a97b72ea8c18a9755847b2f3012681c8 100644 (file)
@@ -1,16 +1,19 @@
 ###################################################
 # client calls generator
 # Copyright tridge@samba.org 2003
+# Copyright jelmer@samba.org 2005-2006
 # released under the GNU GPL
 
 package Parse::Pidl::Samba4::NDR::Client;
 
+use Parse::Pidl::Samba4 qw(choose_header is_intree);
+
 use vars qw($VERSION);
 $VERSION = '0.01';
 
 use strict;
 
-my($res);
+my($res,$res_hdr);
 
 #####################################################################
 # parse a function
@@ -20,6 +23,10 @@ sub ParseFunction($$)
        my $name = $fn->{NAME};
        my $uname = uc $name;
 
+       $res_hdr .= "\nstruct rpc_request *dcerpc_$name\_send(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r);
+NTSTATUS dcerpc_$name(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r);
+";
+
        $res .= "
 struct rpc_request *dcerpc_$name\_send(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r)
 {
@@ -27,7 +34,7 @@ struct rpc_request *dcerpc_$name\_send(struct dcerpc_pipe *p, TALLOC_CTX *mem_ct
                NDR_PRINT_IN_DEBUG($name, r);
        }
        
-       return dcerpc_ndr_request_send(p, NULL, &dcerpc_table_$interface->{NAME}, DCERPC_$uname, mem_ctx, r);
+       return dcerpc_ndr_request_send(p, NULL, &ndr_table_$interface->{NAME}, NDR_$uname, mem_ctx, r);
 }
 
 NTSTATUS dcerpc_$name(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r)
@@ -62,6 +69,14 @@ my %done;
 sub ParseInterface($)
 {
        my($interface) = shift;
+
+       $res_hdr .= "#ifndef _HEADER_RPC_$interface->{NAME}\n";
+       $res_hdr .= "#define _HEADER_RPC_$interface->{NAME}\n\n";
+
+       if (defined $interface->{PROPERTIES}->{uuid}) {
+               $res_hdr .= "extern const struct ndr_interface_table ndr_table_$interface->{NAME};\n";
+       }
+
        $res .= "/* $interface->{NAME} - client functions generated by pidl */\n\n";
 
        foreach my $fn (@{$interface->{FUNCTIONS}}) {
@@ -71,32 +86,43 @@ sub ParseInterface($)
                $done{$fn->{NAME}} = 1;
        }
 
+       $res_hdr .= "#endif /* _HEADER_RPC_$interface->{NAME} */\n";
+
        return $res;
 }
 
-sub Parse($$)
+sub Parse($$$$)
 {
-       my($ndr) = shift;
-       my($filename) = shift;
+       my($ndr,$header,$ndr_header,$client_header) = @_;
 
-       my $h_filename = $filename;
        $res = "";
-
-       if ($h_filename =~ /(.*)\.c/) {
-               $h_filename = "$1.h";
-       }
+       $res_hdr = "";
 
        $res .= "/* client functions auto-generated by pidl */\n";
        $res .= "\n";
-       $res .= "#include \"includes.h\"\n";
-       $res .= "#include \"$h_filename\"\n";
+       if (is_intree()) {
+               $res .= "#include \"includes.h\"\n";
+       } else {
+               $res .= "#define _GNU_SOURCE\n";
+               $res .= "#include <stdio.h>\n";
+               $res .= "#include <stdbool.h>\n";
+               $res .= "#include <stdlib.h>\n";
+               $res .= "#include <stdint.h>\n";
+               $res .= "#include <stdarg.h>\n";
+               $res .= "#include <core/nterr.h>\n";
+       }
+       $res .= "#include \"$ndr_header\"\n";
+       $res .= "#include \"$client_header\"\n";
        $res .= "\n";
 
+       $res_hdr .= choose_header("librpc/rpc/dcerpc.h", "dcerpc.h")."\n";
+       $res_hdr .= "#include \"$header\"\n";
+
        foreach my $x (@{$ndr}) {
                ($x->{TYPE} eq "INTERFACE") && ParseInterface($x);
        }
 
-       return $res;
+       return ($res,$res_hdr);
 }
 
 1;