📄 event_m.c
字号:
return SNMP_NOSUCHNAME; case SNMP_PDU_GET: data = (RmonEvent*)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 = (RmonEvent*)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 EventStatus(SNMP_OBJECT* obj, WORD idlen){MIB_LOCAL *local = NULL;RmonEvent *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 = (RmonEvent*)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 = (RmonEvent*)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 = NewRmonEvent(1)) == NULL) return SNMP_GENERROR; data = (RmonEvent*) local->Data; if (EventCInit(data) == TRUE) { data->Status = SNMP_UNDERCREATION; return SNMP_NOERROR; } DelRmonEvent(local->Data); MibRemove(obj, &RmonEventInstance, idlen, 1); return SNMP_GENERROR; default: return SNMP_NOSUCHNAME; } } data = (RmonEvent*)local->Data; switch (data->Status) { case SNMP_UNDERCREATION: switch (obj->Syntax.LngInt) { case SNMP_VALID: if (EventCStart(data) == TRUE) { data->Status = SNMP_VALID; return SNMP_NOERROR; } else return SNMP_BADVALUE; case SNMP_INVALID: if (EventCStop(data) == TRUE) { DelRmonEvent(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 (EventCStop(data) == TRUE) { DelRmonEvent(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 EventLogEventIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;RmonLog *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 LogEventIndex(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD EventLogIndex(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;RmonLog *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 LogIndex(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD EventLogTime(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;RmonLog *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 LogTime(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}WORD EventLogDescription(SNMP_OBJECT *obj, WORD idlen){MIB_LOCAL* local = NULL;RmonLog *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 LogDescription(obj, idlen, log); case SNMP_PDU_SET: return SNMP_READONLY; } return SNMP_GENERROR;}RmonLog* EventLogEntry(SNMP_OBJECT *obj, WORD idlen, MIB_LOCAL *local){LONG firstlog, lastlog, logindex, realindex;RmonEvent *event = (RmonEvent*)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];}/******************************************************************* NAME: GenerateEvent** SYNOPSIS: BOOLEAN GenerateEvent(** CHAR *generator,** LONG eventindex,** WORD code,** WORD specific,** SNMP_OBJECT *list,** WORD listlen)** PARAMETERS: generator: string to identify the module that** called GenerateEvent()** eventindex: the index of the event that is** to be generated** code: SNMP-trap code** specific: SNMP-trap enterprise specific code** list: list of objects that are to be sent with** an SNMP-trap** listlen: number of objects in the list** DESCRIPTION: tries to generate an event with number eventindex.** As a result of configuration settings a log entry** will be created and/or an SNMP-trap will be sent.** RETURNS: TRUE: event exists and was successfully generated.** FALSE: event does not exist or was not generated** successfully.** REMARKS: see also EventGenerated() in event_u*******************************************************************/BOOLEAN GenerateEvent(CHAR *generator, LONG eventindex, WORD code, WORD specific, SNMP_OBJECT *list, WORD listlen){MIB_LOCAL *local;RmonEvent *event;RmonLog *ptr; if (eventindex == 0) return FALSE; for (local = RmonEventInstance; local != NULL; local = local->Next) { event = (RmonEvent*)local->Data; if (event->Status == SNMP_VALID && eventindex == local->Index) { EventGenerated(eventindex); event->LastTimeSent = SysTime(); if (event->Type == EVENT_LOG || event->Type == EVENT_LOG_TRAP) { if (event->LogBounced == TRUE || event->NrLogs == LogMaxNrLogs || (ptr = ReNewRmonLog(event->Logs, (WORD)event->NrLogs+1, (WORD)event->NrLogs, (WORD)LogMaxNrLogs)) == NULL) { event->LogBounced = TRUE; if (event->NrLogs == 0) { DnpapMessage(DMC_ERROR, EVENT_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 == EVENT_SNMP_TRAP || event->Type == EVENT_LOG_TRAP) if (AgentSendTrap(event->Community, event->CommLen, code, specific, list, listlen) == FALSE) DnpapMessage(DMC_WARNING, EVENT_TRAPFAIL, "event: trap send failed"); return TRUE; } } return FALSE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -