#include "zbxcacheconfig.h"
#include "zbx_expression_constants.h"
#include "zbxinterface.h"
#include "zbxip.h"
#include "zbxexpr.h"
#include "zbxstr.h"
static int common_resolv(zbx_macro_resolv_data_t *p, zbx_uint64_t hostid, const char *host, const char *name,
const zbx_dc_interface_t *interface, zbx_uint64_t itemid, char **replace_to)
{
int ret = SUCCEED;
if (0 == strcmp(p->macro, MVAR_HOST_HOST) || 0 == strcmp(p->macro, MVAR_HOSTNAME))
{
*replace_to = zbx_strdup(*replace_to, host);
}
else if (0 == strcmp(p->macro, MVAR_HOST_NAME))
{
*replace_to = zbx_strdup(*replace_to, name);
}
else if (0 == strcmp(p->macro, MVAR_HOST_IP) || 0 == strcmp(p->macro, MVAR_IPADDRESS))
{
if (INTERFACE_TYPE_UNKNOWN != interface->type)
{
if ('\0' != *interface->ip_orig && FAIL == zbx_is_ip(interface->ip_orig))
{
ret = FAIL;
}
else
*replace_to = zbx_strdup(*replace_to, interface->ip_orig);
}
else
{
ret = zbx_dc_get_interface_value(hostid, itemid, replace_to, ZBX_DC_REQUEST_HOST_IP);
}
}
else if (0 == strcmp(p->macro, MVAR_HOST_DNS))
{
if (INTERFACE_TYPE_UNKNOWN != interface->type)
{
if ('\0' != *interface->dns_orig && FAIL == zbx_is_ip(interface->dns_orig) &&
FAIL == zbx_validate_hostname(interface->dns_orig))
{
ret = FAIL;
}
else
*replace_to = zbx_strdup(*replace_to, interface->dns_orig);
}
else
{
ret = zbx_dc_get_interface_value(hostid, itemid, replace_to, ZBX_DC_REQUEST_HOST_DNS);
}
}
else if (0 == strcmp(p->macro, MVAR_HOST_CONN))
{
if (INTERFACE_TYPE_UNKNOWN != interface->type)
{
if (FAIL == zbx_is_ip(interface->addr) && FAIL == zbx_validate_hostname(interface->addr))
ret = FAIL;
else
*replace_to = zbx_strdup(*replace_to, interface->addr);
}
else
{
ret = zbx_dc_get_interface_value(hostid, itemid, replace_to, ZBX_DC_REQUEST_HOST_CONN);
}
}
return ret;
}
int zbx_macro_query_filter_resolv(zbx_macro_resolv_data_t *p, va_list args, char **replace_to, char **data,
char *error, size_t maxerrlen)
{
const zbx_dc_item_t *item = va_arg(args, const zbx_dc_item_t *);