summaryrefslogtreecommitdiffstats
path: root/source4/ntvfs/ntvfs.h
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2004-10-28 21:48:53 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:04:57 -0500
commit019719595778e0bd0a00781b33407554d1943985 (patch)
treedd54db0a15f72d5fe4a63a5104d120bcae735fba /source4/ntvfs/ntvfs.h
parent94c0b939c4735866945aea8b7a0377be4d814125 (diff)
downloadsamba-019719595778e0bd0a00781b33407554d1943985.tar.gz
samba-019719595778e0bd0a00781b33407554d1943985.tar.xz
samba-019719595778e0bd0a00781b33407554d1943985.zip
r3336: use a struct ntvfs_async_state to be able to do async chaning of ntvfs modules
the idea is that a passthru module can use ntvfs_async_state_push() before calling ntvfs_next_*() and in the _send function it calls ntvfs_async_state_pop() and then call the upper layer send_fn itself - ntvfs_nbench is now fully async - the ntvfs_map_*() functions and the trans(2) mapping functions are not converted yet metze (This used to be commit fde64c0dc142b53d128c8ba09af048dc58d8ef3a)
Diffstat (limited to 'source4/ntvfs/ntvfs.h')
-rw-r--r--source4/ntvfs/ntvfs.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/source4/ntvfs/ntvfs.h b/source4/ntvfs/ntvfs.h
index c9fe276f544..04e9b871c72 100644
--- a/source4/ntvfs/ntvfs.h
+++ b/source4/ntvfs/ntvfs.h
@@ -134,12 +134,45 @@ struct ntvfs_context {
struct ntvfs_module_context *modules;
};
+
+/* a set of flags to control handling of request structures */
+#define NTVFS_ASYNC_STATE_ASYNC (1<<1) /* the backend will answer this one later */
+#define NTVFS_ASYNC_STATE_MAY_ASYNC (1<<2) /* the backend is allowed to answer async */
+
+/* the ntvfs_async_state structure allows backend functions to
+ delay replying to requests. To use this, the front end must
+ set send_fn to a function to be called by the backend
+ when the reply is finally ready to be sent. The backend
+ must set status to the status it wants in the
+ reply. The backend must set the NTVFS_ASYNC_STATE_ASYNC
+ control_flag on the request to indicate that it wishes to
+ delay the reply
+
+ If NTVFS_ASYNC_STATE_MAY_ASYNC is not set then the backend cannot
+ ask for a delayed reply for this request
+
+ note that the private_data pointer is private to the layer which alloced this struct
+*/
+struct ntvfs_async_state {
+ struct ntvfs_async_state *prev, *next;
+ /* the async handling infos */
+ unsigned state;
+ void *private_data;
+ void (*send_fn)(struct smbsrv_request *);
+ NTSTATUS status;
+
+ /* the passthru module's per session private data */
+ struct ntvfs_module_context *ntvfs;
+};
+
/* this structure is used by backends to determine the size of some critical types */
struct ntvfs_critical_sizes {
int interface_version;
+ int sizeof_ntvfs_critical_sizes;
int sizeof_ntvfs_context;
int sizeof_ntvfs_module_context;
int sizeof_ntvfs_ops;
+ int sizeof_ntvfs_async_state;
int sizeof_smbsrv_tcon;
int sizeof_smbsrv_request;
};