summaryrefslogtreecommitdiff
path: root/source4/smb_server/smb2/smb2_server.h
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-07-17 09:44:13 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:10:12 -0500
commit8075ce63fdbaeb2fe508097a46d794a49138c307 (patch)
treebdc32b1f46568b1b9e16b754d17259c5b4ce29df /source4/smb_server/smb2/smb2_server.h
parenta5bafffd66f511375dda4c974e6a1f152fc7aa16 (diff)
downloadsamba-8075ce63fdbaeb2fe508097a46d794a49138c307.tar.gz
samba-8075ce63fdbaeb2fe508097a46d794a49138c307.tar.bz2
samba-8075ce63fdbaeb2fe508097a46d794a49138c307.zip
r17084: implement SMB2 Cancel in the server,
that makes it possible for clients to cancel async requests, like NOTIFY... metze (This used to be commit eaccd3c4353833daf584aaea4d7e8f11004a8072)
Diffstat (limited to 'source4/smb_server/smb2/smb2_server.h')
-rw-r--r--source4/smb_server/smb2/smb2_server.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/source4/smb_server/smb2/smb2_server.h b/source4/smb_server/smb2/smb2_server.h
index 838abdf4d6..b58bf5511a 100644
--- a/source4/smb_server/smb2/smb2_server.h
+++ b/source4/smb_server/smb2/smb2_server.h
@@ -53,6 +53,9 @@ struct smb2srv_request {
/* for matching request and reply */
uint64_t seqnum;
+ /* the id that can be used to cancel the request */
+ uint32_t pending_id;
+
struct smb2_request_buffer in;
struct smb2_request_buffer out;
};
@@ -127,7 +130,13 @@ struct smbsrv_request;
*/
#define SMB2SRV_CALL_NTVFS_BACKEND(cmd) do { \
req->ntvfs->async_states->status = cmd; \
- if (!(req->ntvfs->async_states->state & NTVFS_ASYNC_STATE_ASYNC)) { \
+ if (req->ntvfs->async_states->state & NTVFS_ASYNC_STATE_ASYNC) { \
+ NTSTATUS _status; \
+ _status = smb2srv_queue_pending(req); \
+ if (!NT_STATUS_IS_OK(_status)) { \
+ ntvfs_cancel(req->ntvfs); \
+ } \
+ } else { \
req->ntvfs->async_states->send_fn(req->ntvfs); \
} \
} while (0)