From a00fe90c3ce874defd876652196738be90a9b76e Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 24 Sep 2014 08:59:58 +0200 Subject: [PATCH] libcli/smb: add smb2cli_req_get_send_iov() Signed-off-by: Stefan Metzmacher Reviewed-by: Jeremy Allison --- libcli/smb/smbXcli_base.c | 28 ++++++++++++++++++++++++++++ libcli/smb/smbXcli_base.h | 10 ++++++++++ 2 files changed, 38 insertions(+) diff --git a/libcli/smb/smbXcli_base.c b/libcli/smb/smbXcli_base.c index b0a8e071240..952e030c8a1 100644 --- a/libcli/smb/smbXcli_base.c +++ b/libcli/smb/smbXcli_base.c @@ -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; diff --git a/libcli/smb/smbXcli_base.h b/libcli/smb/smbXcli_base.h index 9a970d451b0..4d00e269691 100644 --- a/libcli/smb/smbXcli_base.h +++ b/libcli/smb/smbXcli_base.h @@ -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, -- 2.34.1