#include "zbxserialize.h"
#include "zbxavailability.h"
void zbx_availability_serialize_interface(unsigned char **data, size_t *data_alloc, size_t *data_offset,
const zbx_interface_availability_t *interface_availability)
zbx_uint32_t data_len = 0, error_len;
zbx_serialize_prepare_value(data_len, interface_availability->interfaceid);
zbx_serialize_prepare_value(data_len, interface_availability->agent.flags);
zbx_serialize_prepare_value(data_len, interface_availability->agent.available);
zbx_serialize_prepare_value(data_len, interface_availability->agent.errors_from);
zbx_serialize_prepare_value(data_len, interface_availability->agent.disable_until);
zbx_serialize_prepare_str_len(data_len, interface_availability->agent.error, error_len);
*data = (unsigned char *)zbx_calloc(NULL, (*data_alloc = MAX(1024, data_len)), 1);
while (data_len > *data_alloc - *data_offset)
*data = (unsigned char *)zbx_realloc(*data, *data_alloc);
ptr = *data + *data_offset;
*data_offset += data_len;
ptr += zbx_serialize_value(ptr, interface_availability->interfaceid);
ptr += zbx_serialize_value(ptr, interface_availability->agent.flags);
ptr += zbx_serialize_value(ptr, interface_availability->agent.available);
ptr += zbx_serialize_value(ptr, interface_availability->agent.errors_from);
ptr += zbx_serialize_value(ptr, interface_availability->agent.disable_until);
zbx_serialize_str(ptr, interface_availability->agent.error, error_len);
zbx_uint32_t zbx_availability_serialize_active_heartbeat(unsigned char **data, zbx_uint64_t hostid,
zbx_uint32_t data_len = 0;
zbx_serialize_prepare_value(data_len, hostid);
zbx_serialize_prepare_value(data_len, heartbeat_freq);
ptr = *data = (unsigned char *)zbx_calloc(NULL, data_len, 1);
ptr += zbx_serialize_value(ptr, hostid);
(void)zbx_serialize_value(ptr, heartbeat_freq);
void zbx_availability_deserialize(const unsigned char *data, zbx_uint32_t size,
zbx_vector_availability_ptr_t *interface_availabilities)
const unsigned char *end = data + size;
zbx_interface_availability_t *interface_availability;
zbx_uint32_t deserialize_error_len;
interface_availability = (zbx_interface_availability_t *)zbx_malloc(NULL,
sizeof(zbx_interface_availability_t));
zbx_vector_availability_ptr_append(interface_availabilities, interface_availability);
interface_availability->id = interface_availabilities->values_num;
data += zbx_deserialize_value(data, &interface_availability->interfaceid);
data += zbx_deserialize_value(data, &interface_availability->agent.flags);
data += zbx_deserialize_value(data, &interface_availability->agent.available);
data += zbx_deserialize_value(data, &interface_availability->agent.errors_from);
data += zbx_deserialize_value(data, &interface_availability->agent.disable_until);
data += zbx_deserialize_str(data, &interface_availability->agent.error, deserialize_error_len);