




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*Alarm.cpp*/
/*=================================================================
============*
*DESCRIPTION:receiveinformationandwritefile
*
*
*HISTORY:NAMEDATEREASON
*--------------
*WangXinXin11/14/2012Original
*
*SEEALSO:
*
*NOTES:g++Alarm.cpp-osnmp_test-lsnmp
*==================================================================
===========*/
#include"Alarm.h"
enum{
IP_POS=0,
AS_POS,
};
#ifndefMIN
#defineMIN(a,b)((a)<(b)?(a):(b))
#endif
#ifndefMAX
#defineMAX(a,b)((a)>(b)?(a):(b))
#endif
char*g_itemstr;
charg_IpBuf[50];
charlineBuf[MAX_LINE_ALARM_LEN];
Alarm*Alarm::_instance=NULL;
Alarm::Alarm(void)
{
//printf("brotherisgonnasendalarm!\n");
readNMSConfig();
}
Alarm*Alarm::instance()
{
if(_instance==NULL)
{
_instance=newAlarm();
}
return(_instance);
}
FILE*Alarm::openCfgfile(char*pFilename)
{
FILE*pFile=NULL;
if(!(pFile=fopen(pFilename,"r")))
{
strcpy(g_IpBuf,"
10
");
//printf(">>failtoopenfile>%s\n\n",pFilename);
g_itemstr=g_IpBuf;
returnNULL;
}
//printf(">>openfile>%s\n",pFilename);
returnpFile;
}
intAlarm::readLine(intline,ALARM_LINE_ITEMS*pLineItems)
{
inti,n;
intpos,offset;
char*pbuf=lineBuf;
for(i=0,n=0;i<MAX_LINE_ALARM_LEN;n++){
for(;i<MAX_LINE_ALARM_LEN;i++){
if(!isspace(pbuf[i]))break;
}
pos=i;
for(;i<MAX_LINE_ALARM_LEN;i++){
if(isspace(pbuf[i]))break;
}
offset=i-1;
if(offset<=pos)break;
memset(pLineItems[line].item[n].content,0,MAX_ITEM_ALARM_LEN);
memcpy(pLineItems[line].item[n].content,&pbuf[pos],
MIN((offset-pos+1),MAX_ITEM_ALARM_LEN));
//printf("Getline[%d]item[%d]:%s\n",line,n,
pLineItems[line].item[n].content);
}
returnn;
}
ALARM_LINE_ITEMS*Alarm::itemsptr()
{
staticALARM_LINE_ITEMS*pLineItems=NULL;
if(!pLineItems){
pLineItems=
(ALARM_LINE_ITEMS*)calloc(sizeof(ALARM_LINE_ITEMS),MAX_ALARM_LINE);
}
returnpLineItems;
}
intAlarm::readCfgItems(char*pfilename)
{
FILE*fp=NULL;
intline;
memset(lineBuf,'',MAX_LINE_ALARM_LEN);
ALARM_LINE_ITEMS*pItems=itemsptr();
if(NULL==(fp=openCfgfile(pfilename))){
return-1;
}
//fseek(fp,0,SEEK_SET);
line=0;
while(NULL!=fgets(lineBuf,MAX_LINE_ALARM_LEN,fp)){
//printf("readline%d:%s",line,lineBuf);
if(readLine(line,pItems)){
line++;
}
else{
//printf("thisisablankline,ignore\n");
}
memset(lineBuf,'',MAX_LINE_ALARM_LEN);
}
fclose(fp);
return(line>0?(line-1):0);
}
voidAlarm::readNMSConfig()
{
intret=0;
ALARM_LINE_ITEMS*pitems=itemsptr();
//printf("..readingNMSconfigfile\n");
ret=readCfgItems(NMS_CFG_FILE_PATH);
if(ret>=0)
{
g_itemstr=pitems[0].item[IP_POS].content;
}
}
voidAlarm::SendAlarm(AlarmInfo*Info)
{
charC16_AlarmTime[STR_LEN];
structtm*STim;
time_tSencTim;
oidobj1[]={1,3,6,1,4,1,28107,68,1,2,2,1,1};
oidobj2[]={1,3,6,1,4,1,28107,68,1,2,2,1,2};
oidobj3[]={1,3,6,1,4,1,28107,68,1,2,2,1,3};
oidobj4[]={1,3,6,1,4,1,28107,68,1,2,2,1,4};
oidobj5[]={1,3,6,1,4,1,28107,68,1,2,2,1,5};
oidobj6[]={1,3,6,1,4,1,28107,68,1,2,2,1,6};
oidobj7[]={1,3,6,1,4,1,28107,68,1,2,2,1,7};
oidobj8[]={1,3,6,1,4,1,28107,68,1,2,2,1,8};
oidobj9[]={1,3,6,1,4,1,28107,68,1,2,2,1,9};
oidobj10[]={1,3,6,1,4,1,28107,68,1,2,2,1,10};
oidobj11[]={1,3,6,1,4,1,28107,68,1,2,2,1,11};
oidobj12[]={1,3,6,1,4,1,28107,68,1,2,2,1,12};
oidobj13[]={1,3,6,1,4,1,28107,68,1,2,2,1,13};
oidobj14[]={1,3,6,1,4,1,28107,68,1,2,2,1,14};
oidobj15[]={1,3,6,1,4,1,28107,68,1,2,2,1,15};
oidobj16[]={1,3,6,1,4,1,28107,68,1,2,2,1,16};
oidobj17[]={1,3,6,1,4,1,28107,68,1,2,2,1,17};
oidobj18[]={1,3,6,1,4,1,28107,68,1,2,2,1,18};
oidobj19[]={1,3,6,1,4,1,28107,68,1,2,2,1,19};
oidobj20[]={1,3,6,1,4,1,28107,68,1,2,2,1,20};
charNone[]="0";
SencTim=time(NULL);
STim=localtime((consttime_t*)&SencTim);
strftime(C16_AlarmTime,STR_LEN,"%Y%m%d.%H%M%S",STim);
netsnmp_sessionsession,*ss;
netsnmp_pdu*pdu;
longsysuptime;
charcsysuptime[20];
char*trap;
charcommu[20];
intstatus;
//printf("ServerIp=%s\n",g_itemstr);
snmp_sess_init(&session);
session.version=SNMP_VERSION_2c;
session.peername=g_itemstr;
session.remote_port=SNMP_TRAP_PORT;
strcpy(commu,"public");
munity=(unsignedchar*)commu;
munity_len=strlen((char*)munity);
session.retries=3;
session.timeout=2000;
session.sessid=0;
netsnmp_ds_set_int(NETSNMP_DS_LIBRARY_ID,
NETSNMP_DS_LIB_DEFAULT_PORT,SNMP_TRAP_PORT);
ss=snmp_open(&session);
if(ss==NULL)
{
snmp_sess_perror("snmptrap",&session);
}
pdu=snmp_pdu_create(SNMP_MSG_TRAP2);
sysuptime=get_uptime();
sprintf(csysuptime,"%ld",sysuptime);
trap=csysuptime;
//printf("C2_AlarmGroup=%s\n",Info->C2_AlarmGroup);
//printf("C3_AlarmType=%s\n",Info->C3_AlarmType);
//printf("C7_HostIp=%s\n",Info->C7_HostIp);
unsignedintHostIp=htonl(inet_addr(Info->C7_HostIp));
memset(Info->C7_HostIp,0,STR_LEN);
sprintf(Info->C7_HostIp,"%d",HostIp);
//printf("C7_HostIp=%s\n",Info->C7_HostIp);
//printf("C8_AlarmPortId=%s\n",Info->C8_AlarmPortId);
//printf("C13_AlarmLevel=%s\n",Info->C13_AlarmLevel);
//printf("C18_AlarmSwitch=%s\n",Info->C18_AlarmSwitch);
//printf("C20_AlarmContent=%s\n",Info->C20_AlarmContent);
snmp_add_var(pdu,obj1,OID_LENGTH(obj1),'i',None);
snmp_add_var(pdu,obj2,OID_LENGTH(obj2),'i',Info->C2_AlarmGroup);
snmp_add_var(pdu,obj3,OID_LENGTH(obj3),'i',Info->C3_AlarmType);
snmp_add_var(pdu,obj4,OID_LENGTH(obj4),'i',None);
snmp_add_var(pdu,obj5,OID_LENGTH(obj5),'i',None);
snmp_add_var(pdu,obj6,OID_LENGTH(obj6),'i',None);
snmp_add_var(pdu,obj7,OID_LENGTH(obj7),'i',Info->C7_HostIp);
snmp_add_var(pdu,obj8,OID_LENGTH(obj8),'i',Info-
>C8_AlarmPortId);
snmp_add_var(pdu,obj9,OID_LENGTH(obj9),'i',None);
snmp_add_var(pdu,obj10,OID_LENGTH(obj10),'i',None);
snmp_add_var(pdu,obj11,OID_LENGTH(obj11),'i',None);
snmp_add_var(pdu,obj12,OID_LENGTH(obj12),'i',None);
snmp_add_var(pdu,obj13,OID_LENGTH(obj13),'i',Info-
>C13_AlarmLevel);
snmp_add_var(pdu,obj14,OID_LENGTH(obj14),'i',None);
snmp_add_var(pdu,obj15,OID_LENGTH(obj15),'i',None);
snmp_add_var(pdu,obj16,OID_LENGTH(obj16),'s',C16_AlarmTime);
snmp_add_var(pdu,obj17,OID_LENGTH(obj17),'i',None);
snmp_add_var(pdu,obj18,OID_LENGTH(obj18),'i',Info-
>C18_AlarmSwitch);
snmp_add_var(pdu,obj19,OID_LENGTH(obj19),'i',None);
snmp_add_var(pdu,obj20,OID_LENGTH(obj20),'s',Info-
>C20_AlarmContent);
status=snmp_send(ss,pdu);
snmp_close(ss);
}
intmain()
{
Alarm*ptr=Alarm::instance();
AlarmInfoInfo;
strcpy(Info.C2_AlarmGroup,"133");
strcpy(Info.C3_AlarmType,"133701");
strcpy(Info.C7_HostIp,"
53
");
strcpy(Info.C8_AlarmPortId,"0");
strcpy(Info.C13_AlarmLevel,"1");
strcpy(Info.C18_AlarmSwitch,"1");
strcpy(Info.C20_AlarmContent,"DnarDead");
ptr->SendAlarm(&Info);
return0;
}
/*Alarm.h*/
/*=================================================================
============*
*DESCRIPTION:receiveinformationandwritefile
*
*
*HISTORY:NAMEDATEREASON
*--------------
*WangXinXin11/14/2012Original
*
*SEEALSO:
*
*NOTES:g++Alarm.cpp-osnmp_test-lsnmp
*==================================================================
===========*/
#ifndefALARM_H
#defineALARM_H
#include<net-snmp/net-snmp-config.h>
#include<net-snmp/net-snmp-includes.h>
#include<net-snmp/agent/agent_trap.h>
#include<netdb.h>
#include<net/if.h>
#include<sys/ioctl.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<stdlib.h>
#include<stdio.h>
#include"ctype.h"
#defineSTR_LEN256
#defineMAX_LINE_ALARM_LEN512
#defineMAX_ITEM_ALARM_LEN32
#defineMAX_ONEL_ALARM_ITEM5
#defineMAX_ALARM_LINE5
#defineNMS_CFG_FILE_PATH"/opt/CTIR/etc/NMS.cfg"
typedefs
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中考英语冲刺语法填空热点新题练习含答案解析
- 2025汽车维护保养合同模板
- 2025餐饮连锁加盟合同范本
- 2025汽车销售代理合同
- 2025电子合同规范
- 2025合法个人借款合同范本 法律认可的
- 2025供应商合同范本模板示例
- 苏教版科学五年级下册全册教学设计
- 公司股权转让协议书标准合同书范例
- 卫生院的聘用合同范例
- GB/T 22235-2008液体黏度的测定
- CAD输入文字时提示“找不到主词典无法启动拼写检查程序”怎么办
- -活出心花怒放的生命 课件 心理健康
- 给水泵检修方案
- 设备出入库管理办法
- KEGG代谢通路中文翻译
- 消火栓月检查表
- GB∕T 17832-2021 银合金首饰 银含量的测定 溴化钾容量法(电位滴定法)
- 低成本自动化的开展与案例77页PPT课件
- 人防工程竣工资料(全套)
- 梅州市部分饮用水源保护区调整方案
评论
0/150
提交评论