1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-03 04:22:09 +03:00

s3-rpc_server: add termination function

This way we can act when a client disconnects.

Signed-off-by: Andreas Schneider <asn@samba.org>
This commit is contained in:
Simo Sorce
2011-04-25 17:24:15 -04:00
committed by Andreas Schneider
parent d67fc9c1eb
commit a1394fc934
2 changed files with 23 additions and 3 deletions

View File

@ -281,7 +281,7 @@ static void named_pipe_listener(struct tevent_context *ev,
named_pipe_accept_function(state->ev_ctx,
state->msg_ctx,
state->ep.name,
sd);
sd, NULL, 0);
}
@ -314,13 +314,26 @@ struct named_pipe_client {
struct iovec *iov;
size_t count;
named_pipe_termination_fn *term_fn;
void *private_data;
};
static int named_pipe_destructor(struct named_pipe_client *npc)
{
if (npc->term_fn) {
npc->term_fn(npc->private_data);
}
return 0;
}
static void named_pipe_accept_done(struct tevent_req *subreq);
void named_pipe_accept_function(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx,
const char *pipe_name, int fd)
const char *pipe_name, int fd,
named_pipe_termination_fn *term_fn,
void *private_data)
{
struct named_pipe_client *npc;
struct tstream_context *plain;
@ -343,6 +356,10 @@ void named_pipe_accept_function(struct tevent_context *ev_ctx,
}
npc->ev = ev_ctx;
npc->msg_ctx = msg_ctx;
npc->term_fn = term_fn;
npc->private_data = private_data;
talloc_set_destructor(npc, named_pipe_destructor);
/* make sure socket is in NON blocking state */
ret = set_blocking(fd, false);

View File

@ -23,6 +23,7 @@
struct pipes_struct;
typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p);
typedef void (named_pipe_termination_fn)(void *private_data);
void set_incoming_fault(struct pipes_struct *p);
void process_complete_pdu(struct pipes_struct *p);
@ -32,7 +33,9 @@ bool setup_named_pipe_socket(const char *pipe_name,
struct messaging_context *msg_ctx);
void named_pipe_accept_function(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx,
const char *pipe_name, int fd);
const char *pipe_name, int fd,
named_pipe_termination_fn *term_fn,
void *private_data);
uint16_t setup_dcerpc_ncacn_tcpip_socket(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx,