r3689: Large number of COM updates:
[samba.git] / source4 / build / pidl / client.pm
1 ###################################################
2 # client calls generator
3 # Copyright tridge@samba.org 2003
4 # released under the GNU GPL
5
6 package IdlClient;
7
8 use strict;
9
10 my($res);
11
12 #####################################################################
13 # parse a function
14 sub ParseFunction($$)
15 {
16         my $interface = shift;
17         my $fn = shift;
18         my $name = $fn->{NAME};
19         my $uname = uc $name;
20
21         $res .= "
22 struct rpc_request *dcerpc_$name\_send(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r)
23 {
24
25     if (p->flags & DCERPC_DEBUG_PRINT_IN) {
26                 NDR_PRINT_IN_DEBUG($name, r);           
27         }
28
29         return dcerpc_ndr_request_send(p, NULL, DCERPC_$uname, mem_ctx,
30                                     (ndr_push_flags_fn_t) ndr_push_$name,
31                                     (ndr_pull_flags_fn_t) ndr_pull_$name,
32                                     r, sizeof(*r));
33 }
34
35 NTSTATUS dcerpc_$name(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r)
36 {
37         struct rpc_request *req;
38         NTSTATUS status;
39         
40         req = dcerpc_$name\_send(p, mem_ctx, r);
41         if (req == NULL) return NT_STATUS_NO_MEMORY;
42
43         status = dcerpc_ndr_request_recv(req);
44
45         if (NT_STATUS_IS_OK(status) && (p->flags & DCERPC_DEBUG_PRINT_OUT)) {
46                 NDR_PRINT_OUT_DEBUG($name, r);          
47         }
48 ";
49         if ($fn->{RETURN_TYPE} eq "NTSTATUS") {
50              $res .= "\tif (NT_STATUS_IS_OK(status)) status = r->out.result;\n";
51         }
52         $res .= 
53 "
54         return status;
55 }
56 ";
57 }
58
59
60 #####################################################################
61 # parse the interface definitions
62 sub ParseInterface($)
63 {
64         my($interface) = shift;
65         my($data) = $interface->{DATA};
66         $res = "/* Client functions generated by pidl */\n\n";
67         foreach my $d (@{$data}) {
68                 ($d->{TYPE} eq "FUNCTION") && 
69                     ParseFunction($interface, $d);
70         }
71         return $res;
72 }
73
74 1;