summaryrefslogtreecommitdiffstats
path: root/source3/lib/messages.c
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2014-05-13 11:55:37 +0200
committerJeremy Allison <jra@samba.org>2014-05-30 00:03:20 +0200
commite4453bdc3719c57be575101c0519debae6b0c259 (patch)
treea5386536c5480508c4ab96e999aae577065fb4c7 /source3/lib/messages.c
parent4dd382296d3e78000713ab0ac1f8e531e25857cc (diff)
downloadsamba-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.c64
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,