Author: metze Date: 2005-09-30 01:55:29 +0000 (Fri, 30 Sep 2005) New Revision: 10638
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=10638 Log: - 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 Modified: branches/SAMBA_4_0/source/include/structs.h branches/SAMBA_4_0/source/libcli/wrepl/winsrepl.c Changeset: Modified: branches/SAMBA_4_0/source/include/structs.h =================================================================== --- branches/SAMBA_4_0/source/include/structs.h 2005-09-30 01:49:32 UTC (rev 10637) +++ branches/SAMBA_4_0/source/include/structs.h 2005-09-30 01:55:29 UTC (rev 10638) @@ -298,3 +298,5 @@ struct param_context; struct param_section; struct param; + +struct socket_context; Modified: branches/SAMBA_4_0/source/libcli/wrepl/winsrepl.c =================================================================== --- branches/SAMBA_4_0/source/libcli/wrepl/winsrepl.c 2005-09-30 01:49:32 UTC (rev 10637) +++ branches/SAMBA_4_0/source/libcli/wrepl/winsrepl.c 2005-09-30 01:55:29 UTC (rev 10638) @@ -327,10 +327,53 @@ 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;
