#include "lld_protocol.h"
#include "zbxserialize.h"
#include "zbxipcservice.h"
#include "zbxsysinfo.h"
zbx_uint32_t zbx_lld_serialize_item_value(unsigned char **data, zbx_uint64_t itemid, zbx_uint64_t hostid,
const char *value, const zbx_timespec_t *ts, unsigned char meta, zbx_uint64_t lastlogsize, int mtime,
const char *error)
{
unsigned char *ptr;
zbx_uint32_t data_len = 0, value_len, error_len;
zbx_serialize_prepare_value(data_len, itemid);
zbx_serialize_prepare_value(data_len, hostid);
zbx_serialize_prepare_str(data_len, value);
zbx_serialize_prepare_value(data_len, *ts);
zbx_serialize_prepare_str(data_len, error);
zbx_serialize_prepare_value(data_len, meta);
if (0 != meta)
{
zbx_serialize_prepare_value(data_len, lastlogsize);
zbx_serialize_prepare_value(data_len, mtime);
}
*data = (unsigned char *)zbx_malloc(NULL, data_len);
ptr = *data;
ptr += zbx_serialize_value(ptr, itemid);
ptr += zbx_serialize_value(ptr, hostid);
ptr += zbx_serialize_str(ptr, value, value_len);
ptr += zbx_serialize_value(ptr, *ts);
ptr += zbx_serialize_str(ptr, error, error_len);
ptr += zbx_serialize_value(ptr, meta);
if (0 != meta)
{
ptr += zbx_serialize_value(ptr, lastlogsize);
(void)zbx_serialize_value(ptr, mtime);
}
return data_len;
}
void zbx_lld_deserialize_item_value(const unsigned char *data, zbx_uint64_t *itemid, zbx_uint64_t *hostid,
char **value, zbx_timespec_t *ts, unsigned char *meta, zbx_uint64_t *lastlogsize, int *mtime,
char **error)
{
zbx_uint32_t value_len, error_len;
data += zbx_deserialize_value(data, itemid);
data += zbx_deserialize_value(data, hostid);
data += zbx_deserialize_str(data, value, value_len);
data += zbx_deserialize_value(data, ts);
data += zbx_deserialize_str(data, error, error_len);
data += zbx_deserialize_value(data, meta);
if (0 != *meta)
{
data += zbx_deserialize_value(data, lastlogsize);
(void)zbx_deserialize_value(data, mtime);
}
}
zbx_uint32_t zbx_lld_serialize_diag_stats(unsigned char **data, zbx_uint64_t items_num, zbx_uint64_t values_num)
{
unsigned char *ptr;
zbx_uint32_t data_len = 0;
zbx_serialize_prepare_value(data_len, items_num);
zbx_serialize_prepare_value(data_len, values_num);
*data = (unsigned char *)zbx_malloc(NULL, data_len);
ptr = *data;
ptr += zbx_serialize_value(ptr, items_num);
(void)zbx_serialize_value(ptr, values_num);