[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-1368-g3003853

Stefan Metzmacher metze at samba.org
Fri May 1 15:43:58 GMT 2009


The branch, master has been updated
       via  30038534f4e846b14ec737a2726213d8a8db9d44 (commit)
       via  fe9b552023620baffd5847325aa0fd4ded00605c (commit)
       via  92a1890b90f5cb4bfb9988a521fcbfb22bebc82d (commit)
       via  2ae92c759925023cc6d357c4f4d9cc3b308186aa (commit)
       via  863c048d268fe75aded636859bd5c0689ac664db (commit)
       via  6d27b48b3fc7a0f92335308b7a5581892a9f8584 (commit)
       via  6ac61e6707079c8339ef8fa5f1c65ab173f3a79a (commit)
       via  eb723c2061ece9652638866b5336f3f377339c8f (commit)
       via  a0830f4cb93997e235acb95e1bdb438626601974 (commit)
       via  ee6d796c19e15f6a2e3044ce85ea9ff30dfeb5f0 (commit)
       via  8a090c4b8bb805bdc8debc8ca8ced5cd6f362d2e (commit)
       via  182a4b30dee11286b87431db09ec198e02b347cb (commit)
       via  b46599590f0b2801e1658dc32b6c074d5a14828c (commit)
       via  0db3b944bd4720be0ea66b2033ce7fd4eb27027f (commit)
       via  b4c5387e9f10369ed18fcfbe55a6fc8f8a2e08aa (commit)
       via  cc75ff1a37b1e7d9e75e718731fa30e4901850c7 (commit)
       via  66a2cd36c674bf4f235aa28f9c1786d9937ebe2a (commit)
       via  997eb9eb4323ec117625ae0ad90f32049f33d83b (commit)
       via  9dbb535aa5d79a748874d1a85ef8cb6f6b195e52 (commit)
      from  5604e8d614c938876b0a8cbc6f8c38262588f961 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 30038534f4e846b14ec737a2726213d8a8db9d44
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 7 18:35:30 2009 +0200

    s4:rpc_server: convert the socket based part to use the tstream interface
    
    metze

commit fe9b552023620baffd5847325aa0fd4ded00605c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 6 11:05:59 2009 +0200

    s4:smbd: depend on NAMED_PIPE_AUTH_TSTREAM...
    
    metze

commit 92a1890b90f5cb4bfb9988a521fcbfb22bebc82d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Mar 12 18:10:19 2009 +0100

    libcli/named_pipe_auth: add tstream_npa_connect_send/recv()
    
    Add a tstream client implemenation for the named pipe auth
    code. This supports byte and message mode.
    
    metze

commit 2ae92c759925023cc6d357c4f4d9cc3b308186aa
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 21 04:55:42 2009 +0200

    s4:smbd: add support for named_pipe_auth level 2 in service_named_pipe...
    
    metze

commit 863c048d268fe75aded636859bd5c0689ac664db
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 21 04:48:48 2009 +0200

    rerun "make idl"
    
    metze

commit 6d27b48b3fc7a0f92335308b7a5581892a9f8584
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 21 04:44:08 2009 +0200

    named_pipe_auth.idl: add level 2 and pass the client/server info and session key
    
    We also return can return the named pipe mode now.
    
    metze

commit 6ac61e6707079c8339ef8fa5f1c65ab173f3a79a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 18:49:24 2009 +0200

    tsocket: add tstream_readv_pdu_queue_send/recv()
    
    metze

commit eb723c2061ece9652638866b5336f3f377339c8f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 18:18:51 2009 +0200

    tsocket: add tstream_writev_queue_send/recv()
    
    metze

commit a0830f4cb93997e235acb95e1bdb438626601974
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 17:17:15 2009 +0200

    tsocket: add tstream_readv_pdu_send/recv()
    
    metze

commit ee6d796c19e15f6a2e3044ce85ea9ff30dfeb5f0
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 12:15:27 2009 +0200

    tsocket: add tstream implementation for bsd sockets (inet and unix)
    
    metze

commit 8a090c4b8bb805bdc8debc8ca8ced5cd6f362d2e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 18:08:10 2009 +0200

    tsocket: add tstream_context infrastructure similar to tdgram_context
    
    metze

commit 182a4b30dee11286b87431db09ec198e02b347cb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Apr 30 13:10:54 2009 +0200

    tsocket: rename tdgram_unix_dgram_socket() => tdgram_unix_socket()
    
    metze

commit b46599590f0b2801e1658dc32b6c074d5a14828c
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 17:54:08 2009 +0200

    tsocket: move tsocket_simple_int_recv() to tsocket.c
    
    metze

commit 0db3b944bd4720be0ea66b2033ce7fd4eb27027f
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 17:52:15 2009 +0200

    tsocket: move tsocket_sendto_queue_send/recv() to tsocket_helpers.c
    
    metze

commit b4c5387e9f10369ed18fcfbe55a6fc8f8a2e08aa
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Apr 14 10:44:25 2009 +0200

    tsocket: tdgram move input checks to the common code as there're needed for all backends
    
    We need to make sure that we free the sendto and recvfrom requests before
    the tdgram_context
    
    metze

commit cc75ff1a37b1e7d9e75e718731fa30e4901850c7
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 6 14:29:24 2009 +0200

    tsocket: for unix domain sockets we need to use sizeof(struct sockaddr_un)
    
    sizeof(struct sockaddr_storage) generates EINVAL.
    
    metze

commit 66a2cd36c674bf4f235aa28f9c1786d9937ebe2a
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 10 20:35:12 2009 +0200

    tsocket: return EINVAL when tdgram_sendto_send() is used with len == 0
    
    metze

commit 997eb9eb4323ec117625ae0ad90f32049f33d83b
Author: Stefan Metzmacher <metze at samba.org>
Date:   Mon Apr 6 14:27:24 2009 +0200

    tsocket: fix dependecies
    
    metze

commit 9dbb535aa5d79a748874d1a85ef8cb6f6b195e52
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Apr 3 17:29:12 2009 +0200

    tsocket: remove tsocket_context related stuff
    
    It will be replaced by tdgram_context and tstream_context.
    
    metze

-----------------------------------------------------------------------

Summary of changes:
 lib/tsocket/config.mk                |    8 +-
 lib/tsocket/tsocket.c                |  636 +++++++++-----
 lib/tsocket/tsocket.h                |  226 +++---
 lib/tsocket/tsocket_bsd.c            | 1644 +++++++++++++++++++---------------
 lib/tsocket/tsocket_connect.c        |  122 ---
 lib/tsocket/tsocket_helpers.c        |  599 ++++++++++---
 lib/tsocket/tsocket_internal.h       |  133 +--
 lib/tsocket/tsocket_readv.c          |  222 -----
 lib/tsocket/tsocket_writev.c         |  316 -------
 libcli/named_pipe_auth/config.mk     |    4 +
 libcli/named_pipe_auth/npa_tstream.c | 1059 ++++++++++++++++++++++
 libcli/named_pipe_auth/npa_tstream.h |   59 ++
 librpc/gen_ndr/named_pipe_auth.h     |   21 +-
 librpc/gen_ndr/ndr_named_pipe_auth.c |  300 ++++++-
 librpc/gen_ndr/ndr_named_pipe_auth.h |    2 +
 librpc/idl/named_pipe_auth.idl       |   20 +
 source3/Makefile.in                  |    5 +-
 source4/main.mk                      |    1 +
 source4/rpc_server/dcerpc_server.h   |    3 +
 source4/rpc_server/service_rpc.c     |  399 +++++++--
 source4/smbd/config.mk               |    2 +-
 source4/smbd/service_named_pipe.c    |   59 ++-
 22 files changed, 3862 insertions(+), 1978 deletions(-)
 delete mode 100644 lib/tsocket/tsocket_connect.c
 delete mode 100644 lib/tsocket/tsocket_readv.c
 delete mode 100644 lib/tsocket/tsocket_writev.c
 create mode 100644 libcli/named_pipe_auth/config.mk
 create mode 100644 libcli/named_pipe_auth/npa_tstream.c
 create mode 100644 libcli/named_pipe_auth/npa_tstream.h


Changeset truncated at 500 lines:

diff --git a/lib/tsocket/config.mk b/lib/tsocket/config.mk
index 2e05f54..ca2978a 100644
--- a/lib/tsocket/config.mk
+++ b/lib/tsocket/config.mk
@@ -1,13 +1,11 @@
 [SUBSYSTEM::LIBTSOCKET]
-PRIVATE_DEPENDENCIES = LIBTALLOC LIBTEVENT LIBREPLACE_NETWORK
+PRIVATE_DEPENDENCIES = LIBREPLACE_NETWORK
+PUBLIC_DEPENDENCIES = LIBTALLOC LIBTEVENT
 
 LIBTSOCKET_OBJ_FILES = $(addprefix ../lib/tsocket/, \
 					tsocket.o \
 					tsocket_helpers.o \
-					tsocket_bsd.o \
-					tsocket_connect.o \
-					tsocket_writev.o \
-					tsocket_readv.o)
+					tsocket_bsd.o)
 
 PUBLIC_HEADERS += $(addprefix ../lib/tsocket/, \
 				 tsocket.h\
diff --git a/lib/tsocket/tsocket.c b/lib/tsocket/tsocket.c
index 076c647..e618fb7 100644
--- a/lib/tsocket/tsocket.c
+++ b/lib/tsocket/tsocket.c
@@ -22,144 +22,36 @@
 */
 
 #include "replace.h"
-#include "system/network.h"
+#include "system/filesys.h"
 #include "tsocket.h"
 #include "tsocket_internal.h"
 
-static int tsocket_context_destructor(struct tsocket_context *sock)
+int tsocket_simple_int_recv(struct tevent_req *req, int *perrno)
 {
-	tsocket_disconnect(sock);
-	return 0;
-}
-
-struct tsocket_context *_tsocket_context_create(TALLOC_CTX *mem_ctx,
-						const struct tsocket_context_ops *ops,
-						void *pstate,
-						size_t psize,
-						const char *type,
-						const char *location)
-{
-	void **ppstate = (void **)pstate;
-	struct tsocket_context *sock;
+	enum tevent_req_state state;
+	uint64_t error;
 
-	sock = talloc_zero(mem_ctx, struct tsocket_context);
-	if (!sock) {
-		return NULL;
+	if (!tevent_req_is_error(req, &state, &error)) {
+		return 0;
 	}
-	sock->ops = ops;
-	sock->location = location;
-	sock->private_data = talloc_size(sock, psize);
-	if (!sock->private_data) {
-		talloc_free(sock);
-		return NULL;
-	}
-	talloc_set_name_const(sock->private_data, type);
-
-	talloc_set_destructor(sock, tsocket_context_destructor);
-
-	*ppstate = sock->private_data;
-	return sock;
-}
-
-int tsocket_set_event_context(struct tsocket_context *sock,
-			      struct tevent_context *ev)
-{
-	return sock->ops->set_event_context(sock, ev);
-}
-
-int tsocket_set_readable_handler(struct tsocket_context *sock,
-				 tsocket_event_handler_t handler,
-				 void *private_data)
-{
-	return sock->ops->set_read_handler(sock, handler, private_data);
-}
-
-int tsocket_set_writeable_handler(struct tsocket_context *sock,
-				  tsocket_event_handler_t handler,
-				  void *private_data)
-{
-	return sock->ops->set_write_handler(sock, handler, private_data);
-}
-
-int tsocket_connect(struct tsocket_context *sock,
-		    const struct tsocket_address *remote_addr)
-{
-	return sock->ops->connect_to(sock, remote_addr);
-}
-
-int tsocket_listen(struct tsocket_context *sock,
-		   int queue_size)
-{
-	return sock->ops->listen_on(sock, queue_size);
-}
-
-int _tsocket_accept(struct tsocket_context *sock,
-		    TALLOC_CTX *mem_ctx,
-		    struct tsocket_context **new_sock,
-		    const char *location)
-{
-	return sock->ops->accept_new(sock, mem_ctx, new_sock, location);
-}
-
-ssize_t tsocket_pending(struct tsocket_context *sock)
-{
-	return sock->ops->pending_data(sock);
-}
-
-int tsocket_readv(struct tsocket_context *sock,
-		  const struct iovec *vector, size_t count)
-{
-	return sock->ops->readv_data(sock, vector, count);
-}
-
-int tsocket_writev(struct tsocket_context *sock,
-		   const struct iovec *vector, size_t count)
-{
-	return sock->ops->writev_data(sock, vector, count);
-}
 
-int tsocket_get_status(const struct tsocket_context *sock)
-{
-	return sock->ops->get_status(sock);
-}
-
-int _tsocket_get_local_address(const struct tsocket_context *sock,
-			       TALLOC_CTX *mem_ctx,
-			       struct tsocket_address **local_addr,
-			       const char *location)
-{
-	return sock->ops->get_local_address(sock, mem_ctx,
-					    local_addr, location);
-}
-
-int _tsocket_get_remote_address(const struct tsocket_context *sock,
-				TALLOC_CTX *mem_ctx,
-				struct tsocket_address **remote_addr,
-				const char *location)
-{
-	return sock->ops->get_remote_address(sock, mem_ctx,
-					     remote_addr, location);
-}
-
-int tsocket_get_option(const struct tsocket_context *sock,
-		       const char *option,
-		       TALLOC_CTX *mem_ctx,
-		       char **value)
-{
-	return sock->ops->get_option(sock, option, mem_ctx, value);
-}
-
-int tsocket_set_option(const struct tsocket_context *sock,
-		       const char *option,
-		       bool force,
-		       const char *value)
-{
-	return sock->ops->set_option(sock, option, force, value);
-}
+	switch (state) {
+	case TEVENT_REQ_NO_MEMORY:
+		*perrno = ENOMEM;
+		return -1;
+	case TEVENT_REQ_TIMED_OUT:
+		*perrno = ETIMEDOUT;
+		return -1;
+	case TEVENT_REQ_USER_ERROR:
+		*perrno = (int)error;
+		return -1;
+	default:
+		*perrno = EIO;
+		return -1;
+	}
 
-void tsocket_disconnect(struct tsocket_context *sock)
-{
-	sock->ops->disconnect(sock);
+	*perrno = EIO;
+	return -1;
 }
 
 struct tsocket_address *_tsocket_address_create(TALLOC_CTX *mem_ctx,
@@ -205,21 +97,28 @@ struct tsocket_address *_tsocket_address_copy(const struct tsocket_address *addr
 	return addr->ops->copy(addr, mem_ctx, location);
 }
 
-int _tsocket_address_create_socket(const struct tsocket_address *addr,
-				   enum tsocket_type type,
-				   TALLOC_CTX *mem_ctx,
-				   struct tsocket_context **sock,
-				   const char *location)
-{
-	return addr->ops->create_socket(addr, type, mem_ctx, sock, location);
-}
-
 struct tdgram_context {
 	const char *location;
 	const struct tdgram_context_ops *ops;
 	void *private_data;
+
+	struct tevent_req *recvfrom_req;
+	struct tevent_req *sendto_req;
 };
 
+static int tdgram_context_destructor(struct tdgram_context *dgram)
+{
+	if (dgram->recvfrom_req) {
+		tevent_req_received(dgram->recvfrom_req);
+	}
+
+	if (dgram->sendto_req) {
+		tevent_req_received(dgram->sendto_req);
+	}
+
+	return 0;
+}
+
 struct tdgram_context *_tdgram_context_create(TALLOC_CTX *mem_ctx,
 					const struct tdgram_context_ops *ops,
 					void *pstate,
@@ -235,8 +134,10 @@ struct tdgram_context *_tdgram_context_create(TALLOC_CTX *mem_ctx,
 	if (dgram == NULL) {
 		return NULL;
 	}
-	dgram->location	= location;
-	dgram->ops	= ops;
+	dgram->location		= location;
+	dgram->ops		= ops;
+	dgram->recvfrom_req	= NULL;
+	dgram->sendto_req	= NULL;
 
 	state = talloc_size(dgram, psize);
 	if (state == NULL) {
@@ -247,6 +148,8 @@ struct tdgram_context *_tdgram_context_create(TALLOC_CTX *mem_ctx,
 
 	dgram->private_data = state;
 
+	talloc_set_destructor(dgram, tdgram_context_destructor);
+
 	*ppstate = state;
 	return dgram;
 }
@@ -258,11 +161,21 @@ void *_tdgram_context_data(struct tdgram_context *dgram)
 
 struct tdgram_recvfrom_state {
 	const struct tdgram_context_ops *ops;
+	struct tdgram_context *dgram;
 	uint8_t *buf;
 	size_t len;
 	struct tsocket_address *src;
 };
 
+static int tdgram_recvfrom_destructor(struct tdgram_recvfrom_state *state)
+{
+	if (state->dgram) {
+		state->dgram->recvfrom_req = NULL;
+	}
+
+	return 0;
+}
+
 static void tdgram_recvfrom_done(struct tevent_req *subreq);
 
 struct tevent_req *tdgram_recvfrom_send(TALLOC_CTX *mem_ctx,
@@ -280,6 +193,18 @@ struct tevent_req *tdgram_recvfrom_send(TALLOC_CTX *mem_ctx,
 	}
 
 	state->ops = dgram->ops;
+	state->dgram = dgram;
+	state->buf = NULL;
+	state->len = 0;
+	state->src = NULL;
+
+	if (dgram->recvfrom_req) {
+		tevent_req_error(req, EBUSY);
+		goto post;
+	}
+	dgram->recvfrom_req = req;
+
+	talloc_set_destructor(state, tdgram_recvfrom_destructor);
 
 	subreq = state->ops->recvfrom_send(state, ev, dgram);
 	if (tevent_req_nomem(subreq, req)) {
@@ -340,9 +265,19 @@ ssize_t tdgram_recvfrom_recv(struct tevent_req *req,
 
 struct tdgram_sendto_state {
 	const struct tdgram_context_ops *ops;
+	struct tdgram_context *dgram;
 	ssize_t ret;
 };
 
+static int tdgram_sendto_destructor(struct tdgram_sendto_state *state)
+{
+	if (state->dgram) {
+		state->dgram->sendto_req = NULL;
+	}
+
+	return 0;
+}
+
 static void tdgram_sendto_done(struct tevent_req *subreq);
 
 struct tevent_req *tdgram_sendto_send(TALLOC_CTX *mem_ctx,
@@ -362,8 +297,22 @@ struct tevent_req *tdgram_sendto_send(TALLOC_CTX *mem_ctx,
 	}
 
 	state->ops = dgram->ops;
+	state->dgram = dgram;
 	state->ret = -1;
 
+	if (len == 0) {
+		tevent_req_error(req, EINVAL);
+		goto post;
+	}
+
+	if (dgram->sendto_req) {
+		tevent_req_error(req, EBUSY);
+		goto post;
+	}
+	dgram->sendto_req = req;
+
+	talloc_set_destructor(state, tdgram_sendto_destructor);
+
 	subreq = state->ops->sendto_send(state, ev, dgram,
 					 buf, len, dst);
 	if (tevent_req_nomem(subreq, req)) {
@@ -436,6 +385,11 @@ struct tevent_req *tdgram_disconnect_send(TALLOC_CTX *mem_ctx,
 
 	state->ops = dgram->ops;
 
+	if (dgram->recvfrom_req || dgram->sendto_req) {
+		tevent_req_error(req, EBUSY);
+		goto post;
+	}
+
 	subreq = state->ops->disconnect_send(state, ev, dgram);
 	if (tevent_req_nomem(subreq, req)) {
 		goto post;
@@ -478,75 +432,149 @@ int tdgram_disconnect_recv(struct tevent_req *req,
 	return ret;
 }
 
-struct tdgram_sendto_queue_state {
-	/* this structs are owned by the caller */
-	struct {
-		struct tevent_context *ev;
-		struct tdgram_context *dgram;
-		const uint8_t *buf;
-		size_t len;
-		const struct tsocket_address *dst;
-	} caller;
-	ssize_t ret;
+struct tstream_context {
+	const char *location;
+	const struct tstream_context_ops *ops;
+	void *private_data;
+
+	struct tevent_req *readv_req;
+	struct tevent_req *writev_req;
 };
 
-static void tdgram_sendto_queue_trigger(struct tevent_req *req,
-					 void *private_data);
-static void tdgram_sendto_queue_done(struct tevent_req *subreq);
-
-/**
- * @brief Queue a dgram blob for sending through the socket
- * @param[in] mem_ctx	The memory context for the result
- * @param[in] ev	The event context the operation should work on
- * @param[in] dgram	The tdgram_context to send the message buffer
- * @param[in] queue	The existing dgram queue
- * @param[in] buf	The message buffer
- * @param[in] len	The message length
- * @param[in] dst	The destination socket address
- * @retval		The async request handle
- *
- * This function queues a blob for sending to destination through an existing
- * dgram socket. The async callback is triggered when the whole blob is
- * delivered to the underlying system socket.
- *
- * The caller needs to make sure that all non-scalar input parameters hang
- * arround for the whole lifetime of the request.
- */
-struct tevent_req *tdgram_sendto_queue_send(TALLOC_CTX *mem_ctx,
-					    struct tevent_context *ev,
-					    struct tdgram_context *dgram,
-					    struct tevent_queue *queue,
-					    const uint8_t *buf,
-					    size_t len,
-					    struct tsocket_address *dst)
+static int tstream_context_destructor(struct tstream_context *stream)
+{
+	if (stream->readv_req) {
+		tevent_req_received(stream->readv_req);
+	}
+
+	if (stream->writev_req) {
+		tevent_req_received(stream->writev_req);
+	}
+
+	return 0;
+}
+
+struct tstream_context *_tstream_context_create(TALLOC_CTX *mem_ctx,
+					const struct tstream_context_ops *ops,
+					void *pstate,
+					size_t psize,
+					const char *type,
+					const char *location)
+{
+	struct tstream_context *stream;
+	void **ppstate = (void **)pstate;
+	void *state;
+
+	stream = talloc(mem_ctx, struct tstream_context);
+	if (stream == NULL) {
+		return NULL;
+	}
+	stream->location	= location;
+	stream->ops		= ops;
+	stream->readv_req	= NULL;
+	stream->writev_req	= NULL;
+
+	state = talloc_size(stream, psize);
+	if (state == NULL) {
+		talloc_free(stream);
+		return NULL;
+	}
+	talloc_set_name_const(state, type);
+
+	stream->private_data = state;
+
+	talloc_set_destructor(stream, tstream_context_destructor);
+
+	*ppstate = state;
+	return stream;
+}
+
+void *_tstream_context_data(struct tstream_context *stream)
+{
+	return stream->private_data;
+}
+
+ssize_t tstream_pending_bytes(struct tstream_context *stream)
+{
+	return stream->ops->pending_bytes(stream);
+}
+
+struct tstream_readv_state {
+	const struct tstream_context_ops *ops;
+	struct tstream_context *stream;
+	int ret;
+};
+
+static int tstream_readv_destructor(struct tstream_readv_state *state)
+{
+	if (state->stream) {
+		state->stream->readv_req = NULL;
+	}
+
+	return 0;
+}
+
+static void tstream_readv_done(struct tevent_req *subreq);
+
+struct tevent_req *tstream_readv_send(TALLOC_CTX *mem_ctx,
+				      struct tevent_context *ev,
+				      struct tstream_context *stream,
+				      struct iovec *vector,
+				      size_t count)
 {
 	struct tevent_req *req;
-	struct tdgram_sendto_queue_state *state;
-	bool ok;
+	struct tstream_readv_state *state;
+	struct tevent_req *subreq;
+	int to_read = 0;
+	size_t i;
 
 	req = tevent_req_create(mem_ctx, &state,
-				struct tdgram_sendto_queue_state);
-	if (!req) {
+				struct tstream_readv_state);
+	if (req == NULL) {
 		return NULL;
 	}
 
-	state->caller.ev	= ev;
-	state->caller.dgram	= dgram;
-	state->caller.buf	= buf;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list