/****************************************************************************** * * * Function: process_configuration_sync * * * * Purpose: * * * * Parameters: * * * * Return value: * * * * Author: Alexander Vladishev * * * * Comments: * * * ******************************************************************************/ static void process_configuration_sync() { const char *__function_name = "process_configuration_sync"; zbx_sock_t sock; char *data; struct zbx_json_parse jp; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); connect_to_server(&sock, 600, CONFIG_PROXYCONFIG_RETRY); /* retry till have a connection */ if (FAIL == get_data_from_server(&sock, ZBX_PROTO_VALUE_PROXY_CONFIG, &data)) goto exit; if ('\0' != *data) zabbix_log(LOG_LEVEL_WARNING, "Received configuration data from server. Datalen " ZBX_FS_SIZE_T, (zbx_fs_size_t)strlen(data)); else zabbix_log(LOG_LEVEL_WARNING, "Cannot obtain configuration data from server. " "Proxy host name might not be matching that on the server."); if (FAIL == zbx_json_open(data, &jp)) goto exit; process_proxyconfig(&jp); exit: disconnect_server(&sock); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: recv_proxyconfig * * * * Purpose: receive configuration tables from server (passive proxies) * * * * Parameters: * * * * Return value: * * * * Author: Alexander Vladishev * * * * Comments: * * * ******************************************************************************/ void recv_proxyconfig(zbx_sock_t *sock, struct zbx_json_parse *jp) { const char *__function_name = "recv_proxyconfig"; struct zbx_json_parse jp_data; int ret; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (SUCCEED != (ret = zbx_json_brackets_by_name(jp, ZBX_PROTO_TAG_DATA, &jp_data))) { zabbix_log(LOG_LEVEL_WARNING, "Invalid proxy configuration data. %s", zbx_json_strerror()); } else process_proxyconfig(&jp_data); zbx_send_response(sock, ret, NULL, CONFIG_TIMEOUT); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }
/****************************************************************************** * * * Function: recv_proxyconfig * * * * Purpose: receive configuration tables from server (passive proxies) * * * * Author: Alexander Vladishev * * * ******************************************************************************/ void recv_proxyconfig(zbx_socket_t *sock, struct zbx_json_parse *jp) { struct zbx_json_parse jp_data; int ret; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __func__); if (SUCCEED != (ret = zbx_json_brackets_by_name(jp, ZBX_PROTO_TAG_DATA, &jp_data))) { zabbix_log(LOG_LEVEL_WARNING, "cannot parse proxy configuration data received from server at" " \"%s\": %s", sock->peer, zbx_json_strerror()); zbx_send_proxy_response(sock, ret, zbx_json_strerror(), CONFIG_TIMEOUT); goto out; } if (SUCCEED != check_access_passive_proxy(sock, ZBX_SEND_RESPONSE, "configuration update")) goto out; process_proxyconfig(&jp_data); zbx_send_proxy_response(sock, ret, NULL, CONFIG_TIMEOUT); out: zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __func__); }