1917 lines
57 KiB
C
1917 lines
57 KiB
C
/*************************************************
|
||
File name: paraComm.c
|
||
Author: Cui Ticun
|
||
Version: 9.00.00
|
||
Date: 2007-7-1
|
||
Description:Operate system's parameter
|
||
|
||
History:
|
||
No.
|
||
Author
|
||
Date
|
||
Version
|
||
Description
|
||
*************************************************/
|
||
#include "paraComm.h"
|
||
|
||
/******************************************************/
|
||
/****** Heartbeat Parameter ******/
|
||
/******************************************************/
|
||
DWORD PROC_HEARTBEAT_OID[12]={1,3,6,1,4,1,1373,2,4,10,1};
|
||
int PROC_HEARTBEAT_OIDLEN=11;
|
||
int sendHeartbeat();
|
||
|
||
/*******define in omcLib/omcDbLib.c ***/
|
||
MYSQL *mysql_conn();
|
||
MYSQL_RES *mysql_getres();
|
||
int mysql_getnores();
|
||
|
||
/******Private Functions***/
|
||
int paraCommScan();
|
||
int paraCommProc();
|
||
int respProc(int *commNo, snmp_pdu * pdu);
|
||
int updateCommTable(int commNo);
|
||
int getSysAddr(int commNo);
|
||
int getParamTable(int sysTypeNo, int sysNo, int paramType,
|
||
char *tableName);
|
||
int mkVarArr(int commNo, var_list * varArr);
|
||
int mkAddr(int commNo, snmp_addr * msgAddr);
|
||
int mkPdu(int commNo, var_list * varArr, snmp_pdu * pdu);
|
||
int initUnitComm(int commNo);
|
||
void freeParamSet(int commNo);
|
||
void optErr(unitComm *ucomm);
|
||
|
||
|
||
/*******Global Var*********/
|
||
FILE *paraCommLog;
|
||
int oldDay = 0; //1-31
|
||
|
||
static unitComm commArr[MaxCommNum];
|
||
static MYSQL *dbConn;
|
||
|
||
static int MaxErrorStatusNum = 19;
|
||
static char errorStatusDescArr[19][30] =
|
||
{ "NoError", "TooBig", "NoSuchName", "BadValue", "ReadOnly",
|
||
"GenErr", "NoAccess", "WrongType", "WrongLength", "WrongEncoding",
|
||
"wrongValue", "noCreation", "inconsistentValue", "resourceUnavailabe",
|
||
"commitFailed",
|
||
"UndoFailed", "AuthorizationError", "NoWritable", "inconsistentName"
|
||
};
|
||
|
||
int paraComm_timerCount = 0; //for paraCommTimer
|
||
|
||
int checkMibSystem(int sysTypeNo)
|
||
{
|
||
switch(sysTypeNo)
|
||
{
|
||
case 320://MSC
|
||
case 355://SMEG
|
||
case 375://OPPS
|
||
case 225://XAPP
|
||
case 260://SMPP
|
||
case 311://AAS
|
||
case 325://VLR
|
||
case 330://HLR
|
||
case 340://AUC
|
||
case 350://SMSC
|
||
case 380://EIR
|
||
case 385://MRFC
|
||
case 360://PPS
|
||
case 361://MME
|
||
case 362://SPGW
|
||
case 363://IMS
|
||
case 364://ACS
|
||
case 365://UDM
|
||
case 366://AUSF
|
||
case 390://VMS
|
||
case 378://iPALIM
|
||
case 379://iRLS
|
||
case 386://MHC
|
||
case 370://MNP
|
||
case 387://iGRS
|
||
case 389://IUUPGW
|
||
case 391://TMG
|
||
case 392://AMRMG
|
||
case 393://GbC
|
||
case 394://GbC
|
||
case 395://RCM
|
||
case 222://MTP3
|
||
case 223://SCCP
|
||
case 480://DEA
|
||
return 1;
|
||
break;
|
||
default:
|
||
return 0;
|
||
break;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
int checkPlatHasSubSysNo(int sysTypeNo,int sysNo)
|
||
{
|
||
// modified by simon at 2024/04/12
|
||
//if(sysNo != 9)
|
||
if (sysNo != 9 && sysNo != 3 && sysNo != 5 && sysNo != 6 && sysNo != 11) // 9-MSS,3-HLR,5-OCS/PPS,6-SMSC 11-AAS
|
||
{
|
||
switch(sysTypeNo)
|
||
{
|
||
case 260://SMPP
|
||
case 222://MTP3
|
||
case 223://SCCP
|
||
return 1;
|
||
break;
|
||
default:
|
||
return 0;
|
||
break;
|
||
}
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // paraCommInit
|
||
Description: // 1.Init OMC_PUB.parameterComm
|
||
// 2.Init Commands Array
|
||
// 3.Init Every module's paramConf
|
||
Calls: // omcLogInit();initUnitComm();initDbFromMib();
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: // OMC_PUB.parameterComm;OBJ_xxx.paramConf
|
||
Input: //
|
||
Output: //
|
||
Return: // 1:OK,0:error
|
||
Others: //
|
||
*************************************************/
|
||
//extern int global_mod_index;
|
||
int paraCommInit()
|
||
{
|
||
int commNo;
|
||
long nowTime;
|
||
struct tm *nowTm;
|
||
char commQuery[128] = "\0";
|
||
|
||
//init log
|
||
omcLogInit(paraComm_LogPath, paraComm_LogFile, ¶CommLog);
|
||
nowTime = time(NULL);
|
||
nowTm = localtime(&nowTime);
|
||
oldDay = nowTm->tm_mday;
|
||
|
||
//init db connect
|
||
dbConn = mysql_conn(HOSTNAME, PUB_DB);
|
||
if (dbConn == NULL) {
|
||
omcLog(paraCommLog,"[ERR][paraCommInit]:mysql connect OMC_PUB");
|
||
return (0);
|
||
}
|
||
|
||
//init command table
|
||
sprintf(commQuery, "DELETE FROM %s", CommTable);
|
||
mysql_getnores(dbConn, commQuery);
|
||
|
||
//init command arrary
|
||
for (commNo = 0; commNo < MaxCommNum; commNo++) {
|
||
initUnitComm(commNo);
|
||
}
|
||
|
||
//init every module's paramCOnf
|
||
//for(global_mod_index=0;global_mod_index<global_mod_total;global_mod_index++)
|
||
//{
|
||
initDbFromMib();
|
||
//}
|
||
return (1);
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // sendHeartbeat
|
||
Description: // Send process heartbeat to beatProc
|
||
Calls: // snmp_send
|
||
Called By: // on_Timer
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 1:OK; 0:Fail
|
||
Others: //
|
||
*************************************************/
|
||
int sendHeartbeat()
|
||
{
|
||
snmp_pdu pdu;
|
||
snmp_addr addr;
|
||
char proc_name[16];
|
||
|
||
memset(proc_name,0,16);
|
||
sprintf(proc_name,"paraComm");
|
||
|
||
//pdu
|
||
memset(&pdu,0,sizeof(snmp_pdu));
|
||
pdu.pdu_type=7;
|
||
pdu.request_id=0;
|
||
sprintf(pdu.community,"public");
|
||
pdu.var_num=1;
|
||
pdu.error_status=0;
|
||
pdu.error_index=0;
|
||
|
||
//Addr
|
||
addr.local_port = 4957;
|
||
//addr.remote_ip = inet_addr("127.0.0.1");
|
||
addr.remote_ip = GetLocalIP();
|
||
addr.broadcast = 0;
|
||
addr.remote_port = 4957;
|
||
|
||
//Varlist
|
||
memcpy(pdu.var[0].oid,PROC_HEARTBEAT_OID,PROC_HEARTBEAT_OIDLEN*sizeof(DWORD));
|
||
|
||
pdu.var[0].oidlen=PROC_HEARTBEAT_OIDLEN;
|
||
pdu.var[0].vartype=0x04;
|
||
pdu.var[0].msglen=16;
|
||
memcpy(pdu.var[0].msg,proc_name,16);
|
||
|
||
if(snmp_send(&pdu, &addr) <= 0)
|
||
{
|
||
omcLog(paraCommLog,"Send heartbeat fail");
|
||
return 0;
|
||
}
|
||
return 1;
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // paraCommTimer
|
||
Description: // <20>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>
|
||
|
||
Calls: // paraCommScan();paraCommProc();omcLogInit();
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 1:OK,0:error
|
||
Others: //
|
||
*************************************************/
|
||
unsigned long heartbeat_timeout=0;
|
||
int paraCommTimer()
|
||
{
|
||
int returnResult=0;
|
||
|
||
|
||
if(time(NULL) - heartbeat_timeout > 5)
|
||
{
|
||
heartbeat_timeout=time(NULL);
|
||
sendHeartbeat();
|
||
}
|
||
|
||
paraCommScan();
|
||
|
||
if (paraComm_timerCount > 5000) {//100s
|
||
long l_time;
|
||
struct tm *t;
|
||
l_time = time(NULL);
|
||
t = localtime(&l_time);
|
||
if (t->tm_mday != oldDay) {
|
||
//init logfile,create a new log file to restore log
|
||
omcLogInit(paraComm_LogPath, paraComm_LogFile, ¶CommLog);
|
||
oldDay = t->tm_mday;
|
||
}
|
||
paraComm_timerCount = 0;
|
||
}
|
||
paraComm_timerCount++;
|
||
|
||
|
||
returnResult=paraCommProc();
|
||
if (returnResult) {
|
||
return (1);
|
||
} else {
|
||
return (0);
|
||
}
|
||
}
|
||
|
||
|
||
/*************************************************
|
||
Function: // paraCommScan
|
||
Description: // ɨ<><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>顣
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
Calls: //
|
||
Called By: // int paraCommTimer()
|
||
Table Accessed: // OMC_PUB.parameterComm
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 1->find command,0->no command,-1->failed
|
||
Others: //
|
||
*************************************************/
|
||
int paraCommScan()
|
||
{
|
||
int i = 0, commNo = 0;
|
||
|
||
char commQuery[512] = "\0";
|
||
char cfgQuery[512] = "\0";
|
||
char paramConfQuery[512]= "\0";
|
||
char paramQuery[1024] = "\0";
|
||
char paramTableName[64] = "\0";
|
||
MYSQL_RES *commResult = NULL,*cfgResult = NULL,*paramConfResult = NULL,*paramResult = NULL;;
|
||
MYSQL_ROW commRow,cfgRow, paramConfRow;
|
||
|
||
/*
|
||
char paramSelect[512] = "SELECT T1.level_1,T1.level_2,T1.level_3,T1.level_4,T1.level_5,"
|
||
"T1.level_6,T1.level_7,T1.level_8,T1.level_9,T1.level_10,"
|
||
"T1.instanceNo,T1.initValue,T1.readValue,T2.valueType";
|
||
*/
|
||
//AdministrationState do not set
|
||
|
||
char paramSelect[512] = "SELECT T1.level_1,T1.level_2,T1.level_3,T1.level_4,T1.level_5,"
|
||
"T1.level_6,T1.level_7,T1.level_8,T1.level_9,T1.level_10,"
|
||
"T1.instanceNo,T1.`initValue`,T1.`readValue`,T2.valueType,T2.name_2";
|
||
|
||
|
||
char queryOrderBy[256] = " T1.level_1,T1.level_2,T1.level_3,T1.level_4,T1.level_5,"\
|
||
"T1.level_6,T1.level_7,T1.level_8,T1.level_9,T1.level_10";
|
||
char levelStr[64] = "\0";
|
||
char queryWhere[512] = "\0";
|
||
|
||
char *oneOid;
|
||
char *oneInstanceNo;
|
||
char instanceNo[32];
|
||
|
||
sprintf(commQuery,
|
||
"SELECT commId,commType,sysTypeNo,sysNo,subSysNo,paramType,objId,instanceNo"
|
||
" FROM %s WHERE commState = '%d' ORDER BY sendTime",
|
||
CommTable, nWaitProc);
|
||
//printf("commQuery=%s\n",commQuery);
|
||
commResult = (MYSQL_RES *) mysql_getres(dbConn, commQuery);
|
||
if (commResult == NULL) {
|
||
omcLog(paraCommLog, " Database may be stopped,when get commands");
|
||
return (-1);
|
||
} else if (mysql_num_rows(commResult) == 0) {
|
||
mysql_free_result(commResult);
|
||
return (0);
|
||
}
|
||
|
||
while ((commRow = mysql_fetch_row(commResult))) {
|
||
//Try to Find a available command array
|
||
for (commNo = 0; commNo < MaxCommNum; commNo++) {
|
||
if ((commArr[commNo].procState == nIdle)
|
||
&& (commArr[commNo].commState != nWaitProc)
|
||
&& (commArr[commNo].commState != nInProc)) {
|
||
initUnitComm(commNo);
|
||
break;
|
||
}
|
||
}//end of for(..)
|
||
|
||
if (commNo == MaxCommNum) {
|
||
omcLog(paraCommLog, "Commands array is full");
|
||
break;
|
||
}
|
||
|
||
commArr[commNo].commState = nInProc;
|
||
commArr[commNo].commId = atoi(commRow[0]);
|
||
commArr[commNo].commType = atoi(commRow[1]);
|
||
commArr[commNo].sysTypeNo = atoi(commRow[2]);
|
||
commArr[commNo].sysNo = atoi(commRow[3]);
|
||
commArr[commNo].subSysNo = atoi(commRow[4]);
|
||
commArr[commNo].paramType = (BYTE) atoi(commRow[5]);
|
||
|
||
//Get Active IP From IpTable
|
||
if (!getSysAddr(commNo)) {
|
||
sprintf(commArr[commNo].desc, CONF_COMMAND_ERR_0101);
|
||
commArr[commNo].commState = nProcFail;
|
||
commArr[commNo].procState = nIdle;
|
||
updateCommTable(commNo);
|
||
initUnitComm(commNo);
|
||
continue;
|
||
}
|
||
|
||
//Get General Info From ConfTable
|
||
sprintf(cfgQuery,
|
||
"SELECT maxMsgLen,snmpHead,snmpPort,needMuliObj,snmpCommunity "
|
||
"FROM %s WHERE sysTypeNo='%d'", ConfTable,
|
||
commArr[commNo].sysTypeNo);
|
||
//printf("cfgQuery=%s\n",cfgQuery);
|
||
cfgResult = (MYSQL_RES *) mysql_getres(dbConn, cfgQuery);
|
||
if (cfgResult == NULL) {
|
||
omcLog(paraCommLog, "Get system configuration informations error!!");
|
||
return (-1);
|
||
}
|
||
if ((cfgRow = mysql_fetch_row(cfgResult)) != NULL) {
|
||
commArr[commNo].snmpInfo.maxMsgLen = atoi(cfgRow[0]); //<--
|
||
commArr[commNo].snmpInfo.dstPort = atoi(cfgRow[2]); //<--
|
||
commArr[commNo].snmpInfo.needMuliObj= atoi(cfgRow[3]); //<--
|
||
sprintf(commArr[commNo].snmpInfo.snmpCommunity, "%s", cfgRow[4]); //<--
|
||
|
||
i = 0;
|
||
while ((oneOid = strsep(&(cfgRow[1]), "."))) {
|
||
commArr[commNo].snmpInfo.oid[i] = atoi(oneOid); //<--
|
||
i++;
|
||
}
|
||
commArr[commNo].snmpInfo.preOidLen = i; //<--
|
||
commArr[commNo].snmpInfo.oidLen = i; //<--
|
||
if (i < 1) {
|
||
omcLog(paraCommLog, "Get objId error!!");
|
||
mysql_free_result(cfgResult);
|
||
return (-1);
|
||
}
|
||
}
|
||
mysql_free_result(cfgResult);
|
||
|
||
//Get Oid Info
|
||
i = 0;
|
||
queryWhere[0]=0;
|
||
while ((oneOid = strsep(&(commRow[6]), ".")) != NULL) {
|
||
commArr[commNo].snmpInfo.oid[i+commArr[commNo].snmpInfo.oidLen] = atoi(oneOid);
|
||
i++;
|
||
levelStr[0] = 0;
|
||
if(i==1){
|
||
sprintf(levelStr, "T1.level_%d = '%s' ", i, oneOid);
|
||
}else{
|
||
sprintf(levelStr, "AND T1.level_%d = '%s' ", i, oneOid);
|
||
}
|
||
strcat(queryWhere, levelStr);
|
||
}
|
||
commArr[commNo].snmpInfo.oidLen = commArr[commNo].snmpInfo.oidLen+i;
|
||
if (commArr[commNo].snmpInfo.oidLen < 1) {
|
||
omcLog(paraCommLog, "Get subObjId error!!");
|
||
return (-1);
|
||
}
|
||
|
||
sprintf(paramConfQuery,
|
||
"SELECT T1.level_%d FROM OBJ_%d.paramConf AS T1 WHERE %s AND level_%d !=0 ORDER BY %s",
|
||
i+1,commArr[commNo].sysTypeNo,queryWhere, i+1,queryOrderBy);
|
||
//printf("paramConfQuery=%s\n",paramConfQuery);
|
||
paramConfResult = (MYSQL_RES *) mysql_getres(dbConn, paramConfQuery);
|
||
if (paramConfResult == NULL) {
|
||
omcLog(paraCommLog,
|
||
" Database may be stopped,when get paramConf");
|
||
return (-1);
|
||
}
|
||
|
||
commArr[commNo].snmpInfo.columnNum=mysql_num_rows(paramConfResult);
|
||
i=0;
|
||
while ((paramConfRow = mysql_fetch_row(paramConfResult))) {
|
||
commArr[commNo].snmpInfo.column[i]=atoi(paramConfRow[0]);
|
||
i++;
|
||
}
|
||
|
||
mysql_free_result(paramConfResult);
|
||
|
||
//Get InstanceNo info
|
||
if(strlen(commRow[7])>0){
|
||
//ISSUE-2
|
||
if(strstr(commRow[7],"."))
|
||
sprintf(levelStr, "AND T1.instanceNo = '%s' ",commRow[7]);
|
||
else
|
||
sprintf(levelStr, "AND T1.instanceNo = '%s' ",commRow[7]);
|
||
strcat(queryWhere, levelStr);
|
||
|
||
strcpy(instanceNo,commRow[7]);
|
||
i = 0;
|
||
while ((oneInstanceNo = strsep(&(commRow[7]), ".")) != NULL) {
|
||
commArr[commNo].snmpInfo.instanceNo[i] = atoi(oneInstanceNo);
|
||
i++;
|
||
}
|
||
|
||
commArr[commNo].snmpInfo.instanceNoLevel = i;
|
||
if (commArr[commNo].snmpInfo.instanceNoLevel < 1) {
|
||
omcLog(paraCommLog, "Get instanceNo error!!");
|
||
return (-1);
|
||
}
|
||
}
|
||
|
||
getParamTable(commArr[commNo].sysTypeNo, commArr[commNo].sysNo,
|
||
commArr[commNo].paramType, paramTableName);
|
||
sprintf(commArr[commNo].paramTable, "%s", paramTableName); //<--
|
||
|
||
for(i=1;i<=10;i++){
|
||
sprintf(levelStr, "AND T1.level_%d = T2.level_%d ", i,i);
|
||
strcat(queryWhere, levelStr);
|
||
}
|
||
|
||
|
||
if(checkMibSystem(commArr[commNo].sysTypeNo))
|
||
{
|
||
/*
|
||
if(commArr[commNo].commType==nSetComm){
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND (T2.maxAccess='%d' OR T2.maxAccess='%d') ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,
|
||
queryWhere,MIB_ACCESS_READWRITE,MIB_ACCESS_CREATE,queryOrderBy);
|
||
*/
|
||
if(commArr[commNo].commType==nSetComm){
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND T2.maxAccess='%d' ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,
|
||
queryWhere,MIB_ACCESS_READWRITE,queryOrderBy);
|
||
|
||
//ISSUE-3
|
||
if(checkPlatHasSubSysNo(commArr[commNo].sysTypeNo,commArr[commNo].sysNo))
|
||
{
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND T2.maxAccess='%d' AND T1.subSysNo='%d' ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,
|
||
queryWhere,MIB_ACCESS_READWRITE,commArr[commNo].subSysNo,queryOrderBy);
|
||
}
|
||
}else if(commArr[commNo].commType!=nGetBulkComm){
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND T2.maxAccess!='%d' AND T2.maxAccess!='%d' ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,
|
||
queryWhere,MIB_ACCESS_NOACCESS,MIB_ACCESS_NOTIFY,queryOrderBy);
|
||
|
||
//ISSUE-3
|
||
if(checkPlatHasSubSysNo(commArr[commNo].sysTypeNo,commArr[commNo].sysNo))
|
||
{
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND T2.maxAccess!='%d' AND T2.maxAccess!='%d' AND T1.subSysNo='%d' ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,
|
||
queryWhere,MIB_ACCESS_NOACCESS,MIB_ACCESS_NOTIFY,commArr[commNo].subSysNo,queryOrderBy);
|
||
}
|
||
}
|
||
omcLog(paraCommLog,"\nSQL=%s",paramQuery);
|
||
|
||
}else{
|
||
strcat(paramSelect,",T2.length");
|
||
if(commArr[commNo].paramType!=nSubSysParam){
|
||
if(commArr[commNo].commType==nSetComm){
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND subSysNo='%d' AND (T2.operType='2' OR T2.operType='3' OR T2.operType='4') ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,queryWhere,nPubFlag,queryOrderBy);
|
||
}else{
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
"WHERE %s AND subSysNo='%d' AND (T2.operType='1' OR T2.operType='3' OR T2.operType='4') ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,queryWhere,nPubFlag,queryOrderBy);
|
||
}
|
||
}else{
|
||
if(commArr[commNo].commType==nSetComm){
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND subSysNo='%d' AND (T2.operType='2' OR T2.operType='3' OR T2.operType='4') ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,queryWhere,commArr[commNo].subSysNo,queryOrderBy);
|
||
}else{
|
||
sprintf(paramQuery,"%s FROM %s AS T1,OBJ_%d.paramConf AS T2 "
|
||
" WHERE %s AND subSysNo='%d' AND (T2.operType='1' OR T2.operType='3' OR T2.operType='4') ORDER BY %s,instanceNo ",
|
||
paramSelect,paramTableName,commArr[commNo].sysTypeNo,queryWhere,commArr[commNo].subSysNo,queryOrderBy);
|
||
}
|
||
}
|
||
}
|
||
|
||
if(strlen(paramQuery)>0){
|
||
//printf("paramQuery=%s\n",paramQuery);
|
||
paramResult = (MYSQL_RES *) mysql_getres(dbConn, paramQuery);
|
||
if (paramResult == NULL) {
|
||
omcLog(paraCommLog,
|
||
" Database may be stopped,when get paramSet");
|
||
return (-1);
|
||
}
|
||
commArr[commNo].totalNum = mysql_num_rows(paramResult); //<--
|
||
if (commArr[commNo].totalNum <= 0) {
|
||
omcLog(paraCommLog,
|
||
"TotalNum <= 0,Cannot get the object value record!\nSQL=%s",
|
||
paramQuery);
|
||
sprintf(commArr[commNo].desc,CONF_COMMAND_ERR_0201);
|
||
|
||
commArr[commNo].commState = nProcFail;
|
||
commArr[commNo].procState = nIdle;
|
||
mysql_free_result(paramResult);
|
||
commArr[commNo].paramSet = NULL;
|
||
updateCommTable(commNo);
|
||
initUnitComm(commNo);
|
||
return (-1);
|
||
} else {
|
||
commArr[commNo].finishNum = 0; //<--
|
||
commArr[commNo].paramSet = paramResult; //<--
|
||
|
||
updateCommTable(commNo);
|
||
}
|
||
}
|
||
|
||
|
||
#if paraComm_DEBUG
|
||
//General Info
|
||
omcLog(paraCommLog,"commArr[%d].commId =%d", commNo,
|
||
commArr[commNo].commId);
|
||
omcLog(paraCommLog,"commArr[%d].commType=%d", commNo,
|
||
commArr[commNo].commType);
|
||
omcLog(paraCommLog,"commArr[%d].sysTypeNo=%d", commNo,
|
||
commArr[commNo].sysTypeNo);
|
||
omcLog(paraCommLog,"commArr[%d].sysNo =%d", commNo,
|
||
commArr[commNo].sysNo);
|
||
omcLog(paraCommLog,"commArr[%d].subSysNo =%d", commNo,
|
||
commArr[commNo].subSysNo);
|
||
omcLog(paraCommLog,"commArr[%d].paramType =%d", commNo,
|
||
commArr[commNo].paramType);
|
||
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.dstIP =%s", commNo,
|
||
commArr[commNo].snmpInfo.dstIP);
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.needMuliObj=%d", commNo,
|
||
commArr[commNo].snmpInfo.needMuliObj);
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.dstPort=%ld", commNo,
|
||
commArr[commNo].snmpInfo.dstPort);
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.maxMsgLen =%ld", commNo,
|
||
commArr[commNo].snmpInfo.maxMsgLen);
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.snmpCommunity =%s", commNo,
|
||
commArr[commNo].snmpInfo.snmpCommunity);
|
||
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.preOidLen =%d", commNo,
|
||
commArr[commNo].snmpInfo.preOidLen);
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.oidLen=%d", commNo,
|
||
commArr[commNo].snmpInfo.oidLen);
|
||
for(i=0;i<commArr[commNo].snmpInfo.oidLen;i++){
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.oid=%d", commNo,
|
||
commArr[commNo].snmpInfo.oid[i]);
|
||
}
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.columnNum=%d", commNo,
|
||
commArr[commNo].snmpInfo.columnNum);
|
||
for(i=0;i<commArr[commNo].snmpInfo.columnNum;i++){
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.column=%d", commNo,
|
||
commArr[commNo].snmpInfo.column[i]);
|
||
}
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.instanceNoLevel=%d", commNo,
|
||
commArr[commNo].snmpInfo.instanceNoLevel);
|
||
for(i=0;i<commArr[commNo].snmpInfo.instanceNoLevel;i++){
|
||
omcLog(paraCommLog,"commArr[%d].snmpInfo.instanceNo=%d", commNo,
|
||
commArr[commNo].snmpInfo.instanceNo[i]);
|
||
}
|
||
|
||
omcLog(paraCommLog,"commArr[%d].paramTable=%s", commNo,
|
||
commArr[commNo].paramTable);
|
||
|
||
|
||
omcLog(paraCommLog,"commArr[%d].procState=%d", commNo,
|
||
commArr[commNo].procState);
|
||
omcLog(paraCommLog,"commArr[%d].commState=%d", commNo,
|
||
commArr[commNo].commState);
|
||
#endif
|
||
updateCommTable(commNo);
|
||
} //end of while(..)
|
||
mysql_free_result(commResult);
|
||
return (1);
|
||
}
|
||
|
||
|
||
/*************************************************
|
||
Function: // paraCommProc
|
||
Description: // <20>豸<EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ĺ<EFBFBD><C4BA>ĺ<EFBFBD><C4BA><EFBFBD>
|
||
// 1.<2E><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// 2.<2E>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>ʱ
|
||
// 3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Ϣ
|
||
// 4.<2E>ϳɣ<CFB3><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||
|
||
Calls: //
|
||
Called By: // paraCommTimer
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 2->finish all,1->finish part,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
|
||
int paraCommProc()
|
||
{
|
||
int i = 0;
|
||
int j = 0;
|
||
int errorIndex;
|
||
char errorCause[128];
|
||
char tmpStr[32];
|
||
int idleCommCount = 0;
|
||
snmp_pdu tmpPdu;
|
||
snmp_addr tmpAddr;
|
||
var_list tmpVarArr[MaxVarNum];
|
||
|
||
#if paraComm_DEBUG
|
||
clrscr();
|
||
printf
|
||
("\n commId systemId systemIp comm/procState finish/total Desc");
|
||
#endif
|
||
|
||
for (i = 0; i < MaxCommNum; i++) {
|
||
#if paraComm_DEBUG
|
||
printf("\n %d \t %d-%d-%d %s \t %d/%d \t %d/%d \t%s ", i,
|
||
commArr[i].sysTypeNo, commArr[i].sysNo, commArr[i].subSysNo,
|
||
commArr[i].snmpInfo.dstIP,
|
||
commArr[i].commState, commArr[i].procState,
|
||
commArr[i].finishNum, commArr[i].totalNum, commArr[i].desc);
|
||
#endif
|
||
if (commArr[i].commState == nInProc) {
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " commArr[%d]:", i);
|
||
omcLog(paraCommLog, " commState = %d \t procState = %d",
|
||
commArr[i].commState, commArr[i].procState);
|
||
#endif
|
||
switch (commArr[i].procState) {
|
||
case nIdle:
|
||
if(commArr[i].commType!=nGetBulkComm&&commArr[i].totalNum==commArr[i].finishNum){
|
||
commArr[i].commState = nOutProc;
|
||
commArr[i].procState = nIdle;
|
||
sprintf(commArr[i].desc, CONF_COMMAND_ERR_0000);
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
freeParamSet(i);
|
||
break;
|
||
}
|
||
|
||
|
||
mkVarArr(i, tmpVarArr);
|
||
|
||
mkAddr(i, &tmpAddr);
|
||
mkPdu(i, tmpVarArr, &tmpPdu);
|
||
|
||
commArr[i].waitTimeCount = 0;
|
||
commArr[i].timeoutCount = 0;
|
||
if (snmp_send(&tmpPdu, &tmpAddr) > 0) {
|
||
#if paraComm_DEBUG
|
||
{
|
||
int k,kk;
|
||
|
||
omcLog(paraCommLog, " send snmp message ok!");
|
||
|
||
for(k=0;k<tmpPdu.var_num;k++)
|
||
{
|
||
for(kk=0;kk<tmpPdu.var[k].oidlen;kk++)
|
||
{
|
||
printf("%ld ",tmpPdu.var[k].oid[kk]);
|
||
}
|
||
printf("\n");
|
||
}
|
||
}
|
||
#endif
|
||
commArr[i].procState = nWaitResponse;
|
||
} else {
|
||
omcLog(paraCommLog, "Send snmp message failed!(IP=%s)",
|
||
commArr[i].snmpInfo.dstIP);
|
||
commArr[i].commState = nProcFail;
|
||
sprintf(commArr[i].desc,CONF_COMMAND_ERR_0301);
|
||
updateCommTable(i);
|
||
commArr[i].procState = nIdle;
|
||
initUnitComm(i);
|
||
}
|
||
break;
|
||
case nWaitResponse:
|
||
mkAddr(i, &tmpAddr);
|
||
if (snmp_receive(&tmpPdu, &tmpAddr) > 0) {//received msg
|
||
int respProcReturn = 0;
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " Receive snmp message ok!");
|
||
#endif
|
||
respProcReturn = respProc(&i, &tmpPdu); //here changed commState's value
|
||
if (respProcReturn > 0) {//vaild message
|
||
commArr[i].waitTimeCount = 0;
|
||
commArr[i].timeoutCount = 0;
|
||
} else if (respProcReturn == 0) {//invaild message
|
||
commArr[i].waitTimeCount++;
|
||
omcLog(paraCommLog,
|
||
"Invailed response message,throw away");
|
||
sprintf(commArr[i].desc,CONF_COMMAND_ERR_0401);
|
||
//Don't send msg again when find invaild message,
|
||
//Because iptrans is a FIFO buffer
|
||
if (commArr[i].waitTimeCount % 3) {
|
||
continue;
|
||
}
|
||
} else {//error report message
|
||
commArr[i].commState = nProcFail;
|
||
|
||
/***********************/
|
||
errorIndex=tmpPdu.error_index-1;
|
||
//errorIndex=tmpPdu.error_index;
|
||
//printf("error_status=%d,error_index=%d,len=%d\n",tmpPdu.error_status,errorIndex,tmpPdu.var[errorIndex].msglen);
|
||
//printf("pdu_type=%d,var_type=%d\n",tmpPdu.pdu_type,tmpPdu.var[errorIndex].vartype);
|
||
for(j=0;j<tmpPdu.var[errorIndex].msglen;j++)
|
||
{
|
||
errorCause[j]=toascii(tmpPdu.var[errorIndex].msg[j]);
|
||
}
|
||
errorCause[j]=0;
|
||
//printf("msg=%s\n",errorCause);/20071103
|
||
if(tmpPdu.error_status <= 9)
|
||
sprintf(tmpStr,"0%d",tmpPdu.error_status);
|
||
else
|
||
sprintf(tmpStr,"%d",tmpPdu.error_status);
|
||
sprintf(commArr[i].desc,"05%s:%s",tmpStr,errorCause);
|
||
optErr(&commArr[i]);
|
||
//printf("desc:%s\n",commArr[i].desc);
|
||
/************************/
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
}
|
||
|
||
switch (commArr[i].commState) {
|
||
case nInProc:
|
||
if(commArr[i].commType!=nGetBulkComm){
|
||
if(commArr[i].totalNum==commArr[i].finishNum){
|
||
commArr[i].commState = nOutProc;
|
||
commArr[i].procState = nIdle;
|
||
sprintf(commArr[i].desc, CONF_COMMAND_ERR_0000);
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
freeParamSet(i);
|
||
break;
|
||
}
|
||
mkAddr(i, &tmpAddr);
|
||
|
||
mkVarArr(i, tmpVarArr);
|
||
mkPdu(i, tmpVarArr, &tmpPdu);
|
||
commArr[i].waitTimeCount = 0;
|
||
commArr[i].timeoutCount = 0;
|
||
if (snmp_send(&tmpPdu, &tmpAddr) > 0) {
|
||
commArr[i].procState = nWaitResponse;
|
||
updateCommTable(i);
|
||
} else {
|
||
commArr[i].commState = nProcFail;
|
||
commArr[i].procState = nIdle;
|
||
sprintf(commArr[i].desc,CONF_COMMAND_ERR_0301);
|
||
omcLog(paraCommLog,
|
||
"Send snmp message failed!");
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
}
|
||
}
|
||
break;
|
||
case nOutProc:
|
||
commArr[i].procState = nIdle;
|
||
sprintf(commArr[i].desc, CONF_COMMAND_ERR_0000);
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
break;
|
||
default: //error
|
||
commArr[i].commState = nProcFail;
|
||
commArr[i].procState = nIdle;
|
||
sprintf(commArr[i].desc, CONF_COMMAND_ERR_0402);
|
||
//printf("desc:%s\n",commArr[i].desc);
|
||
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
break;
|
||
}
|
||
|
||
} else { //not received msg
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " Receive snmp message failed!");
|
||
#endif
|
||
commArr[i].waitTimeCount++;
|
||
#if paraComm_DEBUG
|
||
if(commArr[i].waitTimeCount>16)
|
||
omcLog(paraCommLog,
|
||
"commId=%ld \t waitTimeCount=%d \t timeoutCount=%d",
|
||
commArr[i].commId,
|
||
commArr[i].waitTimeCount,
|
||
commArr[i].timeoutCount);
|
||
#endif
|
||
if (commArr[i].waitTimeCount >= 16) {//Time out
|
||
commArr[i].waitTimeCount = 0;
|
||
commArr[i].timeoutCount++;
|
||
if (commArr[i].timeoutCount > 4) {
|
||
commArr[i].timeoutCount=0;
|
||
commArr[i].commState = nProcFail;
|
||
sprintf(commArr[i].desc, CONF_COMMAND_ERR_0403);
|
||
omcLog(paraCommLog, "Response timeout");
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
commArr[i].procState = nIdle;
|
||
} else {//resend msg
|
||
if(commArr[i].totalNum==commArr[i].finishNum&&commArr[i].commType!=nGetBulkComm){
|
||
commArr[i].commState = nOutProc;
|
||
commArr[i].procState = nIdle;
|
||
sprintf(commArr[i].desc, CONF_COMMAND_ERR_0000);
|
||
updateCommTable(i);
|
||
initUnitComm(i);
|
||
break;
|
||
}
|
||
//ISSUE-1
|
||
if(commArr[i].sysTypeNo==223)
|
||
{
|
||
commArr[i].timeoutCount++;
|
||
break;
|
||
}
|
||
|
||
mkAddr(i, &tmpAddr);
|
||
mkVarArr(i, tmpVarArr);
|
||
|
||
mkPdu(i, tmpVarArr, &tmpPdu);
|
||
if (snmp_send(&tmpPdu, &tmpAddr) > 0) {
|
||
commArr[i].procState = nWaitResponse;
|
||
} else {
|
||
commArr[i].commState = nProcFail;
|
||
sprintf(commArr[i].desc,CONF_COMMAND_ERR_0301);
|
||
omcLog(paraCommLog,
|
||
"failed to send snmp message!");
|
||
updateCommTable(i);
|
||
//commArr[i].procState = nIdle;
|
||
}
|
||
}
|
||
} //end of time out handle
|
||
} //end of not received msg
|
||
break;
|
||
default:
|
||
commArr[i].procState = nIdle;
|
||
commArr[i].commState = nProcFail;
|
||
sprintf(commArr[i].desc,CONF_COMMAND_ERR_9999);
|
||
omcLog(paraCommLog, "unknown procState,Please check!");
|
||
break;
|
||
} //end of switch(..)
|
||
} else {
|
||
idleCommCount++;
|
||
}
|
||
} //end of for(..)
|
||
|
||
if (idleCommCount == MaxCommNum) {
|
||
snmp_receive(&tmpPdu, &tmpAddr);
|
||
return (2);
|
||
} else {
|
||
return (1);
|
||
}
|
||
}
|
||
|
||
|
||
/*************************************************
|
||
Function: // respProc
|
||
Description: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪcommNo<4E><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD>Ӧ<EFBFBD><D3A6>Ϣ<EFBFBD><CFA2>
|
||
// commNoΪ<6F><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ƚϻ<C8BD>Ӧ<EFBFBD><D3A6>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>request_id<69>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܸ<EFBFBD><DCB8>ݻ<EFBFBD>Ӧ<EFBFBD><D3A6>Ϣ<EFBFBD>ı<EFBFBD>commNo
|
||
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 1 -> ok;0 -> invalid msg;-1 -> error report msg
|
||
Others: //
|
||
*************************************************/
|
||
int respProc(int *oldCommNo, snmp_pdu * pdu)
|
||
{
|
||
int i, j, commNo;
|
||
char updateField[16] = "readValue";
|
||
char updateSql[8192];
|
||
char tmpStr[4096];
|
||
int str_index;
|
||
|
||
|
||
snmp_pdu tmpPdu;
|
||
snmp_addr tmpAddr;
|
||
|
||
//Check commNo
|
||
if (*oldCommNo >= MaxCommNum) {
|
||
omcLog(paraCommLog, " Error: oldCommNo is too big (%d)",
|
||
*oldCommNo);
|
||
return (0);
|
||
}
|
||
commNo = *oldCommNo;
|
||
|
||
//Check PDU Type
|
||
if (pdu->pdu_type != PDU_RSP) {
|
||
omcLog(paraCommLog, " Error pdu type:%d(!=Resp%d)", pdu->pdu_type,
|
||
PDU_RSP);
|
||
return (0);
|
||
}
|
||
|
||
//Check Request ID
|
||
if (pdu->request_id != commArr[commNo].commId) {
|
||
int isRequestIdMatch = 0;
|
||
for (i = 0; i < MaxCommNum; i++) {
|
||
if (pdu->request_id == commArr[i].commId) {
|
||
isRequestIdMatch = 1;
|
||
*oldCommNo = i;
|
||
commNo = i;
|
||
break;
|
||
}
|
||
}
|
||
if (isRequestIdMatch == 0) {
|
||
omcLog(paraCommLog, "Unknown pdu->request_id(%ld) ",
|
||
pdu->request_id);
|
||
return (0);
|
||
}
|
||
}
|
||
|
||
for (i = 0; i < pdu->var_num; i++) {
|
||
int tmpLongInt = 0;
|
||
char tmpValue[512] = "\0";
|
||
int levelNo = 1;
|
||
char tmpInstanceNo[16]="";
|
||
char instanceNo[32]="";
|
||
char queryWhere[256] = "\0";
|
||
//Check Msg Length
|
||
if (pdu->var[i].msglen > MaxLenOfParaValue) {
|
||
omcLog(paraCommLog,
|
||
" Msg is too long(pdu->var[%d].msglen =%d)", i,
|
||
pdu->var[i].msglen);
|
||
return (0);
|
||
}
|
||
|
||
//check PreObjId
|
||
for (j = 0; j < commArr[commNo].snmpInfo.preOidLen; j++) {
|
||
if (commArr[commNo].snmpInfo.oid[j] != pdu->var[i].oid[j]) {
|
||
int k = 0;
|
||
omcLog(paraCommLog, " Oid is not match!");
|
||
for (k = 0; k < commArr[commNo].snmpInfo.preOidLen; k++) {
|
||
omcLog(paraCommLog, " %d: %ld [%ld]", k,
|
||
commArr[commNo].snmpInfo.oid[k],
|
||
pdu->var[i].oid[k]);
|
||
}
|
||
return (0);
|
||
}
|
||
}
|
||
|
||
//check subObjId
|
||
for (j = commArr[commNo].snmpInfo.preOidLen; j < commArr[commNo].snmpInfo.oidLen; j++) {
|
||
if (commArr[commNo].snmpInfo.oid[j] != pdu->var[i].oid[j]) {
|
||
if(commArr[commNo].commType==nGetBulkComm){//Finished GetBulk Table
|
||
commArr[commNo].commState = nOutProc;
|
||
break;
|
||
}else
|
||
return(0);
|
||
}
|
||
}
|
||
|
||
if(checkMibSystem(commArr[commNo].sysTypeNo))
|
||
{
|
||
if(commArr[commNo].snmpInfo.columnNum!=0){//Is a table
|
||
sprintf(updateSql,"REPLACE INTO %s SET ",commArr[commNo].paramTable);
|
||
levelNo=1;
|
||
for (j = commArr[commNo].snmpInfo.preOidLen; j < commArr[commNo].snmpInfo.oidLen+1;j++) {
|
||
sprintf(tmpStr, "level_%d = '%ld',", levelNo, pdu->var[i].oid[j]);
|
||
strcat(updateSql,tmpStr);
|
||
levelNo++;
|
||
}
|
||
|
||
//Check instanceNo
|
||
for(j=commArr[commNo].snmpInfo.oidLen+1;j<commArr[commNo].snmpInfo.oidLen+1+commArr[commNo].snmpInfo.instanceNoLevel;j++){
|
||
if(commArr[commNo].snmpInfo.instanceNo[j-commArr[commNo].snmpInfo.oidLen-1]!=pdu->var[i].oid[j]&&
|
||
commArr[commNo].snmpInfo.instanceNo[j-commArr[commNo].snmpInfo.oidLen-1]!=0){
|
||
commArr[commNo].commState = nOutProc;
|
||
break;
|
||
}
|
||
}
|
||
|
||
//organize instanceNo
|
||
for(j=commArr[commNo].snmpInfo.oidLen+1;j<pdu->var[i].oidlen;j++){
|
||
if(j==commArr[commNo].snmpInfo.oidLen+1)
|
||
sprintf(tmpInstanceNo, "%04ld", pdu->var[i].oid[j]);
|
||
else
|
||
sprintf(tmpInstanceNo, ".%04ld", pdu->var[i].oid[j]);
|
||
strcat(instanceNo, tmpInstanceNo);
|
||
}
|
||
|
||
sprintf(tmpStr, "instanceNo='%s',",instanceNo);
|
||
|
||
strcat(updateSql,tmpStr);
|
||
}else{
|
||
sprintf(updateSql,"REPLACE INTO %s SET ",commArr[commNo].paramTable);
|
||
levelNo=1;
|
||
for (j = commArr[commNo].snmpInfo.preOidLen; j < commArr[commNo].snmpInfo.oidLen;j++) {
|
||
sprintf(tmpStr, "level_%d = '%ld',", levelNo, pdu->var[i].oid[j]);
|
||
strcat(updateSql,tmpStr);
|
||
levelNo++;
|
||
}
|
||
|
||
|
||
for(j=commArr[commNo].snmpInfo.oidLen;j<pdu->var[i].oidlen;j++){
|
||
if(j==commArr[commNo].snmpInfo.oidLen)
|
||
sprintf(tmpInstanceNo, "%04ld", pdu->var[i].oid[j]);
|
||
else
|
||
sprintf(tmpInstanceNo, ".%04ld", pdu->var[i].oid[j]);
|
||
strcat(instanceNo, tmpInstanceNo);
|
||
}
|
||
|
||
sprintf(tmpStr, "instanceNo='%s',",instanceNo);
|
||
strcat(updateSql,tmpStr);
|
||
|
||
|
||
}
|
||
}else{
|
||
sprintf(updateSql,"UPDATE %s SET ",commArr[commNo].paramTable);
|
||
|
||
for (j = commArr[commNo].snmpInfo.preOidLen; j < commArr[commNo].snmpInfo.preOidLen+commArr[commNo].levelWidth[i];j++) {
|
||
if(j==commArr[commNo].snmpInfo.preOidLen)
|
||
sprintf(tmpStr, " WHERE level_%d = '%ld'", levelNo, pdu->var[i].oid[j]);
|
||
else
|
||
sprintf(tmpStr, " AND level_%d = '%ld'", levelNo, pdu->var[i].oid[j]);
|
||
strcat(queryWhere,tmpStr);
|
||
levelNo++;
|
||
}
|
||
|
||
for(j=commArr[commNo].snmpInfo.preOidLen+commArr[commNo].levelWidth[i];j<pdu->var[i].oidlen;j++){
|
||
if(j==commArr[commNo].snmpInfo.preOidLen+commArr[commNo].levelWidth[i])
|
||
sprintf(tmpInstanceNo, "%ld", pdu->var[i].oid[j]);
|
||
else
|
||
sprintf(tmpInstanceNo, ".%ld", pdu->var[i].oid[j]);
|
||
strcat(instanceNo, tmpInstanceNo);
|
||
}
|
||
|
||
sprintf(tmpStr, " AND instanceNo='%s'",instanceNo);
|
||
strcat(queryWhere,tmpStr);
|
||
}
|
||
|
||
if ((pdu->error_status > 0) && (pdu->error_index == (i + 1))) {
|
||
omcLog(paraCommLog,
|
||
"Error message: pdu->error_status =%d pdu->error_index =%d",
|
||
pdu->error_status, pdu->error_index);
|
||
|
||
if (pdu->error_status < MaxErrorStatusNum) {
|
||
sprintf(tmpStr,",`%s`='Error:%s'", updateField,
|
||
errorStatusDescArr[pdu->error_status]);
|
||
|
||
} else {
|
||
sprintf(tmpStr,",`%s`='Error:Unknown Error'", updateField);
|
||
}
|
||
return (-1);
|
||
}
|
||
|
||
if(commArr[commNo].commState == nOutProc)
|
||
break;
|
||
|
||
switch (pdu->var[i].vartype) {
|
||
case 0x02: //INTEGER
|
||
tmpLongInt =
|
||
decode_integer(pdu->var[i].msg, pdu->var[i].msglen);
|
||
|
||
sprintf(tmpStr,"`%s`='%d'", updateField,tmpLongInt);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x04: //OCTET STRING
|
||
if(checkMibSystem(commArr[commNo].sysTypeNo))
|
||
{
|
||
str_index=0;
|
||
for(j=0;j<pdu->var[i].msglen;j++)
|
||
{
|
||
tmpValue[str_index]=toascii(pdu->var[i].msg[j]);
|
||
str_index++;
|
||
if(tmpValue[str_index-1] == '\\')
|
||
{
|
||
tmpValue[str_index]='\\';
|
||
str_index++;
|
||
}
|
||
}
|
||
tmpValue[str_index]=0;
|
||
}else{
|
||
omc_RbcdToAscii(tmpValue, pdu->var[i].msg,
|
||
pdu->var[i].msglen * 2);
|
||
}
|
||
sprintf(tmpStr,"`%s`='%s'", updateField,tmpValue);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x05: //NULL(unSpecified)
|
||
sprintf(tmpStr,"`%s`=''", updateField);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x06: //OBJECT IDENTIFIER
|
||
tmpLongInt =decode_integer(pdu->var[i].msg, pdu->var[i].msglen);
|
||
tmpLongInt =
|
||
decode_integer(pdu->var[i].msg, pdu->var[i].msglen);
|
||
|
||
sprintf(tmpStr,"`%s`='%d'", updateField,tmpLongInt);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x40: //IP Address
|
||
sprintf(tmpStr,"`%s`='%d.%d.%d.%d'", updateField,
|
||
pdu->var[i].msg[0],pdu->var[i].msg[1],
|
||
pdu->var[i].msg[2],pdu->var[i].msg[3]);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x44: //Opaque
|
||
omc_RbcdToAscii(tmpValue, pdu->var[i].msg,
|
||
pdu->var[i].msglen * 2);
|
||
sprintf(tmpStr,"`%s`='%s'", updateField,tmpValue);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x80: //noSuchObject
|
||
sprintf(tmpStr,"`%s`='Error:NoSuchObject'", updateField);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x81: //NoSuchInstance
|
||
sprintf(tmpStr,"`%s`='Error:NoSuchInstance'", updateField);
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
case 0x82: //endOfMibView
|
||
commArr[commNo].commState = nOutProc;
|
||
commArr[commNo].finishNum++;
|
||
break;
|
||
default:
|
||
omcLog(paraCommLog,
|
||
" Invailed vartype(pdu->var[%d].vartype=%d)--> unknown var type",
|
||
i, pdu->var[i].vartype);
|
||
return (-1);
|
||
}
|
||
|
||
if(commArr[commNo].commState == nOutProc)
|
||
break;
|
||
|
||
strcat(updateSql,tmpStr);
|
||
// by simon, at 2023-11-15
|
||
strcat(updateSql,",`initValue`=`readValue`");
|
||
if(commArr[commNo].sysTypeNo!=320){
|
||
strcat(updateSql,queryWhere);
|
||
}
|
||
//omcLog(paraCommLog,"\nupdateSql=%s\n",updateSql);
|
||
|
||
//ISSUE-3, SMPP(VSS,EMS) need subSysNo
|
||
if(checkPlatHasSubSysNo(commArr[commNo].sysTypeNo,commArr[commNo].sysNo))
|
||
{
|
||
sprintf(tmpStr,",subSysNo=%d",commArr[commNo].subSysNo);
|
||
strcat(updateSql,tmpStr);
|
||
}
|
||
|
||
mysql_getnores(dbConn, updateSql);
|
||
|
||
//if(commArr[commNo].commType!=nSetComm){
|
||
// sprintf(updateSql,"UPDATE %s SET initValue=readValue %s",commArr[commNo].paramTable,queryWhere);
|
||
// mysql_getnores(dbConn, updateSql);
|
||
//}
|
||
}
|
||
|
||
|
||
if(commArr[commNo].commType == nGetBulkComm){
|
||
if(commArr[commNo].commState != nOutProc){//Send command again
|
||
mkAddr(commNo, &tmpAddr);
|
||
mkPdu(commNo, pdu->var, &tmpPdu);
|
||
commArr[commNo].waitTimeCount = 0;
|
||
commArr[commNo].timeoutCount = 0;
|
||
if (snmp_send(&tmpPdu, &tmpAddr) > 0) {
|
||
commArr[commNo].procState = nWaitResponse;
|
||
} else {
|
||
omcLog(paraCommLog, "Send snmp message failed!(IP=%s)",
|
||
commArr[commNo].snmpInfo.dstIP);
|
||
commArr[commNo].commState = nProcFail;
|
||
sprintf(commArr[commNo].desc,CONF_COMMAND_ERR_0301);
|
||
updateCommTable(commNo);
|
||
commArr[commNo].procState = nIdle;
|
||
initUnitComm(commNo);
|
||
}
|
||
}else{
|
||
freeParamSet(commNo);
|
||
}
|
||
}else if (commArr[commNo].finishNum >= commArr[commNo].totalNum) {
|
||
commArr[commNo].commState = nOutProc;
|
||
freeParamSet(commNo);
|
||
}
|
||
|
||
return (1);
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // updateCommTable
|
||
Description: // <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
// commNoΪ<6F><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 1->ok,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
int updateCommTable(int commNo)
|
||
{
|
||
char tmpQuery[256] = "\0";
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, "commArr[%d].commState=%d", commNo,
|
||
commArr[commNo].commState);
|
||
#endif
|
||
if (commArr[commNo].procState == nIdle) {
|
||
sprintf(tmpQuery,
|
||
"UPDATE %s SET `commState` = '%d',`finishNum`= '0', `totalNum`= '%d',"
|
||
"bgnTime = CURRENT_TIMESTAMP, `remark`='%s' WHERE commId = '%d'",
|
||
CommTable, commArr[commNo].commState,
|
||
commArr[commNo].totalNum, commArr[commNo].desc,
|
||
commArr[commNo].commId);
|
||
} else {
|
||
sprintf(tmpQuery,
|
||
"UPDATE %s SET `commState`='%d',`finishNum`='%d', "
|
||
"`endTime` = CURRENT_TIMESTAMP, `remark`='%s' WHERE `commId` = '%d'",
|
||
CommTable, commArr[commNo].commState,
|
||
commArr[commNo].finishNum, commArr[commNo].desc,
|
||
commArr[commNo].commId);
|
||
}
|
||
mysql_getnores(dbConn, tmpQuery);
|
||
return (1);
|
||
}
|
||
|
||
|
||
/*************************************************
|
||
Function: // getSysAddr
|
||
Description: // <20><><EFBFBD><EFBFBD>ϵͳid<69><64>OMC_PUB.sysInfo<66><6F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ϵͳ<CFB5><CDB3>ip
|
||
// commNoΪ<6F><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 1->ok,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
int getSysAddr(int commNo)
|
||
{
|
||
int nReturn = 0;
|
||
MYSQL_RES *tmpResult;
|
||
MYSQL_ROW tmpRow;
|
||
char tmpQuery[512] = "\0";
|
||
sprintf(tmpQuery,
|
||
"SELECT isRemote,netId,DPC,ip FROM %s WHERE sysTypeNo='%d' "
|
||
"AND sysNo='%d' AND subsysNo='%d' ", IpTable,
|
||
commArr[commNo].sysTypeNo, commArr[commNo].sysNo,
|
||
commArr[commNo].subSysNo);
|
||
tmpResult = (MYSQL_RES *) mysql_getres(dbConn, tmpQuery);
|
||
if (tmpResult == NULL) {
|
||
omcLog(paraCommLog,
|
||
" Database may be stopped,when get IP address from IpTable");
|
||
return (0);
|
||
}
|
||
if ((tmpRow = mysql_fetch_row(tmpResult)) != NULL) {
|
||
strcpy(commArr[commNo].snmpInfo.dstIP, tmpRow[3]);
|
||
#if paraComm_DEBUG
|
||
//omcLog(paraCommLog, " dstIP=%s", commArr[commNo].dstIP);
|
||
#endif
|
||
nReturn = 1;
|
||
} else {
|
||
nReturn = 0;
|
||
}
|
||
mysql_free_result(tmpResult);
|
||
return (nReturn);
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // getParamTable
|
||
Description: // <20><><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ͱ<EFBFBD><CDB1>ţ<EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //
|
||
Output: //
|
||
Return: // 1->ok,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
int getParamTable(int sysTypeNo, int sysNo, int paramType, char *tableName)
|
||
{
|
||
if (paramType == nGlobalSysParam) {
|
||
sprintf(tableName, "OBJ_%d.param_%d", sysTypeNo, nPubFlag);
|
||
} else {
|
||
sprintf(tableName, "OBJ_%d.param_%d", sysTypeNo, sysNo);
|
||
}
|
||
return (1);
|
||
}
|
||
|
||
|
||
/*************************************************
|
||
Function: // mkVarArr
|
||
Description: // <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>snmp<6D><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>var_list<73>У<EFBFBD>ΪmkPdu<64><75><EFBFBD><D7BC><EFBFBD><EFBFBD>\
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>pdu<64>е<EFBFBD>var_list<73><74>ָ<EFBFBD>롣
|
||
Output: //
|
||
Return: // 1->ok,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
int mkVarArr(int commNo, var_list * varArr)
|
||
{
|
||
int i,tmpColumnNo;
|
||
|
||
MYSQL_ROW tmpRow;
|
||
int nInstanceNo= 10;
|
||
int nInitValue = 11;
|
||
int nReadValue = 12;
|
||
int nValueType = 13;
|
||
int nLengthInTemplate=15;
|
||
|
||
var_list *unitVar;
|
||
int varCount = 0;
|
||
int unitVarLen = 0;
|
||
int unitVarMsgLen = 0;
|
||
int msgLen = 0;
|
||
long tmpInt = 0;
|
||
|
||
char *oneInstanceNo;
|
||
|
||
if(checkMibSystem(commArr[commNo].sysTypeNo))
|
||
{
|
||
if(commArr[commNo].commType==nGetBulkComm){
|
||
for(tmpColumnNo=0;tmpColumnNo<commArr[commNo].snmpInfo.columnNum;tmpColumnNo++){
|
||
unitVar = varArr + varCount;
|
||
|
||
//objId
|
||
for (i = 0; i< commArr[commNo].snmpInfo.oidLen; i++) {
|
||
unitVar->oid[i] = commArr[commNo].snmpInfo.oid[i];
|
||
}
|
||
unitVar->oidlen = commArr[commNo].snmpInfo.oidLen;
|
||
|
||
//Column
|
||
unitVar->oid[unitVar->oidlen] = commArr[commNo].snmpInfo.column[tmpColumnNo];
|
||
unitVar->oidlen++;
|
||
|
||
//Instance
|
||
for (i = 0; i < commArr[commNo].snmpInfo.instanceNoLevel; i++) {
|
||
unitVar->oid[unitVar->oidlen+i] = commArr[commNo].snmpInfo.instanceNo[i];
|
||
}
|
||
|
||
unitVar->oidlen = unitVar->oidlen+commArr[commNo].snmpInfo.instanceNoLevel;
|
||
unitVar->msglen = 0;
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog,"unitVar->oidlen=%d", unitVar->oidlen);
|
||
for(i=0;i<unitVar->oidlen;i++){
|
||
omcLog(paraCommLog,"unitVar->oid=%d", unitVar->oid[i]);
|
||
}
|
||
#endif
|
||
varCount++;
|
||
}
|
||
}else{
|
||
//sql="SELECT level_1,...level_10,instanceNo,readValue,initValue,valueType FROM %s WHERE %s
|
||
//field define
|
||
if (commArr[commNo].paramSet == NULL) {
|
||
omcLog(paraCommLog, "Error: commArr[%d].paramSet == NULL", commNo);
|
||
return (0);
|
||
}
|
||
|
||
mysql_data_seek(commArr[commNo].paramSet, commArr[commNo].finishNum);
|
||
while ((varCount < MaxVarNum)
|
||
&& (tmpRow = mysql_fetch_row(commArr[commNo].paramSet))) {
|
||
|
||
//if(strcmp(tmpRow[nReadValue],tmpRow[nInitValue])==0&&commArr[commNo].commType == nSetComm){
|
||
// commArr[commNo].finishNum++;
|
||
// continue;
|
||
//}
|
||
|
||
//AdministrationState do not set
|
||
if(commArr[commNo].commType == nSetComm && commArr[commNo].snmpInfo.columnNum > 0)
|
||
{
|
||
if(strstr(tmpRow[14],"AdministrationState") || strstr(tmpRow[14],"CreateEntry"))
|
||
{
|
||
commArr[commNo].finishNum++;
|
||
continue;
|
||
}
|
||
}
|
||
|
||
//Command do not set
|
||
if(commArr[commNo].commType == nSetComm && commArr[commNo].snmpInfo.columnNum > 0 && strstr(tmpRow[14],"Command"))
|
||
{
|
||
commArr[commNo].finishNum++;
|
||
continue;
|
||
}
|
||
|
||
unitVarMsgLen = strlen(tmpRow[nInitValue]);
|
||
|
||
unitVarLen =
|
||
commArr[commNo].snmpInfo.oidLen + commArr[commNo].snmpInfo.instanceNoLevel + unitVarMsgLen;
|
||
|
||
if (unitVarLen > (commArr[commNo].snmpInfo.maxMsgLen - msgLen)) {
|
||
break;
|
||
}
|
||
unitVar = varArr + varCount;
|
||
|
||
for (i = 0; i < commArr[commNo].snmpInfo.preOidLen; i++) {
|
||
unitVar->oid[i] = commArr[commNo].snmpInfo.oid[i];
|
||
}
|
||
unitVar->oidlen = commArr[commNo].snmpInfo.preOidLen;
|
||
|
||
//level_1,....level_10
|
||
i=0;
|
||
while ((atoi(tmpRow[i]) > 0) && ((i + unitVar->oidlen)< MaxOidLen)) {
|
||
unitVar->oid[i+unitVar->oidlen] = atoi(tmpRow[i]);
|
||
i++;
|
||
}
|
||
commArr[commNo].levelWidth[varCount]=(BYTE)i;
|
||
unitVar->oidlen=unitVar->oidlen+i;
|
||
|
||
if(commArr[commNo].snmpInfo.instanceNoLevel>0){
|
||
for (i = 0; i < commArr[commNo].snmpInfo.instanceNoLevel; i++) {
|
||
unitVar->oid[i+unitVar->oidlen] = commArr[commNo].snmpInfo.instanceNo[i];
|
||
}
|
||
unitVar->oidlen = unitVar->oidlen + commArr[commNo].snmpInfo.instanceNoLevel;
|
||
}else{
|
||
i=0;
|
||
while ((oneInstanceNo = strsep(&(tmpRow[nInstanceNo]), ".")) != NULL) {
|
||
unitVar->oid[unitVar->oidlen] = atoi(oneInstanceNo);
|
||
i++;
|
||
}
|
||
unitVar->oidlen = unitVar->oidlen + i;
|
||
}
|
||
|
||
// fj modify
|
||
int key_val_type = atoi(tmpRow[nValueType]);
|
||
if(strstr(tmpRow[14], "RowStatus") != NULL && key_val_type == 0)
|
||
{
|
||
|
||
key_val_type = TYPE_INTEGER;
|
||
|
||
omcLog(paraCommLog, " change from 0 to %d", TYPE_INTEGER);
|
||
}
|
||
|
||
switch (key_val_type){
|
||
case TYPE_INTEGER:
|
||
case TYPE_INTEGER32:
|
||
case TYPE_UNSIGNED32:
|
||
case TYPE_UINTEGER:
|
||
case TYPE_BITSTRING:
|
||
unitVar->vartype = 0x02;
|
||
tmpInt = atol(tmpRow[nInitValue]);
|
||
unitVar->msglen = encode_integer(unitVar->msg, tmpInt);
|
||
break;
|
||
case TYPE_OCTETSTR:
|
||
case TYPE_NSAPADDRESS:
|
||
unitVar->vartype = 0x04;
|
||
memcpy(unitVar->msg, tmpRow[nInitValue],
|
||
strlen(tmpRow[nInitValue]));
|
||
unitVar->msglen = strlen(tmpRow[nInitValue]);
|
||
|
||
break;
|
||
case TYPE_NULL:
|
||
break;
|
||
case TYPE_NETADDR:
|
||
case TYPE_IPADDR:
|
||
unitVar->vartype = 0x40;
|
||
tmpInt=inet_addr(tmpRow[nInitValue]);
|
||
memcpy(unitVar->msg, &tmpInt,4);
|
||
unitVar->msglen = 4;
|
||
break;
|
||
case TYPE_COUNTER:
|
||
case TYPE_COUNTER64:
|
||
break;
|
||
case TYPE_GAUGE:
|
||
break;
|
||
case TYPE_TIMETICKS:
|
||
break;
|
||
case TYPE_OPAQUE:
|
||
unitVar->vartype = 0x44;
|
||
omc_AsciiToRbcd(unitVar->msg, tmpRow[nInitValue],
|
||
strlen(tmpRow[nInitValue]));
|
||
unitVar->msglen = strlen(tmpRow[nInitValue])/2;
|
||
if(strlen(tmpRow[nInitValue])%2 == 1)
|
||
unitVar->msglen++;
|
||
break;
|
||
default:
|
||
omcLog(paraCommLog, " Invailed vartype=%d",
|
||
nValueType);
|
||
return (0);
|
||
break;
|
||
}
|
||
|
||
|
||
sprintf(commArr[commNo].readValue[varCount],tmpRow[nReadValue]);
|
||
msgLen += (unitVar->oidlen + unitVar->msglen + 2);
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " varArr[%d].oidlen=%d", varCount,
|
||
varArr[varCount].oidlen);
|
||
omcLog(paraCommLog, " varArr[%d].objId=", varCount);
|
||
for (i = 0; i < varArr[varCount].oidlen; i++) {
|
||
omcLog(paraCommLog, "%ld.", varArr[varCount].oid[i]);
|
||
}
|
||
omcLog(paraCommLog, " varArr[%d].vartype=%d", varCount,
|
||
varArr[varCount].vartype);
|
||
omcLog(paraCommLog, " varArr[%d].msglen=%d", varCount,
|
||
varArr[varCount].msglen);
|
||
for (i = 0; i < varArr[varCount].msglen; i++) {
|
||
omcLog(paraCommLog, " varArr[%d].msg[%d]=%x", varCount, i,
|
||
varArr[varCount].msg[i]);
|
||
}
|
||
omcLog(paraCommLog, " filled message len=%d", msgLen);
|
||
#endif
|
||
varCount++;
|
||
if (commArr[commNo].snmpInfo.needMuliObj < 1) {
|
||
break;
|
||
}
|
||
} //end of while(..)
|
||
}
|
||
}else{
|
||
//sql="SELECT level_1,...level_10,instanceNo,readValue,initValue,valueType FROM %s WHERE %s
|
||
//field define
|
||
if (commArr[commNo].paramSet == NULL) {
|
||
omcLog(paraCommLog, "Error: commArr[%d].paramSet == NULL", commNo);
|
||
return (0);
|
||
}
|
||
|
||
mysql_data_seek(commArr[commNo].paramSet, commArr[commNo].finishNum);
|
||
while ((varCount < MaxVarNum)
|
||
&& (tmpRow = mysql_fetch_row(commArr[commNo].paramSet))) {
|
||
|
||
//if(strcmp(tmpRow[nReadValue],tmpRow[nInitValue])==0&&commArr[commNo].commType == nSetComm){
|
||
// commArr[commNo].finishNum++;
|
||
// continue;
|
||
//}
|
||
|
||
//unitVarMsgLen = strlen(tmpRow[nInitValue]);
|
||
//unitVarMsgLen = strlen(tmpRow[nInitValueTemplate]);
|
||
unitVarMsgLen=atoi(tmpRow[nLengthInTemplate]);
|
||
unitVarLen =
|
||
commArr[commNo].snmpInfo.oidLen + commArr[commNo].snmpInfo.instanceNoLevel + unitVarMsgLen;
|
||
|
||
if (unitVarLen > (commArr[commNo].snmpInfo.maxMsgLen - msgLen)) {
|
||
break;
|
||
}
|
||
unitVar = varArr + varCount;
|
||
|
||
for (i = 0; i < commArr[commNo].snmpInfo.preOidLen; i++) {
|
||
unitVar->oid[i] = commArr[commNo].snmpInfo.oid[i];
|
||
}
|
||
unitVar->oidlen = commArr[commNo].snmpInfo.preOidLen;
|
||
|
||
//level_1,....level_10
|
||
i=0;
|
||
while ((atoi(tmpRow[i]) > 0) && ((i + unitVar->oidlen)< MaxOidLen)) {
|
||
unitVar->oid[i+unitVar->oidlen] = atoi(tmpRow[i]);
|
||
i++;
|
||
}
|
||
commArr[commNo].levelWidth[varCount]=(BYTE)i;
|
||
unitVar->oidlen=unitVar->oidlen+i;
|
||
|
||
if(commArr[commNo].snmpInfo.instanceNoLevel>0){
|
||
for (i = 0; i < commArr[commNo].snmpInfo.instanceNoLevel; i++) {
|
||
unitVar->oid[i+unitVar->oidlen] = commArr[commNo].snmpInfo.instanceNo[i];
|
||
}
|
||
unitVar->oidlen = unitVar->oidlen + commArr[commNo].snmpInfo.instanceNoLevel;
|
||
}else{
|
||
i=0;
|
||
while ((oneInstanceNo = strsep(&(tmpRow[nInstanceNo]), ".")) != NULL) {
|
||
unitVar->oid[unitVar->oidlen] = atoi(oneInstanceNo);
|
||
i++;
|
||
}
|
||
unitVar->oidlen = unitVar->oidlen + i;
|
||
}
|
||
|
||
unitVar->vartype = atoi(tmpRow[nValueType]);
|
||
switch (atoi(tmpRow[nValueType])) {
|
||
case 0x02: //INTEGER
|
||
tmpInt = atol(tmpRow[nInitValue]);
|
||
unitVar->msglen = encode_integer(unitVar->msg, tmpInt);
|
||
//unitVar->msglen = strlen(tmpRow[nInitValue]);
|
||
break;
|
||
case 0x04: //OCTET STRING
|
||
omc_AsciiToRbcd(unitVar->msg, tmpRow[nInitValue],
|
||
strlen(tmpRow[nInitValue]));
|
||
//unitVar->msglen = strlen(tmpRow[nInitValue])/2;
|
||
//unitVar->msglen = strlen(tmpRow[nInitValueTemplate])/2;
|
||
unitVar->msglen = atoi(tmpRow[nLengthInTemplate]);
|
||
break;
|
||
case 0x05: //NULL(unSpecified)
|
||
case 0x06: //OBJECT IDENTIFIER
|
||
case 0x80: //noSuchObject
|
||
case 0x81: //NoSuchInstance
|
||
case 0x82: //endOfMibView
|
||
default:
|
||
omcLog(paraCommLog, " Invailed vartype=%d",
|
||
unitVar->vartype);
|
||
return (0);
|
||
}
|
||
|
||
|
||
sprintf(commArr[commNo].readValue[varCount],tmpRow[nReadValue]);
|
||
msgLen += (unitVar->oidlen + unitVar->msglen + 2);
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " varArr[%d].oidlen=%d", varCount,
|
||
varArr[varCount].oidlen);
|
||
omcLog(paraCommLog, " varArr[%d].objId=", varCount);
|
||
for (i = 0; i < varArr[varCount].oidlen; i++) {
|
||
omcLog(paraCommLog, "%ld.", varArr[varCount].oid[i]);
|
||
}
|
||
omcLog(paraCommLog, " varArr[%d].vartype=%d", varCount,
|
||
varArr[varCount].vartype);
|
||
omcLog(paraCommLog, " varArr[%d].msglen=%d", varCount,
|
||
varArr[varCount].msglen);
|
||
for (i = 0; i < varArr[varCount].msglen; i++) {
|
||
omcLog(paraCommLog, " varArr[%d].msg[%d]=%x", varCount, i,
|
||
varArr[varCount].msg[i]);
|
||
}
|
||
omcLog(paraCommLog, " filled message len=%d", msgLen);
|
||
#endif
|
||
varCount++;
|
||
if (commArr[commNo].snmpInfo.needMuliObj < 1) {
|
||
break;
|
||
}
|
||
} //end of while(..)
|
||
}
|
||
|
||
commArr[commNo].varNum = varCount;
|
||
|
||
return (1);
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // mkAddr
|
||
Description: // <20>ϳ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>snmp<6D><70>ַ<EFBFBD><D6B7><EFBFBD>Ӹ<EFBFBD><D3B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD>п<EFBFBD>ȡ<EFBFBD><C8A1>ip<69>Ͷ˿ڣ<CBBF>Ϊ<EFBFBD><CEAA><EFBFBD>ͺͽ<CDBA><CDBD><EFBFBD>snmp<6D><70>Ϣ<EFBFBD><CFA2><EFBFBD><D7BC><EFBFBD><EFBFBD>
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>snmp_addr<64><72>ָ<EFBFBD>롣
|
||
Output: //
|
||
Return: // 1->ok,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
int mkAddr(int commNo, snmp_addr * msgAddr)
|
||
{
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, "\n Initing message address----");
|
||
omcLog(paraCommLog, " addr->local_port:%d", DefPort);
|
||
//omcLog(paraCommLog, " addr->remote_ip:%s", commArr[commNo].dstIP);
|
||
//omcLog(paraCommLog, " addr->remote_port:%d", commArr[commNo].dstPort);
|
||
#endif
|
||
|
||
//make snmp address
|
||
if (strlen(commArr[commNo].snmpInfo.dstIP) <= 0) {
|
||
omcLog(paraCommLog, "Initing snmp_addr error: Cannot get ip");
|
||
sprintf(commArr[commNo].desc, CONF_COMMAND_ERR_0102);
|
||
commArr[commNo].commState = nProcFail;
|
||
updateCommTable(commNo);
|
||
commArr[commNo].procState = nIdle;
|
||
return (0);
|
||
}
|
||
//addr->local_ip = ;
|
||
msgAddr->local_port = DefPort;
|
||
msgAddr->remote_ip = inet_addr(commArr[commNo].snmpInfo.dstIP);
|
||
msgAddr->remote_port = commArr[commNo].snmpInfo.dstPort;
|
||
msgAddr->broadcast = 0;
|
||
return (1);
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // mkPdu
|
||
Description: // <20>ϳ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>snmp<6D><70><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>Ϊsnmp_send<6E><64><EFBFBD><D7BC><EFBFBD><EFBFBD>
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>var_list<73><74>ָ<EFBFBD>룬snmp_pdu<64><75>ָ<EFBFBD>롣
|
||
Output: //
|
||
Return: // 1->ok,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
int mkPdu(int commNo, var_list * varArr, snmp_pdu * pdu)
|
||
{
|
||
BYTE pduType;
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " Making snmp_pdu");
|
||
#endif
|
||
switch (commArr[commNo].commType) {
|
||
case nGetComm:
|
||
pduType = PDU_GET ;
|
||
break;
|
||
case nSetComm:
|
||
case nNewEntryComm:
|
||
pduType = PDU_SET;
|
||
break;
|
||
case nGetBulkComm:
|
||
pduType = PDU_GETNEXT;
|
||
break;
|
||
default:
|
||
return (0);
|
||
}
|
||
pdu->pdu_type = pduType;
|
||
pdu->request_id = commArr[commNo].commId;
|
||
pdu->var_num = commArr[commNo].varNum;
|
||
sprintf(pdu->community, "%s", commArr[commNo].snmpInfo.snmpCommunity);
|
||
|
||
memcpy(pdu->var, varArr, sizeof(var_list) * BIND_MAX);
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " memcpy finished!");
|
||
#endif
|
||
pdu->error_status = 0x0; //0:no error 1:too big 2:nosuchname 3:badvalue 4:readonly 5:agenerr
|
||
pdu->error_index = 0x0;
|
||
return (1);
|
||
}
|
||
|
||
/*************************************************
|
||
Function: // initUnitComm
|
||
Description: // <20><>ʼ<EFBFBD><CABC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>δ<EFBFBD>ͷŵĽ<C5B5><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Output: //
|
||
Return: // 1->ok,0->failed
|
||
Others: //
|
||
*************************************************/
|
||
int initUnitComm(int commNo)
|
||
{
|
||
int i = 0;
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " Try to init commArr[%d] ", commNo);
|
||
#endif
|
||
if (commNo > MaxCommNum) {
|
||
return (0);
|
||
}
|
||
commArr[commNo].commId = 0;
|
||
commArr[commNo].commType = 0;
|
||
commArr[commNo].paramType = 0;
|
||
commArr[commNo].sysTypeNo = 0;
|
||
commArr[commNo].sysNo = 0;
|
||
commArr[commNo].subSysNo = 0;
|
||
|
||
freeParamSet(commNo);
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog," commArr[%d].paramSet = %x",commNo,commArr[commNo].paramSet);
|
||
#endif
|
||
commArr[commNo].totalNum = 0;
|
||
commArr[commNo].finishNum = 0;
|
||
commArr[commNo].desc[0] = 0;
|
||
commArr[commNo].paramTable[0] = 0;
|
||
|
||
commArr[commNo].snmpInfo.needMuliObj = 0;
|
||
commArr[commNo].snmpInfo.dstIP[0] = 0;
|
||
commArr[commNo].snmpInfo.dstPort = DefPort;
|
||
commArr[commNo].snmpInfo.oidLen = 0;
|
||
for (i = 0; i < MaxOidLen; i++) {
|
||
commArr[commNo].snmpInfo.oid[i] = 0;
|
||
}
|
||
|
||
commArr[commNo].snmpInfo.instanceNoLevel = 0;
|
||
for (i = 0; i < MaxInstanceNoLevel; i++) {
|
||
commArr[commNo].snmpInfo.instanceNo[i] = 0;
|
||
}
|
||
|
||
commArr[commNo].snmpInfo.snmpCommunity[0] = 0;
|
||
|
||
commArr[commNo].commState = 0;
|
||
commArr[commNo].procState = 0;
|
||
commArr[commNo].waitTimeCount = 0;
|
||
commArr[commNo].timeoutCount = 0;
|
||
|
||
commArr[commNo].varNum = 0;
|
||
|
||
#if paraComm_DEBUG
|
||
omcLog(paraCommLog, " init commArr[%d] ok", commNo);
|
||
#endif
|
||
return (1);
|
||
}
|
||
|
||
|
||
/*************************************************
|
||
Function: // freeParamSet
|
||
Description: // check and free commArr[commNo].paramSet
|
||
Calls: //
|
||
Called By: //
|
||
Table Accessed: //
|
||
Table Updated: //
|
||
Input: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
Output: //
|
||
Return: //
|
||
Others: //
|
||
*************************************************/
|
||
|
||
void freeParamSet(int commNo)
|
||
{
|
||
int i;
|
||
if (commArr[commNo].paramSet != NULL) {
|
||
int isCanFree = 1;
|
||
//because same sql's resultSet's address will be same,so it is must check other command's state
|
||
for (i = 0; i < MaxCommNum; i++) {
|
||
if ((i != commNo)
|
||
&& (commArr[i].paramSet == commArr[commNo].paramSet)) {
|
||
if ((commArr[i].commState == nWaitProc)
|
||
|| (commArr[i].commState == nInProc)) {
|
||
isCanFree = 0;
|
||
} else {
|
||
//omcLog(paraCommLog," Set commArr[%d].paramSet (%x) = NULL",i,commArr[i].paramSet);
|
||
commArr[i].paramSet = NULL;
|
||
}
|
||
}
|
||
}
|
||
if (isCanFree > 0) {
|
||
#if paraComm_DEBUG
|
||
//omcLog(paraCommLog," Try to free commArr[%d].paramSet (%x)",commNo,commArr[commNo].paramSet);
|
||
#endif
|
||
mysql_free_result(commArr[commNo].paramSet);
|
||
}
|
||
commArr[commNo].paramSet = NULL;
|
||
}
|
||
}
|
||
|
||
void optErr(unitComm *ucomm)
|
||
{
|
||
int ii;
|
||
char where[128];
|
||
char updatesql[256];
|
||
char instanceList[32];
|
||
char tmp[16];
|
||
int ilen;
|
||
int ioid;
|
||
|
||
memset(instanceList,0,32);
|
||
for(ii=0;ii<ucomm->snmpInfo.instanceNoLevel;ii++)
|
||
{
|
||
sprintf(tmp,"%04d.",ucomm->snmpInfo.instanceNo[ii]);
|
||
strcat(instanceList,tmp);
|
||
}
|
||
ilen=strlen(instanceList);
|
||
if(instanceList[ilen-1] == '.')
|
||
instanceList[ilen-1]='\0';
|
||
|
||
|
||
//printf("\n");
|
||
//printf("instanceNo=%s\n",instanceList);
|
||
memset(where,0,128);
|
||
strcat(where,"where ");
|
||
ioid=1;
|
||
for(ii=ucomm->snmpInfo.preOidLen;ii<ucomm->snmpInfo.oidLen;ii++)
|
||
{
|
||
//printf("%d ",ucomm->snmpInfo.oid[ii]);
|
||
sprintf(tmp,"level_%d=%d and ",ioid++,ucomm->snmpInfo.oid[ii]);
|
||
strcat(where,tmp);
|
||
}
|
||
sprintf(tmp,"instanceNo='%s' ",instanceList);
|
||
strcat(where,tmp);
|
||
//printf("\nwhere=%s\n",where);
|
||
//printf("paramTable=%s\n",ucomm->paramTable);
|
||
sprintf(updatesql, "update %s set `initValue`=`readValue` %s",ucomm->paramTable,where);
|
||
mysql_getnores(dbConn, updatesql);
|
||
omcLog(paraCommLog, "opt error,sql=%s",updatesql);
|
||
}
|