###################################################
# 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
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)
{
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)
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}}) {
$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;