void zbx_preprocessor_unpack_test_request(zbx_pp_item_preproc_t *preproc, zbx_variant_t *value, zbx_timespec_t *ts,
#include "zbxpreprocbase.h"
#include "zbxserialize.h"
#include "zbx_item_constants.h"
#define PACKED_FIELD_RAW 0
#define PACKED_FIELD_STRING 1
#define PACKED_FIELD(value, size) \
(zbx_packed_field_t){(value), (size), (0 == (size) ? PACKED_FIELD_STRING : PACKED_FIELD_RAW)}
static zbx_ipc_message_t cached_message;
static int cached_values;
ZBX_PTR_VECTOR_IMPL(ipcmsg, zbx_ipc_message_t *)
static zbx_uint32_t fields_calc_size(zbx_packed_field_t *fields, int fields_num)
zbx_uint32_t data_size = 0, field_size;
for (int i = 0; i < fields_num; i++)
if (PACKED_FIELD_STRING == fields[i].type)
field_size = (NULL != fields[i].value) ?
(zbx_uint32_t)strlen((const char *)fields[i].value) + 1 : 0;
fields[i].size = (zbx_uint32_t)field_size;
field_size += (zbx_uint32_t)sizeof(zbx_uint32_t);
field_size = fields[i].size;
if (UINT32_MAX - field_size < data_size)
static zbx_uint32_t fields_pack(const zbx_packed_field_t *fields, int fields_num, unsigned char *data)