#include "zbxserialize.h"
void zbx_service_serialize_event(unsigned char **data, size_t *data_alloc, size_t *data_offset, zbx_uint64_t eventid,
int clock, int ns, int value, int severity, const zbx_vector_tags_ptr_t *tags,
zbx_vector_uint64_t *maintenanceids)
zbx_uint32_t data_len = 0, *len = NULL;
int i, maintenance_num = 0;
zbx_serialize_prepare_value(data_len, eventid);
zbx_serialize_prepare_value(data_len, clock);
zbx_serialize_prepare_value(data_len, ns);
zbx_serialize_prepare_value(data_len, value);
zbx_serialize_prepare_value(data_len, severity);
zbx_serialize_prepare_value(data_len, tags->values_num);
zbx_serialize_prepare_value(data_len, maintenance_num);
if (NULL != maintenanceids)
data_len += (zbx_uint32_t)(maintenanceids->values_num * (int)sizeof(zbx_uint64_t));
if (0 != tags->values_num)
len = (zbx_uint32_t *)zbx_malloc(NULL, sizeof(zbx_uint32_t) * 2 * (size_t)tags->values_num);
for (i = 0; i < tags->values_num; i++)
zbx_tag_t *tag = tags->values[i];
zbx_serialize_prepare_str_len(data_len, tag->tag, len[i * 2]);
zbx_serialize_prepare_str_len(data_len, tag->value, len[i * 2 + 1]);
while (data_len > *data_alloc - *data_offset)
*data = (unsigned char *)zbx_realloc(*data, *data_alloc);
*data = (unsigned char *)zbx_malloc(NULL, (*data_alloc = MAX(1024, data_len)));
ptr = *data + *data_offset;