From bb77c2aa1e426dff40d8b7507bb562dcf9c779bd Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 30 Sep 2005 01:55:29 +0000 Subject: r10638: - add wrepl_socket_merge() function that creates a wrepl_socket on top of an existing socket, that is needed to handle WREPL_REPL_UPDATE in the server, because we need to flig the connection and act as client on it metze (This used to be commit 131e5dfe695d427e992b840439743f880b14d82d) --- source4/libcli/wrepl/winsrepl.c | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'source4/libcli/wrepl') diff --git a/source4/libcli/wrepl/winsrepl.c b/source4/libcli/wrepl/winsrepl.c index aae77feb29..aba3fc817e 100644 --- a/source4/libcli/wrepl/winsrepl.c +++ b/source4/libcli/wrepl/winsrepl.c @@ -327,9 +327,52 @@ struct wrepl_socket *wrepl_socket_init(TALLOC_CTX *mem_ctx, socket_get_fd(wrepl_socket->sock), EVENT_FD_WRITE, wrepl_connect_handler, wrepl_socket); + if (wrepl_socket->fde == NULL) { + goto failed; + } set_blocking(socket_get_fd(wrepl_socket->sock), False); + talloc_set_destructor(wrepl_socket, wrepl_socket_destructor); + + return wrepl_socket; + +failed: + talloc_free(wrepl_socket); + return NULL; +} + +/* + initialise a wrepl_socket from an already existing connection +*/ +struct wrepl_socket *wrepl_socket_merge(TALLOC_CTX *mem_ctx, + struct event_context *event_ctx, + struct socket_context *socket) +{ + struct wrepl_socket *wrepl_socket; + + wrepl_socket = talloc(mem_ctx, struct wrepl_socket); + if (wrepl_socket == NULL) goto failed; + + wrepl_socket->event_ctx = talloc_reference(wrepl_socket, event_ctx); + if (wrepl_socket->event_ctx == NULL) goto failed; + + wrepl_socket->sock = socket; + talloc_steal(wrepl_socket, wrepl_socket->sock); + + wrepl_socket->send_queue = NULL; + wrepl_socket->recv_queue = NULL; + wrepl_socket->request_timeout = WREPL_SOCKET_REQUEST_TIMEOUT; + wrepl_socket->dead = False; + + wrepl_socket->fde = event_add_fd(wrepl_socket->event_ctx, wrepl_socket, + socket_get_fd(wrepl_socket->sock), + 0, + wrepl_handler, wrepl_socket); + if (wrepl_socket->fde == NULL) { + goto failed; + } + talloc_set_destructor(wrepl_socket, wrepl_socket_destructor); return wrepl_socket; -- cgit