summaryrefslogtreecommitdiff
path: root/source3/include/async_smb.h
diff options
context:
space:
mode:
Diffstat (limited to 'source3/include/async_smb.h')
-rw-r--r--source3/include/async_smb.h146
1 files changed, 34 insertions, 112 deletions
diff --git a/source3/include/async_smb.h b/source3/include/async_smb.h
index 2ac1101a1e..87ddca6677 100644
--- a/source3/include/async_smb.h
+++ b/source3/include/async_smb.h
@@ -22,123 +22,11 @@
#include "includes.h"
-/**
- * struct cli_request is the state holder for an async client request we sent
- * to the server. It can consist of more than one struct async_req that we
- * have to server if the application did a cli_chain_cork() and
- * cli_chain_uncork()
- */
-
-struct cli_request {
- /**
- * "prev" and "next" form the doubly linked list in
- * cli_state->outstanding_requests
- */
- struct cli_request *prev, *next;
-
- /**
- * num_async: How many chained requests do we serve?
- */
- int num_async;
-
- /**
- * async: This is the list of chained requests that were queued up by
- * cli_request_chain before we sent out this request
- */
- struct async_req **async;
-
- /**
- * The client connection for this request
- */
- struct cli_state *cli;
-
- /**
- * The enc_state to decrypt the reply
- */
- struct smb_trans_enc_state *enc_state;
-
- /**
- * The mid we used for this request. Mainly used to demultiplex on
- * receiving replies.
- */
- uint16_t mid;
-
- uint32_t seqnum;
-
- /**
- * The bytes we have to ship to the server
- */
- uint8_t *outbuf;
-
- /**
- * How much from "outbuf" did we already send
- */
- size_t sent;
-
- /**
- * The reply comes in here. Its intended size is implicit by
- * smb_len(), its current size can be read via talloc_get_size()
- */
- char *inbuf;
-
- /**
- * Specific requests might add stuff here. Maybe convert this to a
- * private_pointer at some point.
- */
- union {
- struct {
- off_t ofs;
- size_t size;
- ssize_t received;
- uint8_t *rcvbuf;
- } read;
- struct {
- DATA_BLOB data;
- uint16_t num_echos;
- } echo;
- } data;
-
- /**
- * For requests that don't follow the strict request/reply pattern
- * such as the transaction request family and echo requests it is
- * necessary to break the standard procedure in
- * handle_incoming_pdu(). For a simple example look at
- * cli_echo_recv_helper().
- */
- struct {
- void (*fn)(struct async_req *req);
- void *priv;
- } recv_helper;
-};
-
-/*
- * Ship a new smb request to the server
- */
-
-struct async_req *cli_request_send(TALLOC_CTX *mem_ctx,
- struct event_context *ev,
- struct cli_state *cli,
- uint8_t smb_command,
- uint8_t additional_flags,
- uint8_t wct, const uint16_t *vwv,
- size_t bytes_alignment,
- uint32_t num_bytes, const uint8_t *bytes);
-
-uint16_t cli_wct_ofs(const struct cli_state *cli);
-
-bool cli_chain_cork(struct cli_state *cli, struct event_context *ev,
- size_t size_hint);
-void cli_chain_uncork(struct cli_state *cli);
-bool cli_in_chain(struct cli_state *cli);
bool smb_splice_chain(uint8_t **poutbuf, uint8_t smb_command,
uint8_t wct, const uint16_t *vwv,
size_t bytes_alignment,
uint32_t num_bytes, const uint8_t *bytes);
-NTSTATUS cli_pull_reply(struct async_req *req,
- uint8_t *pwct, uint16_t **pvwv,
- uint16_t *pnum_bytes, uint8_t **pbytes);
-
/*
* Fetch an error out of a NBT packet
*/
@@ -151,4 +39,38 @@ NTSTATUS cli_pull_error(char *buf);
void cli_set_error(struct cli_state *cli, NTSTATUS status);
+struct tevent_req *cli_smb_req_create(TALLOC_CTX *mem_ctx,
+ struct event_context *ev,
+ struct cli_state *cli,
+ uint8_t smb_command,
+ uint8_t additional_flags,
+ uint8_t wct, uint16_t *vwv,
+ int iov_count,
+ struct iovec *bytes_iov);
+bool cli_smb_req_send(struct tevent_req *req);
+size_t cli_smb_wct_ofs(struct tevent_req **reqs, int num_reqs);
+bool cli_smb_chain_send(struct tevent_req **reqs, int num_reqs);
+uint8_t *cli_smb_inbuf(struct tevent_req *req);
+bool cli_has_async_calls(struct cli_state *cli);
+void cli_smb_req_unset_pending(struct tevent_req *req);
+bool cli_smb_req_set_pending(struct tevent_req *req);
+uint16_t cli_smb_req_mid(struct tevent_req *req);
+void cli_smb_req_set_mid(struct tevent_req *req, uint16_t mid);
+struct tevent_req *cli_smb_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
+ struct cli_state *cli,
+ uint8_t smb_command, uint8_t additional_flags,
+ uint8_t wct, uint16_t *vwv,
+ uint32_t num_bytes,
+ const uint8_t *bytes);
+NTSTATUS cli_smb_recv(struct tevent_req *req, uint8_t min_wct,
+ uint8_t *pwct, uint16_t **pvwv,
+ uint32_t *pnum_bytes, uint8_t **pbytes);
+
+struct tevent_req *cli_smb_oplock_break_waiter_send(TALLOC_CTX *mem_ctx,
+ struct event_context *ev,
+ struct cli_state *cli);
+NTSTATUS cli_smb_oplock_break_waiter_recv(struct tevent_req *req,
+ uint16_t *pfnum,
+ uint8_t *plevel);
+
#endif