📄 deventm.c
字号:
case SNMP_PDU_NEXT: if (EventMibNext(obj, &local, idlen, 1) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (DnpapRmonEvent*)local->Data; if (BeholderStrictRMON && !BooleanCheck(data->ObjectSet, EVENT_BOOLEAN_OWNER)) return SNMP_NOSUCHNAME; memcpy(obj->Syntax.BufChr, data->Owner, obj->SyntaxLen = data->OwnerLen); return SNMP_NOERROR; case SNMP_PDU_SET: data = (DnpapRmonEvent*)local->Data; if (data->Status != SNMP_UNDERCREATION) return SNMP_READONLY; memcpy(data->Owner, obj->Syntax.BufChr, data->OwnerLen = obj->SyntaxLen); BooleanSetTrue(data->ObjectSet, EVENT_BOOLEAN_OWNER); return SNMP_NOERROR; } return SNMP_GENERROR;}WORD DnpapEventStatus(SNMP_OBJECT* obj, WORD idlen){MIB_LOCAL *local = NULL;DnpapRmonEvent *data; local = MibRmon(obj, RmonEventInstance, idlen, 1); switch (obj->Request) { case SNMP_PDU_GET: if (local == NULL) { obj->Syntax.LngInt = SNMP_INVALID; return SNMP_NOSUCHNAME; } data = (DnpapRmonEvent*)local->Data; obj->Syntax.LngInt = data->Status; return SNMP_NOERROR; case SNMP_PDU_NEXT: if (EventMibNext(obj, &local, idlen, 1) == FALSE) { obj->Syntax.LngInt = SNMP_INVALID; return SNMP_NOSUCHNAME; } data = (DnpapRmonEvent*)local->Data; obj->Syntax.LngInt = data->Status; return SNMP_NOERROR; case SNMP_PDU_SET: if (local == NULL) { switch (obj->Syntax.LngInt) { case SNMP_CREATEREQUEST: if ((local = MibInsert(obj, &RmonEventInstance, idlen, 1)) == NULL) return SNMP_GENERROR; if ((local->Data = NewDnpapRmonEvent(1)) == NULL) return SNMP_GENERROR; data = (DnpapRmonEvent*) local->Data; if (DnpapEventCInit(data) == TRUE) { data->Status = SNMP_UNDERCREATION; return SNMP_NOERROR; } DelDnpapRmonEvent(local->Data); MibRemove(obj, &RmonEventInstance, idlen, 1); return SNMP_GENERROR; default: return SNMP_NOSUCHNAME; } } data = (DnpapRmonEvent*)local->Data; switch (data->Status) { case SNMP_UNDERCREATION: switch (obj->Syntax.LngInt) { case SNMP_VALID: if (DnpapEventCStart(data) == TRUE) { data->Status = SNMP_VALID; return SNMP_NOERROR; } else return SNMP_BADVALUE; case SNMP_INVALID: if (DnpapEventCStop(data) == TRUE) { DelDnpapRmonEvent(local->Data); if (MibRemove(obj, &RmonEventInstance, idlen, 1) == TRUE) return SNMP_NOERROR; } return SNMP_GENERROR; default: return SNMP_BADVALUE; } case SNMP_VALID: switch (obj->Syntax.LngInt) { case SNMP_INVALID: if (DnpapEventCStop(data) == TRUE) { DelDnpapRmonEvent(local->Data); if (MibRemove(obj, &RmonEventInstance, idlen, 1) == TRUE) return SNMP_NOERROR; } return SNMP_GENERROR; case SNMP_VALID: return SNMP_NOERROR; default: return SNMP_BADVALUE; } } } return SNMP_GENERROR;}WORD DnpapEventLogEventIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;DnpapRmonLog *log; if ((local = MibRmon(obj, RmonEventInstance, idlen, 2)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (EventMibNext(obj, &local, idlen, 2) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if ((log = EventLogEntry(obj, idlen, local)) == NULL) return SNMP_NOSUCHNAME; return DnpapLogEventIndex(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD DnpapEventLogIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;DnpapRmonLog *log; if ((local = MibRmon(obj, RmonEventInstance, idlen, 2)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (EventMibNext(obj, &local, idlen, 2) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if ((log = EventLogEntry(obj, idlen, local)) == NULL) return SNMP_NOSUCHNAME; return DnpapLogIndex(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD DnpapEventLogTime(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;DnpapRmonLog *log; if ((local = MibRmon(obj, RmonEventInstance, idlen, 2)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (EventMibNext(obj, &local, idlen, 2) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if ((log = EventLogEntry(obj, idlen, local)) == NULL) return SNMP_NOSUCHNAME; return DnpapLogTime(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD DnpapEventLogDescription(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;DnpapRmonLog *log; if ((local = MibRmon(obj, RmonEventInstance, idlen, 2)) == NULL) return SNMP_NOSUCHNAME; switch (obj->Request) { case SNMP_PDU_NEXT: if (EventMibNext(obj, &local, idlen, 2) == FALSE) return SNMP_NOSUCHNAME; case SNMP_PDU_GET: if ((log = EventLogEntry(obj, idlen, local)) == NULL) return SNMP_NOSUCHNAME; return DnpapLogDescription(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}DnpapRmonLog* EventLogEntry(SNMP_OBJECT *obj, WORD idlen, MIB_LOCAL *local){LONG firstlog, lastlog, logindex, realindex;DnpapRmonEvent *event = (DnpapRmonEvent*)local->Data; logindex = obj->Id[idlen+1]; if (EventFirstLastLog(event, &firstlog, &lastlog) == FALSE || EventLogInRange(firstlog, lastlog, logindex) == FALSE) return NULL; if (logindex >= firstlog) realindex = event->LogPos + logindex - firstlog; else realindex = event->LogPos - lastlog + logindex - 1; if (realindex >= event->NrLogs) realindex -= event->NrLogs; else if (realindex < 0) realindex += event->NrLogs; return &event->Logs[realindex];}BOOLEAN DnpapGenerateEvent(CHAR *generator, LONG eventindex, WORD code, WORD specific, SNMP_OBJECT *list, WORD listlen){MIB_LOCAL *local;DnpapRmonEvent *event;DnpapRmonLog *ptr; if (eventindex == 0) return FALSE; for (local = RmonEventInstance; local != NULL; local = local->Next) { event = (DnpapRmonEvent*)local->Data; if (event->Status == SNMP_VALID && eventindex == local->Index) { DnpapEventGenerated(eventindex); event->LastTimeSent = SysTime(); if (event->Type == DEVENT_LOG || event->Type == DEVENT_LOG_TRAP) { if (event->LogBounced == TRUE || event->NrLogs == LogMaxNrLogs || (ptr = ReNewDnpapRmonLog(event->Logs, (WORD)event->NrLogs+1, (WORD)event->NrLogs, (WORD)LogMaxNrLogs)) == NULL) { event->LogBounced = TRUE; if (event->NrLogs == 0) { DnpapMessage(DMC_ERROR, DEVENT_NOLOGS, "event: could not create any log entries"); return FALSE; } if (event->LogPos == event->NrLogs) event->LogPos = 0; } else { event->Logs = ptr; event->NrLogs++; } event->Logs[event->LogPos].Index = event->LogIndex++; if (event->Logs[event->LogPos].Index == 0) event->Logs[event->LogPos].Index = event->LogIndex++; event->Logs[event->LogPos].Time = SysTime(); sprintf(event->Logs[event->LogPos].Description, "event description: %.*s, generator: %s, event index: %ld, trap: %s, specific: %s%n", event->DescrLen, event->Description, generator, eventindex, SnmpTrap[code], TrapSpecific[specific], &event->Logs[event->LogPos].DescrLen); event->LogPos++; } if (event->Type == DEVENT_SNMP_TRAP || event->Type == DEVENT_LOG_TRAP) if (AgentSendTrap(event->Community, event->CommLen, code, specific, list, listlen) == FALSE) DnpapMessage(DMC_WARNING, DEVENT_TRAPFAIL, "event: trap send failed"); return TRUE; } } return FALSE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -