diff options
Diffstat (limited to 'lib/mgmt_msg_native.c')
| -rw-r--r-- | lib/mgmt_msg_native.c | 26 |
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; } |
