summaryrefslogtreecommitdiff
path: root/lib/mgmt_msg_native.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mgmt_msg_native.c')
-rw-r--r--lib/mgmt_msg_native.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/lib/mgmt_msg_native.c b/lib/mgmt_msg_native.c
index a9e8a1711d..b6dc126d49 100644
--- a/lib/mgmt_msg_native.c
+++ b/lib/mgmt_msg_native.c
@@ -10,25 +10,30 @@
DEFINE_MGROUP(MSG_NATIVE, "Native message allocations");
DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_MSG, "native mgmt msg");
-DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_ERROR, "native mgmt error msg");
+DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_ERROR, "native error msg");
+DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_GET_TREE, "native get tree msg");
+DEFINE_MTYPE(MSG_NATIVE, MSG_NATIVE_TREE_DATA, "native tree data msg");
int vmgmt_msg_native_send_error(struct msg_conn *conn, uint64_t sess_or_txn_id,
uint64_t req_id, bool short_circuit_ok,
int16_t error, const char *errfmt, va_list ap)
{
struct mgmt_msg_error *msg;
+ char *errstr;
ssize_t slen;
- size_t mlen;
int ret;
- msg = XCALLOC(MTYPE_MSG_NATIVE_ERROR, 1024);
- msg->session_id = sess_or_txn_id;
+ errstr = darr_vsprintf(errfmt, ap);
+ slen = strlen(errstr);
+
+ msg = mgmt_msg_native_alloc_msg(typeof(*msg), slen + 1,
+ MTYPE_MSG_NATIVE_ERROR);
+ msg->refer_id = sess_or_txn_id;
msg->req_id = req_id;
msg->code = MGMT_MSG_CODE_ERROR;
msg->error = error;
-
- slen = vsnprintfrr(msg->errstr, 1024 - sizeof(*msg), errfmt, ap);
- mlen = MIN(slen + sizeof(*msg) + 1, 1024);
+ strlcpy(msg->errstr, errstr, slen + 1);
+ darr_free(errstr);
if (conn->debug)
zlog_debug("Sending error %d session-id %" PRIu64
@@ -36,10 +41,7 @@ int vmgmt_msg_native_send_error(struct msg_conn *conn, uint64_t sess_or_txn_id,
error, sess_or_txn_id, req_id, short_circuit_ok,
msg->errstr);
- ret = msg_conn_send_msg(conn, MGMT_MSG_VERSION_NATIVE, msg, mlen, NULL,
- short_circuit_ok);
-
- XFREE(MTYPE_MSG_NATIVE_ERROR, msg);
-
+ ret = mgmt_msg_native_send_msg(conn, msg, short_circuit_ok);
+ mgmt_msg_native_free_msg(msg);
return ret;
}