diff options
author | Michael Adam <obnox@samba.org> | 2014-05-13 11:55:37 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-05-30 00:03:20 +0200 |
commit | e4453bdc3719c57be575101c0519debae6b0c259 (patch) | |
tree | a5386536c5480508c4ab96e999aae577065fb4c7 /source3/lib/messages.c | |
parent | 4dd382296d3e78000713ab0ac1f8e531e25857cc (diff) | |
download | samba-e4453bdc3719c57be575101c0519debae6b0c259.tar.gz samba-e4453bdc3719c57be575101c0519debae6b0c259.tar.xz samba-e4453bdc3719c57be575101c0519debae6b0c259.zip |
s3:messaging: change messaging_backend to use iovec instead of data blob in send_fn
This also changes the layering
messaging_send_iov -> messaging_send_buf -> messaging_send
to
messaging_send_buf -> messaging_send -> messaging_send_iov
Signed-off-by: Michael Adam <obnox@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Diffstat (limited to 'source3/lib/messages.c')
-rw-r--r-- | source3/lib/messages.c | 64 |
1 files changed, 34 insertions, 30 deletions
diff --git a/source3/lib/messages.c b/source3/lib/messages.c index b045639d0bf..6e2e7ca9e2c 100644 --- a/source3/lib/messages.c +++ b/source3/lib/messages.c @@ -355,29 +355,12 @@ NTSTATUS messaging_send(struct messaging_context *msg_ctx, struct server_id server, uint32_t msg_type, const DATA_BLOB *data) { - if (server_id_is_disconnected(&server)) { - return NT_STATUS_INVALID_PARAMETER_MIX; - } - - if (!procid_is_local(&server)) { - return msg_ctx->remote->send_fn(msg_ctx, server, - msg_type, data, - msg_ctx->remote); - } + struct iovec iov; - if (messaging_is_self_send(msg_ctx, &server)) { - struct messaging_rec rec; - rec.msg_version = MESSAGE_VERSION; - rec.msg_type = msg_type & MSG_TYPE_MASK; - rec.dest = server; - rec.src = msg_ctx->id; - rec.buf = *data; - messaging_dispatch_rec(msg_ctx, &rec); - return NT_STATUS_OK; - } + iov.iov_base = data->data; + iov.iov_len = data->length; - return msg_ctx->local->send_fn(msg_ctx, server, msg_type, data, - msg_ctx->local); + return messaging_send_iov(msg_ctx, server, msg_type, &iov, 1); } NTSTATUS messaging_send_buf(struct messaging_context *msg_ctx, @@ -392,19 +375,40 @@ NTSTATUS messaging_send_iov(struct messaging_context *msg_ctx, struct server_id server, uint32_t msg_type, const struct iovec *iov, int iovlen) { - uint8_t *buf; - NTSTATUS status; + if (server_id_is_disconnected(&server)) { + return NT_STATUS_INVALID_PARAMETER_MIX; + } - buf = iov_buf(talloc_tos(), iov, iovlen); - if (buf == NULL) { - return NT_STATUS_NO_MEMORY; + if (!procid_is_local(&server)) { + return msg_ctx->remote->send_fn(msg_ctx, server, + msg_type, iov, iovlen, + msg_ctx->remote); } - status = messaging_send_buf(msg_ctx, server, msg_type, - buf, talloc_get_size(buf)); + if (messaging_is_self_send(msg_ctx, &server)) { + struct messaging_rec rec; + uint8_t *buf; + DATA_BLOB data; + + buf = iov_buf(talloc_tos(), iov, iovlen); + if (buf == NULL) { + return NT_STATUS_NO_MEMORY; + } + + data = data_blob_const(buf, talloc_get_size(buf)); + + rec.msg_version = MESSAGE_VERSION; + rec.msg_type = msg_type & MSG_TYPE_MASK; + rec.dest = server; + rec.src = msg_ctx->id; + rec.buf = data; + messaging_dispatch_rec(msg_ctx, &rec); + TALLOC_FREE(buf); + return NT_STATUS_OK; + } - TALLOC_FREE(buf); - return status; + return msg_ctx->local->send_fn(msg_ctx, server, msg_type, iov, iovlen, + msg_ctx->local); } static struct messaging_rec *messaging_rec_dup(TALLOC_CTX *mem_ctx, |