⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 event_m.c

📁 嵌入式RMON,RMON为Remote monitor的缩写,基于SNMP为网络提供主动监控及错误告警,智能交换路由必备协议
💻 C
📖 第 1 页 / 共 2 页
字号:
			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 + -