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

📄 deventm.c

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