diff options
author | Stefan Metzmacher <metze@samba.org> | 2005-01-11 16:53:02 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:08:43 -0500 |
commit | fae215266b6711b24f4893653b146751885e4e5f (patch) | |
tree | af13886f2431e1aa8a55a6da473e950dd3d5a053 /source4/rpc_server/dcerpc_sock.c | |
parent | 90d65c2e85c8042391b8219eeaedd780e6eb3c7c (diff) | |
download | samba-fae215266b6711b24f4893653b146751885e4e5f.tar.gz samba-fae215266b6711b24f4893653b146751885e4e5f.tar.bz2 samba-fae215266b6711b24f4893653b146751885e4e5f.zip |
r4690: - add support for async rpc server replies
the backend should check for
(dce_call->state_flags & DCESRV_CALL_STATE_FLAG_MAY_ASYNC)
then it's allowed to reply async
then the backend should mark that call as async with
dce_call->state_flags |= DCESRV_CALL_STATE_FLAG_ASYNC;
later it has to manualy set r->out.result
and then send the reply by calling
status = dcesrv_reply(p->dce_call);
NOTE: that ncacn_np doesn't support async replies yet
- implement an async version of echo_TestSleep
- reenable the echo_TestSleep torture test
(this need to be more strict when we have support for async ncacn_np)
metze
(This used to be commit f0a0dbeb25b034b1333078ca085999359f5f6209)
Diffstat (limited to 'source4/rpc_server/dcerpc_sock.c')
-rw-r--r-- | source4/rpc_server/dcerpc_sock.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/source4/rpc_server/dcerpc_sock.c b/source4/rpc_server/dcerpc_sock.c index 2155f97376..420c73cb1c 100644 --- a/source4/rpc_server/dcerpc_sock.c +++ b/source4/rpc_server/dcerpc_sock.c @@ -4,7 +4,7 @@ server side dcerpc using various kinds of sockets (tcp, unix domain) Copyright (C) Andrew Tridgell 2003 - Copyright (C) Stefan (metze) Metzmacher 2004 + Copyright (C) Stefan (metze) Metzmacher 2004-2005 Copyright (C) Jelmer Vernooij 2004 This program is free software; you can redistribute it and/or modify @@ -48,7 +48,7 @@ static ssize_t dcerpc_write_fn(void *private, DATA_BLOB *out) return sendlen; } -void dcesrv_terminate_connection(struct dcesrv_connection *dce_conn, const char *reason) +static void dcesrv_terminate_connection(struct dcesrv_connection *dce_conn, const char *reason) { server_terminate_connection(dce_conn->srv_conn, reason); } @@ -226,24 +226,26 @@ void dcesrv_sock_init(struct server_service *service, const struct model_ops *mo return; } -void dcesrv_sock_accept(struct server_connection *conn) +void dcesrv_sock_accept(struct server_connection *srv_conn) { NTSTATUS status; - struct dcesrv_socket_context *dcesrv_sock = conn->server_socket->private_data; + struct dcesrv_socket_context *dcesrv_sock = srv_conn->server_socket->private_data; struct dcesrv_connection *dcesrv_conn = NULL; DEBUG(5,("dcesrv_sock_accept\n")); - status = dcesrv_endpoint_connect(dcesrv_sock->dcesrv_ctx, dcesrv_sock->endpoint, &dcesrv_conn); + status = dcesrv_endpoint_connect(dcesrv_sock->dcesrv_ctx, + dcesrv_sock, + dcesrv_sock->endpoint, + srv_conn, + &dcesrv_conn); if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("dcesrv_sock_accept: dcesrv_endpoint_connect failed: %s\n", nt_errstr(status))); return; } - dcesrv_conn->srv_conn = conn; - - conn->private_data = dcesrv_conn; + srv_conn->private_data = dcesrv_conn; return; } |