1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-11 05:18:09 +03:00

pidl:Samba4/NDR/Client: make use of the new dcerpc_binding_handle_call() infrastructure

metze
This commit is contained in:
Stefan Metzmacher 2010-08-05 18:22:02 +02:00
parent db89fdac73
commit 76691e9eaf

View File

@ -16,64 +16,6 @@ use strict;
my($res,$res_hdr);
sub ParseFunctionOldSend($$$)
{
my ($interface, $fn, $name) = @_;
my $uname = uc $name;
if (has_property($fn, "todo")) {
return;
}
my $proto = "static struct rpc_request *dcerpc_$name\_send(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct $name *r)";
$res .= "$proto\n{\n";
$res .= "
if (p->conn->flags & DCERPC_DEBUG_PRINT_IN) {
NDR_PRINT_IN_DEBUG($name, r);
}
return dcerpc_ndr_request_send(p, NULL, &ndr_table_$interface->{NAME},
NDR_$uname, true, mem_ctx, r);
";
$res .= "}\n\n";
}
sub ParseFunctionOldRecv($$$)
{
my ($interface, $fn, $name) = @_;
my $uname = uc $name;
if (has_property($fn, "todo")) {
return;
}
my $proto = "static NTSTATUS dcerpc_$name\_recv(struct rpc_request *rreq)";
$res .= "$proto\n{\n";
$res .= "NTSTATUS status;
struct dcerpc_pipe *p = rreq->p;
struct $name *r = (struct $name *)rreq->ndr.struct_ptr;
status = dcerpc_ndr_request_recv(rreq);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
status = dcerpc_fault_to_nt_status(p->last_fault_code);
}
if (NT_STATUS_IS_OK(status) && (p->conn->flags & DCERPC_DEBUG_PRINT_OUT)) {
NDR_PRINT_OUT_DEBUG($name, r);
}
return status;
";
$res .= "}\n\n";
}
sub ParseFunction_r_State($$$)
{
my ($interface, $fn, $name) = @_;
@ -87,7 +29,7 @@ sub ParseFunction_r_State($$$)
$res .= "\tTALLOC_CTX *out_mem_ctx;\n";
$res .= "};\n";
$res .= "\n";
$res .= "static void dcerpc_$name\_r_done(struct rpc_request *subreq);\n";
$res .= "static void dcerpc_$name\_r_done(struct tevent_req *subreq);\n";
$res .= "\n";
}
@ -111,10 +53,7 @@ sub ParseFunction_r_Send($$$)
$res .= "\tstruct tevent_req *req;\n";
$res .= "\tstruct dcerpc_$name\_r_state *state;\n";
$res .= "\tstruct dcerpc_pipe *p =\n";
$res .= "\t\ttalloc_get_type_abort(h->private_data,\n";
$res .= "\t\tstruct dcerpc_pipe);\n";
$res .= "\tstruct rpc_request *subreq;\n";
$res .= "\tstruct tevent_req *subreq;\n";
$res .= "\n";
$res .= "\treq = tevent_req_create(mem_ctx, &state,\n";
@ -144,12 +83,13 @@ sub ParseFunction_r_Send($$$)
$submem = "state";
}
$res .= "\tsubreq = dcerpc_$name\_send(p, $submem, r);\n";
$res .= "\tsubreq = dcerpc_binding_handle_call_send(state, ev, h,\n";
$res .= "\t\t\tNULL, &ndr_table_$interface->{NAME},\n";
$res .= "\t\t\tNDR_$uname, $submem, r);\n";
$res .= "\tif (tevent_req_nomem(subreq, req)) {\n";
$res .= "\t\treturn tevent_req_post(req, ev);\n";
$res .= "\t}\n";
$res .= "\tsubreq->async.callback = dcerpc_$name\_r_done;\n";
$res .= "\tsubreq->async.private_data = req;\n";
$res .= "\ttevent_req_set_callback(subreq, dcerpc_$name\_r_done, req);\n";
$res .= "\n";
$res .= "\treturn req;\n";
@ -166,18 +106,18 @@ sub ParseFunction_r_Done($$$)
return;
}
my $proto = "static void dcerpc_$name\_r_done(struct rpc_request *subreq)";
my $proto = "static void dcerpc_$name\_r_done(struct tevent_req *subreq)";
$res .= "$proto\n";
$res .= "{\n";
$res .= "\tstruct tevent_req *req =\n";
$res .= "\t\ttalloc_get_type_abort(subreq->async.private_data,\n";
$res .= "\t\ttevent_req_callback_data(subreq,\n";
$res .= "\t\tstruct tevent_req);\n";
$res .= "\tNTSTATUS status;\n";
$res .= "\n";
$res .= "\tstatus = dcerpc_$name\_recv(subreq);\n";
$res .= "\tstatus = dcerpc_binding_handle_call_recv(subreq);\n";
$res .= "\tif (!NT_STATUS_IS_OK(status)) {\n";
$res .= "\t\ttevent_req_nterror(req, status);\n";
$res .= "\t\treturn;\n";
@ -238,31 +178,14 @@ sub ParseFunction_r_Sync($$$)
$res_hdr .= "\n$proto;\n";
$res .= "$proto\n{\n";
$res .= "\tstruct dcerpc_pipe *p =\n";
$res .= "\t\ttalloc_get_type_abort(h->private_data,\n";
$res .= "\t\tstruct dcerpc_pipe);\n";
$res .= "\tNTSTATUS status;\n";
$res .= "\n";
$res .= "
NTSTATUS status;
if (p->conn->flags & DCERPC_DEBUG_PRINT_IN) {
NDR_PRINT_IN_DEBUG($name, r);
}
status = dcerpc_ndr_request(p, NULL, &ndr_table_$interface->{NAME},
NDR_$uname, mem_ctx, r);
if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) {
status = dcerpc_fault_to_nt_status(p->last_fault_code);
}
if (NT_STATUS_IS_OK(status) && (p->conn->flags & DCERPC_DEBUG_PRINT_OUT)) {
NDR_PRINT_OUT_DEBUG($name, r);
}
return status;
";
$res .= "\tstatus = dcerpc_binding_handle_call(h,\n";
$res .= "\t\t\tNULL, &ndr_table_$interface->{NAME},\n";
$res .= "\t\t\tNDR_$uname, mem_ctx, r);\n";
$res .= "\n";
$res .= "\treturn status;\n";
$res .= "}\n";
$res .= "\n";
@ -274,8 +197,6 @@ sub ParseFunction($$)
{
my ($interface, $fn) = @_;
ParseFunctionOldSend($interface, $fn, $fn->{NAME});
ParseFunctionOldRecv($interface, $fn, $fn->{NAME});
ParseFunction_r_State($interface, $fn, $fn->{NAME});
ParseFunction_r_Send($interface, $fn, $fn->{NAME});
ParseFunction_r_Done($interface, $fn, $fn->{NAME});