svn commit: samba r10490 - in branches/SAMBA_4_0/source:
lib/messaging torture/local
tridge at samba.org
tridge at samba.org
Sun Sep 25 13:17:04 GMT 2005
Author: tridge
Date: 2005-09-25 13:17:03 +0000 (Sun, 25 Sep 2005)
New Revision: 10490
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10490
Log:
- allow deferred irpc replies to set the status
- add an example of deferred reply for echodata in LOCAL-IRPC
Modified:
branches/SAMBA_4_0/source/lib/messaging/irpc.h
branches/SAMBA_4_0/source/lib/messaging/messaging.c
branches/SAMBA_4_0/source/torture/local/irpc.c
Changeset:
Modified: branches/SAMBA_4_0/source/lib/messaging/irpc.h
===================================================================
--- branches/SAMBA_4_0/source/lib/messaging/irpc.h 2005-09-25 13:01:26 UTC (rev 10489)
+++ branches/SAMBA_4_0/source/lib/messaging/irpc.h 2005-09-25 13:17:03 UTC (rev 10490)
@@ -34,6 +34,7 @@
struct messaging_context *msg_ctx;
struct irpc_list *irpc;
void *data;
+ struct event_context *ev;
};
/* don't allow calls to take too long */
@@ -108,6 +109,6 @@
NTSTATUS irpc_add_name(struct messaging_context *msg_ctx, const char *name);
uint32_t *irpc_servers_byname(struct messaging_context *msg_ctx, const char *name);
void irpc_remove_name(struct messaging_context *msg_ctx, const char *name);
-NTSTATUS irpc_send_reply(struct irpc_message *m);
+NTSTATUS irpc_send_reply(struct irpc_message *m, NTSTATUS status);
Modified: branches/SAMBA_4_0/source/lib/messaging/messaging.c
===================================================================
--- branches/SAMBA_4_0/source/lib/messaging/messaging.c 2005-09-25 13:01:26 UTC (rev 10489)
+++ branches/SAMBA_4_0/source/lib/messaging/messaging.c 2005-09-25 13:17:03 UTC (rev 10490)
@@ -512,12 +512,13 @@
/*
send a irpc reply
*/
-NTSTATUS irpc_send_reply(struct irpc_message *m)
+NTSTATUS irpc_send_reply(struct irpc_message *m, NTSTATUS status)
{
struct ndr_push *push;
- NTSTATUS status;
DATA_BLOB packet;
+ m->header.status = status;
+
/* setup the reply */
push = ndr_push_init_ctx(m->ndr);
if (push == NULL) {
@@ -582,6 +583,7 @@
m->msg_ctx = msg_ctx;
m->irpc = i;
m->data = r;
+ m->ev = msg_ctx->event.ev;
m->header.status = i->fn(m, r);
@@ -591,7 +593,7 @@
return;
}
- irpc_send_reply(m);
+ irpc_send_reply(m, m->header.status);
return;
failed:
Modified: branches/SAMBA_4_0/source/torture/local/irpc.c
===================================================================
--- branches/SAMBA_4_0/source/torture/local/irpc.c 2005-09-25 13:01:26 UTC (rev 10489)
+++ branches/SAMBA_4_0/source/torture/local/irpc.c 2005-09-25 13:17:03 UTC (rev 10490)
@@ -43,12 +43,29 @@
}
/*
+ a deferred reply to echodata
+*/
+static void deferred_echodata(struct event_context *ev, struct timed_event *te,
+ struct timeval t, void *private)
+{
+ struct irpc_message *irpc = talloc_get_type(private, struct irpc_message);
+ struct echo_EchoData *r = irpc->data;
+ r->out.out_data = talloc_memdup(r, r->in.in_data, r->in.len);
+ if (r->out.out_data == NULL) {
+ irpc_send_reply(irpc, NT_STATUS_NO_MEMORY);
+ }
+ printf("sending deferred reply\n");
+ irpc_send_reply(irpc, NT_STATUS_OK);
+}
+
+
+/*
serve up EchoData over the irpc system
*/
static NTSTATUS irpc_EchoData(struct irpc_message *irpc, struct echo_EchoData *r)
{
- r->out.out_data = talloc_memdup(r, r->in.in_data, r->in.len);
- NT_STATUS_HAVE_NO_MEMORY(r->out.out_data);
+ irpc->defer_reply = True;
+ event_add_timed(irpc->ev, irpc, timeval_zero(), deferred_echodata, irpc);
return NT_STATUS_OK;
}
@@ -98,8 +115,8 @@
NTSTATUS status;
/* make the call */
- r.in.in_data = talloc_strdup(mem_ctx, "0123456789");
- r.in.len = strlen(r.in.in_data);
+ r.in.in_data = (unsigned char *)talloc_strdup(mem_ctx, "0123456789");
+ r.in.len = strlen((char *)r.in.in_data);
status = IRPC_CALL(msg_ctx1, MSG_ID2, rpcecho, ECHO_ECHODATA, &r, mem_ctx);
if (!NT_STATUS_IS_OK(status)) {
More information about the samba-cvs
mailing list