summaryrefslogtreecommitdiff
path: root/source4/libcli/composite
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-07-30 16:48:41 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:15:10 -0500
commit7e949c9fb12483df11c7e926e2c5ed8e4b9b9d20 (patch)
treeb664d4e0d965be4a76356f5b669b8cf737522c0c /source4/libcli/composite
parentedcbd24b6a98c25be083fa30971ea4ca04600871 (diff)
downloadsamba-7e949c9fb12483df11c7e926e2c5ed8e4b9b9d20.tar.gz
samba-7e949c9fb12483df11c7e926e2c5ed8e4b9b9d20.tar.bz2
samba-7e949c9fb12483df11c7e926e2c5ed8e4b9b9d20.zip
r17317: - add a composite_create() function that allocates and initialize
the composite_context structue, we should try to convert all code to use this because there're a lot of places where the we have bugs with this task... - add a composite_continue_smb2() helper We should try to hide the internals of the composite code from the users to avoid errors (and I found a lot of them... and will fix then step by step) metze (This used to be commit a16180f20246844d05996d385fcb71893e08f589)
Diffstat (limited to 'source4/libcli/composite')
-rw-r--r--source4/libcli/composite/composite.c28
-rw-r--r--source4/libcli/composite/composite.h1
2 files changed, 29 insertions, 0 deletions
diff --git a/source4/libcli/composite/composite.c b/source4/libcli/composite/composite.c
index 9a745e3013..aea25f183e 100644
--- a/source4/libcli/composite/composite.c
+++ b/source4/libcli/composite/composite.c
@@ -24,12 +24,30 @@
#include "includes.h"
#include "lib/events/events.h"
#include "libcli/raw/libcliraw.h"
+#include "libcli/smb2/smb2.h"
#include "libcli/composite/composite.h"
#include "lib/messaging/irpc.h"
#include "librpc/rpc/dcerpc.h"
#include "libcli/nbt/libnbt.h"
/*
+ create a new composite_context structure
+ and initialize it
+*/
+_PUBLIC_ struct composite_context *composite_create(TALLOC_CTX *mem_ctx,
+ struct event_context *ev)
+{
+ struct composite_context *c;
+
+ c = talloc_zero(mem_ctx, struct composite_context);
+ if (!c) return NULL;
+ c->state = COMPOSITE_STATE_IN_PROGRESS;
+ c->event_ctx = ev;
+
+ return c;
+}
+
+/*
block until a composite function has completed, then return the status
*/
_PUBLIC_ NTSTATUS composite_wait(struct composite_context *c)
@@ -156,6 +174,16 @@ _PUBLIC_ void composite_continue_smb(struct composite_context *ctx,
new_req->async.private = private_data;
}
+_PUBLIC_ void composite_continue_smb2(struct composite_context *ctx,
+ struct smb2_request *new_req,
+ void (*continuation)(struct smb2_request *),
+ void *private_data)
+{
+ if (composite_nomem(new_req, ctx)) return;
+ new_req->async.fn = continuation;
+ new_req->async.private = private_data;
+}
+
_PUBLIC_ void composite_continue_nbt(struct composite_context *ctx,
struct nbt_name_request *new_req,
void (*continuation)(struct nbt_name_request *),
diff --git a/source4/libcli/composite/composite.h b/source4/libcli/composite/composite.h
index dc04f5a883..d8873684fc 100644
--- a/source4/libcli/composite/composite.h
+++ b/source4/libcli/composite/composite.h
@@ -63,6 +63,7 @@ struct composite_context {
struct irpc_request;
struct smbcli_request;
+struct smb2_request;
struct rpc_request;
struct nbt_name_request;