[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha7-706-g5f753e2

Volker Lendecke vlendec at samba.org
Tue Mar 24 12:24:14 GMT 2009


The branch, master has been updated
       via  5f753e22f1f536e0e227db0f453809ad6cfacaf6 (commit)
       via  fa6283683981c61406967ede7ad48910b602f5a4 (commit)
       via  8e0d9d002a4b0266c9d910bf7ce9c0510c89b09f (commit)
       via  22badee4bf7d75a4337a3826847070ebd7464ce8 (commit)
       via  1724f2ff316d20dd7e67fed59f467d4a3e187114 (commit)
       via  f88990ec7ec92f0b8371419bfdf777d1d624abf9 (commit)
       via  545ed5b52e41f495a48370ba4218834337b85dd2 (commit)
       via  7a429fb369f608c0aaad20a89baf86aebf615440 (commit)
       via  7573bb758e843912335af7ee3a60b21a31b5118e (commit)
       via  1dd08834586484f0a463ba9378e03f742871d517 (commit)
       via  6a2e71b12dbfed195859f0fc521ec5a5c145e1f5 (commit)
      from  f91565544f96be60cb6464d739008f8241e55d5c (commit)

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


- Log -----------------------------------------------------------------
commit 5f753e22f1f536e0e227db0f453809ad6cfacaf6
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 23:38:04 2009 +0100

    Convert rpc_pipe_bind to tevent_req

commit fa6283683981c61406967ede7ad48910b602f5a4
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 23:30:18 2009 +0100

    Convert rpc_cli_transport->trans to tevent_req

commit 8e0d9d002a4b0266c9d910bf7ce9c0510c89b09f
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 23:20:03 2009 +0100

    Convert rpc_cli_transport->write to tevent_req

commit 22badee4bf7d75a4337a3826847070ebd7464ce8
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 23:03:37 2009 +0100

    Convert rpc_cli_transport->read to tevent_req

commit 1724f2ff316d20dd7e67fed59f467d4a3e187114
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 22:49:29 2009 +0100

    Convert rpc_api_pipe_req to tevent_req

commit f88990ec7ec92f0b8371419bfdf777d1d624abf9
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 22:33:00 2009 +0100

    Convert rpc_api_pipe to tevent_req

commit 545ed5b52e41f495a48370ba4218834337b85dd2
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 22:13:44 2009 +0100

    Convert cli_api_pipe to tevent_req

commit 7a429fb369f608c0aaad20a89baf86aebf615440
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 21:57:19 2009 +0100

    Convert get_complete_frag to tevent_req

commit 7573bb758e843912335af7ee3a60b21a31b5118e
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 21:49:19 2009 +0100

    Convert rpc_write to tevent_req

commit 1dd08834586484f0a463ba9378e03f742871d517
Author: Volker Lendecke <vl at samba.org>
Date:   Mon Mar 23 21:37:27 2009 +0100

    Convert rpc_read to tevent_req

commit 6a2e71b12dbfed195859f0fc521ec5a5c145e1f5
Author: Volker Lendecke <vl at samba.org>
Date:   Sun Mar 1 22:25:51 2009 +0100

    Add tevent_req_simple_recv_ntstatus()

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

Summary of changes:
 lib/util/tevent_ntstatus.c              |   10 +
 lib/util/tevent_ntstatus.h              |    1 +
 source3/include/client.h                |   32 +-
 source3/include/proto.h                 |   22 +-
 source3/rpc_client/cli_pipe.c           |  580 +++++++++++++++----------------
 source3/rpc_client/rpc_transport_np.c   |  127 ++++----
 source3/rpc_client/rpc_transport_smbd.c |   93 +++---
 source3/rpc_client/rpc_transport_sock.c |   82 +++---
 8 files changed, 465 insertions(+), 482 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/tevent_ntstatus.c b/lib/util/tevent_ntstatus.c
index 1a34e9c..4e43399 100644
--- a/lib/util/tevent_ntstatus.c
+++ b/lib/util/tevent_ntstatus.c
@@ -49,3 +49,13 @@ bool tevent_req_is_nterror(struct tevent_req *req, NTSTATUS *status)
 	}
 	return true;
 }
+
+NTSTATUS tevent_req_simple_recv_ntstatus(struct tevent_req *req)
+{
+	NTSTATUS status;
+
+	if (tevent_req_is_nterror(req, &status)) {
+		return status;
+	}
+	return NT_STATUS_OK;
+}
diff --git a/lib/util/tevent_ntstatus.h b/lib/util/tevent_ntstatus.h
index 84c275f..d7194a9 100644
--- a/lib/util/tevent_ntstatus.h
+++ b/lib/util/tevent_ntstatus.h
@@ -28,5 +28,6 @@
 
 bool tevent_req_nterror(struct tevent_req *req, NTSTATUS status);
 bool tevent_req_is_nterror(struct tevent_req *req, NTSTATUS *pstatus);
+NTSTATUS tevent_req_simple_recv_ntstatus(struct tevent_req *req);
 
 #endif
diff --git a/source3/include/client.h b/source3/include/client.h
index db19f34..73a1d7b 100644
--- a/source3/include/client.h
+++ b/source3/include/client.h
@@ -71,26 +71,26 @@ struct rpc_cli_transport {
 	/**
 	 * Trigger an async read from the server. May return a short read.
 	 */
-	struct async_req *(*read_send)(TALLOC_CTX *mem_ctx,
-				       struct event_context *ev,
-                                       uint8_t *data, size_t size,
-				       void *priv);
+	struct tevent_req *(*read_send)(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					uint8_t *data, size_t size,
+					void *priv);
 	/**
 	 * Get the result from the read_send operation.
 	 */
-	NTSTATUS (*read_recv)(struct async_req *req, ssize_t *preceived);
+	NTSTATUS (*read_recv)(struct tevent_req *req, ssize_t *preceived);
 
 	/**
 	 * Trigger an async write to the server. May return a short write.
 	 */
-	struct async_req *(*write_send)(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					const uint8_t *data, size_t size,
-					void *priv);
+	struct tevent_req *(*write_send)(TALLOC_CTX *mem_ctx,
+					 struct event_context *ev,
+					 const uint8_t *data, size_t size,
+					 void *priv);
 	/**
 	 * Get the result from the read_send operation.
 	 */
-	NTSTATUS (*write_recv)(struct async_req *req, ssize_t *psent);
+	NTSTATUS (*write_recv)(struct tevent_req *req, ssize_t *psent);
 
 	/**
 	 * This is an optimization for the SMB transport. It models the
@@ -98,15 +98,15 @@ struct rpc_cli_transport {
 	 * trip. The transport implementation is free to set this to NULL,
 	 * cli_pipe.c will fall back to the explicit write/read routines.
 	 */
-	struct async_req *(*trans_send)(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					uint8_t *data, size_t data_len,
-					uint32_t max_rdata_len,
-					void *priv);
+	struct tevent_req *(*trans_send)(TALLOC_CTX *mem_ctx,
+					 struct event_context *ev,
+					 uint8_t *data, size_t data_len,
+					 uint32_t max_rdata_len,
+					 void *priv);
 	/**
 	 * Get the result from the trans_send operation.
 	 */
-	NTSTATUS (*trans_recv)(struct async_req *req, TALLOC_CTX *mem_ctx,
+	NTSTATUS (*trans_recv)(struct tevent_req *req, TALLOC_CTX *mem_ctx,
 			       uint8_t **prdata, uint32_t *prdata_len);
 	void *priv;
 };
diff --git a/source3/include/proto.h b/source3/include/proto.h
index d15e45a..3b4b1cf 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -5256,22 +5256,22 @@ NTSTATUS rpccli_netlogon_set_trust_password(struct rpc_pipe_client *cli,
 
 /* The following definitions come from rpc_client/cli_pipe.c  */
 
-struct async_req *rpc_api_pipe_req_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct rpc_pipe_client *cli,
-					uint8_t op_num,
-					prs_struct *req_data);
-NTSTATUS rpc_api_pipe_req_recv(struct async_req *req, TALLOC_CTX *mem_ctx,
+struct tevent_req *rpc_api_pipe_req_send(TALLOC_CTX *mem_ctx,
+					 struct event_context *ev,
+					 struct rpc_pipe_client *cli,
+					 uint8_t op_num,
+					 prs_struct *req_data);
+NTSTATUS rpc_api_pipe_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
 			       prs_struct *reply_pdu);
 NTSTATUS rpc_api_pipe_req(TALLOC_CTX *mem_ctx, struct rpc_pipe_client *cli,
 			uint8 op_num,
 			prs_struct *in_data,
 			prs_struct *out_data);
-struct async_req *rpc_pipe_bind_send(TALLOC_CTX *mem_ctx,
-				     struct event_context *ev,
-				     struct rpc_pipe_client *cli,
-				     struct cli_pipe_auth_data *auth);
-NTSTATUS rpc_pipe_bind_recv(struct async_req *req);
+struct tevent_req *rpc_pipe_bind_send(TALLOC_CTX *mem_ctx,
+				      struct event_context *ev,
+				      struct rpc_pipe_client *cli,
+				      struct cli_pipe_auth_data *auth);
+NTSTATUS rpc_pipe_bind_recv(struct tevent_req *req);
 NTSTATUS rpc_pipe_bind(struct rpc_pipe_client *cli,
 		       struct cli_pipe_auth_data *auth);
 unsigned int rpccli_set_timeout(struct rpc_pipe_client *cli,
diff --git a/source3/rpc_client/cli_pipe.c b/source3/rpc_client/cli_pipe.c
index 57f49fb..6b83c17 100644
--- a/source3/rpc_client/cli_pipe.c
+++ b/source3/rpc_client/cli_pipe.c
@@ -207,18 +207,18 @@ struct rpc_read_state {
 	size_t num_read;
 };
 
-static void rpc_read_done(struct async_req *subreq);
+static void rpc_read_done(struct tevent_req *subreq);
 
-static struct async_req *rpc_read_send(TALLOC_CTX *mem_ctx,
-				       struct event_context *ev,
-				       struct rpc_cli_transport *transport,
-				       uint8_t *data, size_t size)
+static struct tevent_req *rpc_read_send(TALLOC_CTX *mem_ctx,
+					struct event_context *ev,
+					struct rpc_cli_transport *transport,
+					uint8_t *data, size_t size)
 {
-	struct async_req *result, *subreq;
+	struct tevent_req *req, *subreq;
 	struct rpc_read_state *state;
 
-	if (!async_req_setup(mem_ctx, &result, &state,
-			     struct rpc_read_state)) {
+	req = tevent_req_create(mem_ctx, &state, struct rpc_read_state);
+	if (req == NULL) {
 		return NULL;
 	}
 	state->ev = ev;
@@ -234,34 +234,33 @@ static struct async_req *rpc_read_send(TALLOC_CTX *mem_ctx,
 	if (subreq == NULL) {
 		goto fail;
 	}
-	subreq->async.fn = rpc_read_done;
-	subreq->async.priv = result;
-	return result;
+	tevent_req_set_callback(subreq, rpc_read_done, req);
+	return req;
 
  fail:
-	TALLOC_FREE(result);
+	TALLOC_FREE(req);
 	return NULL;
 }
 
-static void rpc_read_done(struct async_req *subreq)
+static void rpc_read_done(struct tevent_req *subreq)
 {
-	struct async_req *req = talloc_get_type_abort(
-		subreq->async.priv, struct async_req);
-	struct rpc_read_state *state = talloc_get_type_abort(
-		req->private_data, struct rpc_read_state);
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct rpc_read_state *state = tevent_req_data(
+		req, struct rpc_read_state);
 	NTSTATUS status;
 	ssize_t received;
 
 	status = state->transport->read_recv(subreq, &received);
 	TALLOC_FREE(subreq);
 	if (!NT_STATUS_IS_OK(status)) {
-		async_req_nterror(req, status);
+		tevent_req_nterror(req, status);
 		return;
 	}
 
 	state->num_read += received;
 	if (state->num_read == state->size) {
-		async_req_done(req);
+		tevent_req_done(req);
 		return;
 	}
 
@@ -269,16 +268,15 @@ static void rpc_read_done(struct async_req *subreq)
 					     state->data + state->num_read,
 					     state->size - state->num_read,
 					     state->transport->priv);
-	if (async_req_nomem(subreq, req)) {
+	if (tevent_req_nomem(subreq, req)) {
 		return;
 	}
-	subreq->async.fn = rpc_read_done;
-	subreq->async.priv = req;
+	tevent_req_set_callback(subreq, rpc_read_done, req);
 }
 
-static NTSTATUS rpc_read_recv(struct async_req *req)
+static NTSTATUS rpc_read_recv(struct tevent_req *req)
 {
-	return async_req_simple_recv_ntstatus(req);
+	return tevent_req_simple_recv_ntstatus(req);
 }
 
 struct rpc_write_state {
@@ -289,18 +287,18 @@ struct rpc_write_state {
 	size_t num_written;
 };
 
-static void rpc_write_done(struct async_req *subreq);
+static void rpc_write_done(struct tevent_req *subreq);
 
-static struct async_req *rpc_write_send(TALLOC_CTX *mem_ctx,
-					struct event_context *ev,
-					struct rpc_cli_transport *transport,
-					const uint8_t *data, size_t size)
+static struct tevent_req *rpc_write_send(TALLOC_CTX *mem_ctx,
+					 struct event_context *ev,
+					 struct rpc_cli_transport *transport,
+					 const uint8_t *data, size_t size)
 {
-	struct async_req *result, *subreq;
+	struct tevent_req *req, *subreq;
 	struct rpc_write_state *state;
 
-	if (!async_req_setup(mem_ctx, &result, &state,
-			     struct rpc_write_state)) {
+	req = tevent_req_create(mem_ctx, &state, struct rpc_write_state);
+	if (req == NULL) {
 		return NULL;
 	}
 	state->ev = ev;
@@ -315,34 +313,33 @@ static struct async_req *rpc_write_send(TALLOC_CTX *mem_ctx,
 	if (subreq == NULL) {
 		goto fail;
 	}
-	subreq->async.fn = rpc_write_done;
-	subreq->async.priv = result;
-	return result;
+	tevent_req_set_callback(subreq, rpc_write_done, req);
+	return req;
  fail:
-	TALLOC_FREE(result);
+	TALLOC_FREE(req);
 	return NULL;
 }
 
-static void rpc_write_done(struct async_req *subreq)
+static void rpc_write_done(struct tevent_req *subreq)
 {
-	struct async_req *req = talloc_get_type_abort(
-		subreq->async.priv, struct async_req);
-	struct rpc_write_state *state = talloc_get_type_abort(
-		req->private_data, struct rpc_write_state);
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct rpc_write_state *state = tevent_req_data(
+		req, struct rpc_write_state);
 	NTSTATUS status;
 	ssize_t written;
 
 	status = state->transport->write_recv(subreq, &written);
 	TALLOC_FREE(subreq);
 	if (!NT_STATUS_IS_OK(status)) {
-		async_req_nterror(req, status);
+		tevent_req_nterror(req, status);
 		return;
 	}
 
 	state->num_written += written;
 
 	if (state->num_written == state->size) {
-		async_req_done(req);
+		tevent_req_done(req);
 		return;
 	}
 
@@ -350,16 +347,15 @@ static void rpc_write_done(struct async_req *subreq)
 					      state->data + state->num_written,
 					      state->size - state->num_written,
 					      state->transport->priv);
-	if (async_req_nomem(subreq, req)) {
+	if (tevent_req_nomem(subreq, req)) {
 		return;
 	}
-	subreq->async.fn = rpc_write_done;
-	subreq->async.priv = req;
+	tevent_req_set_callback(subreq, rpc_write_done, req);
 }
 
-static NTSTATUS rpc_write_recv(struct async_req *req)
+static NTSTATUS rpc_write_recv(struct tevent_req *req)
 {
-	return async_req_simple_recv_ntstatus(req);
+	return tevent_req_simple_recv_ntstatus(req);
 }
 
 
@@ -399,22 +395,23 @@ struct get_complete_frag_state {
 	prs_struct *pdu;
 };
 
-static void get_complete_frag_got_header(struct async_req *subreq);
-static void get_complete_frag_got_rest(struct async_req *subreq);
+static void get_complete_frag_got_header(struct tevent_req *subreq);
+static void get_complete_frag_got_rest(struct tevent_req *subreq);
 
-static struct async_req *get_complete_frag_send(TALLOC_CTX *mem_ctx,
-					       struct event_context *ev,
-					       struct rpc_pipe_client *cli,
-					       struct rpc_hdr_info *prhdr,
-					       prs_struct *pdu)
+static struct tevent_req *get_complete_frag_send(TALLOC_CTX *mem_ctx,
+						 struct event_context *ev,
+						 struct rpc_pipe_client *cli,
+						 struct rpc_hdr_info *prhdr,
+						 prs_struct *pdu)
 {
-	struct async_req *result, *subreq;
+	struct tevent_req *req, *subreq;
 	struct get_complete_frag_state *state;
 	uint32_t pdu_len;
 	NTSTATUS status;
 
-	if (!async_req_setup(mem_ctx, &result, &state,
-			     struct get_complete_frag_state)) {
+	req = tevent_req_create(mem_ctx, &state,
+				struct get_complete_frag_state);
+	if (req == NULL) {
 		return NULL;
 	}
 	state->ev = ev;
@@ -437,9 +434,9 @@ static struct async_req *get_complete_frag_send(TALLOC_CTX *mem_ctx,
 			status = NT_STATUS_NO_MEMORY;
 			goto post_status;
 		}
-		subreq->async.fn = get_complete_frag_got_header;
-		subreq->async.priv = result;
-		return result;
+		tevent_req_set_callback(subreq, get_complete_frag_got_header,
+					req);
+		return req;
 	}
 
 	status = parse_rpc_header(cli, prhdr, pdu);
@@ -463,43 +460,44 @@ static struct async_req *get_complete_frag_send(TALLOC_CTX *mem_ctx,
 			status = NT_STATUS_NO_MEMORY;
 			goto post_status;
 		}
-		subreq->async.fn = get_complete_frag_got_rest;
-		subreq->async.priv = result;
-		return result;
+		tevent_req_set_callback(subreq, get_complete_frag_got_rest,
+					req);
+		return req;
 	}
 
 	status = NT_STATUS_OK;
  post_status:
-	if (async_post_ntstatus(result, ev, status)) {
-		return result;
+	if (NT_STATUS_IS_OK(status)) {
+		tevent_req_done(req);
+	} else {
+		tevent_req_nterror(req, status);
 	}
-	TALLOC_FREE(result);
-	return NULL;
+	return tevent_req_post(req, ev);
 }
 
-static void get_complete_frag_got_header(struct async_req *subreq)
+static void get_complete_frag_got_header(struct tevent_req *subreq)
 {
-	struct async_req *req = talloc_get_type_abort(
-		subreq->async.priv, struct async_req);
-	struct get_complete_frag_state *state = talloc_get_type_abort(
-		req->private_data, struct get_complete_frag_state);
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
+	struct get_complete_frag_state *state = tevent_req_data(
+		req, struct get_complete_frag_state);
 	NTSTATUS status;
 
 	status = rpc_read_recv(subreq);
 	TALLOC_FREE(subreq);
 	if (!NT_STATUS_IS_OK(status)) {
-		async_req_nterror(req, status);
+		tevent_req_nterror(req, status);
 		return;
 	}
 
 	status = parse_rpc_header(state->cli, state->prhdr, state->pdu);
 	if (!NT_STATUS_IS_OK(status)) {
-		async_req_nterror(req, status);
+		tevent_req_nterror(req, status);
 		return;
 	}
 
 	if (!rpc_grow_buffer(state->pdu, state->prhdr->frag_len)) {
-		async_req_nterror(req, NT_STATUS_NO_MEMORY);
+		tevent_req_nterror(req, NT_STATUS_NO_MEMORY);
 		return;
 	}
 
@@ -512,31 +510,30 @@ static void get_complete_frag_got_header(struct async_req *subreq)
 		state, state->ev, state->cli->transport,
 		(uint8_t *)(prs_data_p(state->pdu) + RPC_HEADER_LEN),
 		state->prhdr->frag_len - RPC_HEADER_LEN);
-	if (async_req_nomem(subreq, req)) {
+	if (tevent_req_nomem(subreq, req)) {
 		return;
 	}
-	subreq->async.fn = get_complete_frag_got_rest;
-	subreq->async.priv = req;
+	tevent_req_set_callback(subreq, get_complete_frag_got_rest, req);
 }
 
-static void get_complete_frag_got_rest(struct async_req *subreq)
+static void get_complete_frag_got_rest(struct tevent_req *subreq)
 {
-	struct async_req *req = talloc_get_type_abort(
-		subreq->async.priv, struct async_req);
+	struct tevent_req *req = tevent_req_callback_data(
+		subreq, struct tevent_req);
 	NTSTATUS status;
 
 	status = rpc_read_recv(subreq);
 	TALLOC_FREE(subreq);
 	if (!NT_STATUS_IS_OK(status)) {
-		async_req_nterror(req, status);
+		tevent_req_nterror(req, status);
 		return;
 	}
-	async_req_done(req);
+	tevent_req_done(req);
 }
 
-static NTSTATUS get_complete_frag_recv(struct async_req *req)
+static NTSTATUS get_complete_frag_recv(struct tevent_req *req)
 {
-	return async_req_simple_recv_ntstatus(req);
+	return tevent_req_simple_recv_ntstatus(req);
 }
 
 /****************************************************************************
@@ -1037,22 +1034,22 @@ struct cli_api_pipe_state {
 	uint32_t rdata_len;
 };
 
-static void cli_api_pipe_trans_done(struct async_req *subreq);
-static void cli_api_pipe_write_done(struct async_req *subreq);
-static void cli_api_pipe_read_done(struct async_req *subreq);
+static void cli_api_pipe_trans_done(struct tevent_req *subreq);
+static void cli_api_pipe_write_done(struct tevent_req *subreq);
+static void cli_api_pipe_read_done(struct tevent_req *subreq);
 
-static struct async_req *cli_api_pipe_send(TALLOC_CTX *mem_ctx,
-					   struct event_context *ev,
-					   struct rpc_cli_transport *transport,
-					   uint8_t *data, size_t data_len,
-					   uint32_t max_rdata_len)
+static struct tevent_req *cli_api_pipe_send(TALLOC_CTX *mem_ctx,
+					    struct event_context *ev,
+					    struct rpc_cli_transport *transport,
+					    uint8_t *data, size_t data_len,
+					    uint32_t max_rdata_len)
 {
-	struct async_req *result, *subreq;
+	struct tevent_req *req, *subreq;
 	struct cli_api_pipe_state *state;
 	NTSTATUS status;
 
-	if (!async_req_setup(mem_ctx, &result, &state,
-			     struct cli_api_pipe_state)) {
+	req = tevent_req_create(mem_ctx, &state, struct cli_api_pipe_state);
+	if (req == NULL) {
 		return NULL;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list