/****************************************************************************** * * * Function: get_data_from_server * * * * Purpose: get configuration and other data from server * * * * Parameters: * * * * Return value: SUCCESS - processed successfully * * FAIL - an error occurred * * * * Author: Alexander Vladishev * * * * Comments: * * * ******************************************************************************/ int get_data_from_server(zbx_sock_t *sock, const char *request) { const char *__function_name = "get_data_from_server"; int ret = FAIL; struct zbx_json j; zabbix_log(LOG_LEVEL_DEBUG, "In %s() request:'%s'", __function_name, request); zbx_json_init(&j, 128); zbx_json_addstring(&j, "request", request, ZBX_JSON_TYPE_STRING); zbx_json_addstring(&j, "host", CONFIG_HOSTNAME, ZBX_JSON_TYPE_STRING); if (FAIL == send_data_to_server(sock, j.buffer)) goto exit; if (FAIL == recv_data_from_server(sock)) goto exit; ret = SUCCEED; exit: zbx_json_free(&j); zabbix_log(LOG_LEVEL_DEBUG, "End of %s():%s", __function_name, zbx_result_string(ret)); return ret; }
/****************************************************************************** * * * Function: put_data_to_server * * * * Purpose: send data from server * * * * Parameters: * * * * Return value: SUCCESS - processed succesfully * * FAIL - an error occured * * * * Author: Alksander Vladishev * * * * Comments: * * * ******************************************************************************/ int put_data_to_server(zbx_sock_t *sock, struct zbx_json *j) { struct zbx_json_parse jp; int ret = FAIL; char *answer, value[MAX_STRING_LEN]; zabbix_log(LOG_LEVEL_DEBUG, "In put_data_to_server() [datalen:%zd]", j->buffer_size); if (FAIL == send_data_to_server(sock, j->buffer)) goto exit; if (FAIL == recv_data_from_server(sock, &answer)) goto exit; if (FAIL == zbx_json_open(answer, &jp)) goto exit; if (FAIL == zbx_json_value_by_name(&jp, ZBX_PROTO_TAG_RESPONSE, value, sizeof(value))) goto exit; if (0 != strcmp(value, ZBX_PROTO_VALUE_SUCCESS)) goto exit; ret = SUCCEED; exit: zabbix_log(LOG_LEVEL_DEBUG, "End of put_data_to_server():%s", zbx_result_string(ret)); return ret; }
/** * @brief 将发送缓冲中的数据发送出去,同时接收一次网络中的数据 * @param * @return 0success -1failed */ int c_net_client_impl::do_io() { if(!m_inited) { return -1; } if(m_sock_fd < 0) { if(connect_to_server(m_timeout) != 0) { ERROR_LOG("can not connect now"); return -1; } } if(recv_data_from_server() < 0) { return -1; } if(m_send_buffer_len > 0) { int bytes_sent = send_to_server(m_sock_fd, m_send_buffer, m_send_buffer_len); if(bytes_sent > 0) { remove_data_from_send_buffer(bytes_sent); } else if(bytes_sent < 0) {/**< 连接遇到问题,关闭连接*/ disconnect_from_server(); return -1; } else { //nothing to do } } return 0; }
/****************************************************************************** * * * Function: get_data_from_server * * * * Purpose: get configuration and othed data from server * * * * Parameters: * * * * Return value: SUCCESS - processed succesfully * * FAIL - an error occured * * * * Author: Alksander Vladishev * * * * Comments: * * * ******************************************************************************/ int get_data_from_server(zbx_sock_t *sock, const char *request, char **data) { int ret = FAIL; struct zbx_json j; zabbix_log(LOG_LEVEL_DEBUG, "In get_data_from_server() [request:%s]", request); zbx_json_init(&j, 128); zbx_json_addstring(&j, "request", request, ZBX_JSON_TYPE_STRING); zbx_json_addstring(&j, "host", CONFIG_HOSTNAME, ZBX_JSON_TYPE_STRING); if (FAIL == send_data_to_server(sock, j.buffer)) goto exit; if (FAIL == recv_data_from_server(sock, data)) goto exit; ret = SUCCEED; exit: zbx_json_free(&j); return ret; }