/****************************************************************************** * * * Function: close_trap_file * * * * Purpose: close trap file and reset lastsize * * * * Author: Rudolfs Kreicbergs * * * * Comments: !!! do not reset lastsize elsewhere !!! * * * ******************************************************************************/ static void close_trap_file() { if (-1 != trap_fd) close(trap_fd); trap_fd = -1; trap_lastsize = 0; DBupdate_lastsize(); }
/****************************************************************************** * * * Function: read_traps * * * * Purpose: read the traps and then parse them with parse_traps() * * * * Author: Rudolfs Kreicbergs * * * ******************************************************************************/ static int read_traps() { const char *__function_name = "read_traps"; int nbytes = 0; zabbix_log(LOG_LEVEL_DEBUG, "In %s() lastsize:%d", __function_name, trap_lastsize); if ((off_t)-1 == lseek(trap_fd, (off_t)trap_lastsize, SEEK_SET)) { zabbix_log(LOG_LEVEL_WARNING, "cannot set position to %d for \"%s\": %s", trap_lastsize, CONFIG_SNMPTRAP_FILE, zbx_strerror(errno)); goto exit; } if (-1 == (nbytes = read(trap_fd, buffer + offset, MAX_BUFFER_LEN - offset - 1))) { zabbix_log(LOG_LEVEL_WARNING, "cannot read from SNMP trapper file \"%s\": %s", CONFIG_SNMPTRAP_FILE, zbx_strerror(errno)); goto exit; } if (0 < nbytes) { if (ZBX_SNMP_TRAPFILE_MAX_SIZE <= (zbx_uint64_t)trap_lastsize + nbytes) { nbytes = 0; goto exit; } buffer[nbytes + offset] = '\0'; trap_lastsize += nbytes; DBupdate_lastsize(); parse_traps(0); } exit: zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); return nbytes; }
/****************************************************************************** * * * Function: read_traps * * * * Purpose: read the traps and then parse them with parse_traps() * * * * Author: Rudolfs Kreicbergs * * * ******************************************************************************/ static void read_traps() { const char *__function_name = "read_traps"; int nbytes; char buffer[MAX_BUFFER_LEN]; zabbix_log(LOG_LEVEL_DEBUG, "In %s() lastsize:%d", __function_name, trap_lastsize); *buffer = '\0'; if ((off_t)-1 == lseek(trap_fd, (off_t)trap_lastsize, SEEK_SET)) { zabbix_log(LOG_LEVEL_WARNING, "cannot set position to [%d] for [%s]: %s", trap_lastsize, CONFIG_SNMPTRAP_FILE, zbx_strerror(errno)); goto exit; } if (-1 == (nbytes = read(trap_fd, buffer, sizeof(buffer) - 1))) { zabbix_log(LOG_LEVEL_WARNING, "cannot read from [%s]: %s", CONFIG_SNMPTRAP_FILE, zbx_strerror(errno)); goto exit; } if (0 < nbytes) { buffer[nbytes] = '\0'; zbx_rtrim(buffer + MAX(nbytes - 3, 0), " \r\n"); trap_lastsize += nbytes; DBupdate_lastsize(); parse_traps(buffer); } exit: zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name); }