svn commit: samba r10638 - in branches/SAMBA_4_0/source: include libcli/wrepl

metze at samba.org metze at samba.org
Fri Sep 30 01:55:30 GMT 2005


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;
 



More information about the samba-cvs mailing list