Files
svc.ems/src/configMgr/c_program/paraComm/paraComm.c
2025-06-13 10:31:29 +08:00

1917 lines
57 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*************************************************
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, &paraCommLog);
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, &paraCommLog);
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);
}