libcli/smb: add smb2cli_req_get_send_iov()
authorStefan Metzmacher <metze@samba.org>
Wed, 24 Sep 2014 06:59:58 +0000 (08:59 +0200)
committerJeremy Allison <jra@samba.org>
Tue, 7 Oct 2014 20:47:04 +0000 (22:47 +0200)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
libcli/smb/smbXcli_base.c
libcli/smb/smbXcli_base.h

index b0a8e071240db21c71ffe44672066e8e5edbd943..952e030c8a1f9ee09f256bf2297df8be5eef39ac 100644 (file)
@@ -3720,6 +3720,34 @@ NTSTATUS smb2cli_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
        return status;
 }
 
+NTSTATUS smb2cli_req_get_sent_iov(struct tevent_req *req,
+                                 struct iovec *sent_iov)
+{
+       struct smbXcli_req_state *state =
+               tevent_req_data(req,
+               struct smbXcli_req_state);
+
+       if (tevent_req_is_in_progress(req)) {
+               return STATUS_PENDING;
+       }
+
+       sent_iov[0].iov_base = state->smb2.hdr;
+       sent_iov[0].iov_len  = sizeof(state->smb2.hdr);
+
+       sent_iov[1].iov_base = discard_const(state->smb2.fixed);
+       sent_iov[1].iov_len  = state->smb2.fixed_len;
+
+       if (state->smb2.dyn != NULL) {
+               sent_iov[2].iov_base = discard_const(state->smb2.dyn);
+               sent_iov[2].iov_len  = state->smb2.dyn_len;
+       } else {
+               sent_iov[2].iov_base = NULL;
+               sent_iov[2].iov_len  = 0;
+       }
+
+       return NT_STATUS_OK;
+}
+
 static const struct {
        enum protocol_types proto;
        const char *smb1_name;
index 9a970d451b05371d6fb44aaffe4b6a9d7f8eb554..4d00e2696917e9078c5fe0223b8fbf04cb58d4af 100644 (file)
@@ -347,6 +347,16 @@ NTSTATUS smb2cli_req_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx,
                          const struct smb2cli_req_expected_response *expected,
                          size_t num_expected);
 
+/*
+ * This expects an iov[3] array, that is filled with references to
+ * the buffers used for the sending the requests into the socket.
+ *
+ * This can only be called after smb2cli_req_recv(subreq) before
+ * the TALLOC_FREE(subreq).
+ */
+NTSTATUS smb2cli_req_get_sent_iov(struct tevent_req *req,
+                                 struct iovec *sent_iov);
+
 struct tevent_req *smbXcli_negprot_send(TALLOC_CTX *mem_ctx,
                                        struct tevent_context *ev,
                                        struct smbXcli_conn *conn,