add log4cplus

This commit is contained in:
lnk
2025-05-09 16:53:07 +08:00
parent 92117de97e
commit 8a2e6ea537
109 changed files with 18240 additions and 4034 deletions

View File

@@ -83,7 +83,7 @@
extern uint32_t g_node_id;
extern char subdir[128];
unsigned int g_no_auth = 0;
DEV_TYPE_LIST gDev_rcb_list; //ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DEV_TYPE_LIST gDev_rcb_list; //全局报告控制块链表
#if defined(MVL_GOOSE_SUPPORT)
/* Need parts of "iecgoose" sample app */
#include "iec_demo.h" /* definitions from "iecgoose" sample app */
@@ -312,7 +312,7 @@ ST_INT mms_get_datatype_from_type_id (ST_INT type_id, ST_UCHAR* datatype,ST_INT
ret = mvl_get_runtime (type_id, &rt_ctrl.rt_first,&rt_ctrl.rt_num);
if (ret == SD_SUCCESS)
{//ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> rt_ctrl.rt_num <EFBFBD>е<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD> <20><><EFBFBD><EFBFBD>
{//只返回 rt_ctrl.rt_num 中第一个数据的类型和 长度
RUNTIME_TYPE *rt_type = &rt_ctrl.rt_first[0];
*datatype = rt_type->el_tag;
*len = rt_type->u.p.el_len;
@@ -433,7 +433,7 @@ void init_MMS()
loc_dib_table = localDibTable;
// num_rem_dib_entries = sizeof(rem_dib_table)/sizeof(DIB_ENTRY);
memset(&gDev_rcb_list, 0, sizeof(DEV_TYPE_LIST)); //WW 2023-08-29 ȫ<EFBFBD><EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
memset(&gDev_rcb_list, 0, sizeof(DEV_TYPE_LIST)); //WW 2023-08-29 全局装置报告指针初始化
// tp4_config(); /* see tp4_hc.c */
tp0_cfg.max_tpdu_len = 8192;//8192;
@@ -450,7 +450,7 @@ void init_MMS()
/* Fill in mvlCfg. */
mvlCfg.num_called = 0;
mvlCfg.max_msg_size = 320000; //to enlage to fit the <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mvlCfg.max_msg_size = 320000; //to enlage to fit the 主设备保护
strcpy (mvlCfg.local_ar_name, "local1");
#else /* #if defined(HARD_CODED_CFG) */
@@ -595,7 +595,7 @@ ST_RET mms_mvla_fdelete (MVL_NET_INFO *net_info,ST_CHAR *file_to_delete,int iTi
}
#endif
//<EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>Ŀ¼<EFBFBD><EFBFBD><EFBFBD>󣬻<EFBFBD>ȡԶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//用于发送文件目录请求,获取远程设备的文件列表,并返回符合条件的文件名。
#if (MMS_FDIR_EN & REQ_EN)
ST_RET mms_mvla_fdir (MVL_NET_INFO *net_info,ST_CHAR *filespec,int iTimeout,
char*** filenames ,int* filenum,apr_pool_t *pool)
@@ -712,7 +712,7 @@ ST_RET mms_mvla_getnam (MVL_NET_INFO *net_info,ST_INT scope,
//else {
// printf ("\n More Follows : FALSE");
//}
printf("<EFBFBD><EFBFBD>");//
printf("");//
//printf ("mms_mvla_getname %d Names returned . \n",getnam_resp->num_names);
varnames2 = apr_pcalloc( pool,(*varnum+getnam_resp->num_names)*sizeof(char*) );
@@ -769,7 +769,7 @@ ST_UCHAR TrgOps [1]; /* 8 bit bitstring */
rcb_info = rcb_info_create (clientNetInfo, dom_name, rcb_name, rpt_typeids, timeOut);
if (rcb_info)
{
//<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//先注销报告先
ST_BOOLEAN RptDisEna = 0; /* 0 = disable the report */
ST_CHAR varName [MAX_IDENT_LEN + 1];
apr_snprintf (varName,sizeof(varName), "%s$RptEna", rcb_name);
@@ -825,7 +825,7 @@ ST_UCHAR TrgOps [1]; /* 8 bit bitstring */
}
///////////////////////////////////////////
//WW 2023-08-29 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD>,<2C>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD><E6B4A5><EFBFBD>ٶ<EFBFBD>
//WW 2023-08-29 增加设备类型处理,优化报告触发速度
RCB_INFO* mms_register_iec_rpt_by_devtype(MVL_NET_INFO *clientNetInfo, RPT_TYPEIDS *rpt_typeids,
ST_CHAR *dom_name, ST_CHAR *rcb_name, ST_INT timeOut, ST_CHAR *dev_type, ST_CHAR *ip, int port,
ST_INT scanRate, ST_UCHAR trgops, ST_UINT8* pEntryID, ST_UINT8* OptFlds)
@@ -835,80 +835,80 @@ RCB_INFO* mms_register_iec_rpt_by_devtype(MVL_NET_INFO *clientNetInfo, RPT_TYPEI
ST_UCHAR TrgOps[1]; /* 8 bit bitstring */
//һ<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>---------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindDevType = 0; //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dev_RCB_INFO *dev_rcb = NULL;//װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹָ<EFBFBD><EFBFBD>
for (dev_rcb = gDev_rcb_list.dev_rcb_info_Head; dev_rcb != NULL; dev_rcb = (Dev_RCB_INFO *)list_get_next(gDev_rcb_list.dev_rcb_info_Head, dev_rcb)) //<EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
//一、装置类型查找判断---------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindDevType = 0; //是否在链表中查找到装置类型
Dev_RCB_INFO *dev_rcb = NULL;//装置报告结构指针
for (dev_rcb = gDev_rcb_list.dev_rcb_info_Head; dev_rcb != NULL; dev_rcb = (Dev_RCB_INFO *)list_get_next(gDev_rcb_list.dev_rcb_info_Head, dev_rcb)) //①遍历 全局装置报告控制块链表
{
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>gDev_rcb_list<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, dev_type_name= %s", dev_rcb->dev_type_name); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:16:31
if ((strcmp(dev_rcb->dev_type_name, dev_type) == 0)) //ƥ<EFBFBD><EFBFBD> װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//LOG_INFO("(报告触发)遍历gDev_rcb_list链表, dev_type_name= %s", dev_rcb->dev_type_name); //仅调试使用! zl 2019-12-24 00:16:31
if ((strcmp(dev_rcb->dev_type_name, dev_type) == 0)) //匹配 装置类型
{
bFindDevType = 1; //<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>䵽װ<E4B5BD><D7B0><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>dev_type_name= %s", dev_rcb->dev_type_name); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:23:55
bFindDevType = 1; //查找到装置类型
//LOG_INFO("(报告触发)匹配到装置类型,dev_type_name= %s", dev_rcb->dev_type_name); //仅调试使用! zl 2019-12-24 00:23:55
break;
}
} //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (!bFindDevType) //δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} //遍历 装置类型链表 结束
if (!bFindDevType) //未查找到装置类型
{
dev_rcb = (Dev_RCB_INFO *)chk_calloc(1, sizeof(Dev_RCB_INFO)); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<D5BC><E4A3AC><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַָ<D6B7><EFBFBD><EFBFBD><E0B5B1>New
strcpy(dev_rcb->dev_type_name, dev_type); //װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>dev_type_name= %s", dev_rcb->dev_type_name); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:23:55
list_add_last(&gDev_rcb_list.dev_rcb_info_Head, dev_rcb); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
dev_rcb = (Dev_RCB_INFO *)chk_calloc(1, sizeof(Dev_RCB_INFO)); //调用 申请连续内存空间并初始化为0返回首地址指针相当于New
strcpy(dev_rcb->dev_type_name, dev_type); //装置类型
//LOG_INFO("(报告触发)新增装置类型,dev_type_name= %s", dev_rcb->dev_type_name); //仅调试使用! zl 2019-12-24 00:23:55
list_add_last(&gDev_rcb_list.dev_rcb_info_Head, dev_rcb); //添加 全局装置报告控制块链表
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿ںŲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>---------------------------------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindIpPort = 0; //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿ں<EFBFBD>
Dev_IP_Port_INFO *dev_info = NULL; //װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿ںŽṹָ<EFBFBD><EFBFBD>
for (dev_info = dev_rcb->dev_ip_port_list; dev_info != NULL; dev_info = (Dev_IP_Port_INFO *)list_get_next(dev_rcb->dev_ip_port_list, dev_info)) //<EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD><D7B0>IP<49><50><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
//二、装置IP、端口号查找判断---------------------------------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindIpPort = 0; //是否在链表中查找到装置IP、端口号
Dev_IP_Port_INFO *dev_info = NULL; //装置IP、端口号结构指针
for (dev_info = dev_rcb->dev_ip_port_list; dev_info != NULL; dev_info = (Dev_IP_Port_INFO *)list_get_next(dev_rcb->dev_ip_port_list, dev_info)) //②遍历 全局装置IP、端口链表
{
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>dev_ip_port_list<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, dev_type_name= %s, ip= %s, port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:16:31
if ((strcmp(dev_info->IP, ip) == 0) && (dev_info->Port == port)) //ƥ<EFBFBD><EFBFBD> װ<><D7B0>IP && <EFBFBD>˿ں<EFBFBD>
//LOG_INFO("(报告触发)遍历dev_ip_port_list链表, dev_type_name= %s, ip= %s, port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //仅调试使用! zl 2019-12-24 00:16:31
if ((strcmp(dev_info->IP, ip) == 0) && (dev_info->Port == port)) //匹配 装置IP && 端口号
{
bFindIpPort = 1; //<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD>IP && <EFBFBD>˿ں<EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>䵽װ<E4B5BD><D7B0>dev_type_name= %s, IP= %s<EFBFBD><EFBFBD> Port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:23:55
bFindIpPort = 1; //查找到装置IP && 端口号
//LOG_INFO("(报告触发)匹配到装置dev_type_name= %s, IP= %s Port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //仅调试使用! zl 2019-12-24 00:23:55
break;
}
}//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> װ<><D7B0>IP<49><50><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (!bFindIpPort) //δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
}//遍历 装置IP、端口链表 结束
if (!bFindIpPort) //未查找到装置IP、端口
{
dev_info = (Dev_IP_Port_INFO *)chk_calloc(1, sizeof(Dev_IP_Port_INFO)); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<D5BC><E4A3AC><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַָ<D6B7><EFBFBD><EFBFBD><E0B5B1>New
dev_info = (Dev_IP_Port_INFO *)chk_calloc(1, sizeof(Dev_IP_Port_INFO)); //调用 申请连续内存空间并初始化为0返回首地址指针相当于New
strcpy(dev_info->IP, ip); //װ<EFBFBD><EFBFBD>IP
dev_info->Port = port; //<EFBFBD>˿ں<EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>dev_type_name= %s, IP= %s<EFBFBD><EFBFBD> Port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:23:55
list_add_last(&dev_rcb->dev_ip_port_list, dev_info); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>->װ<><D7B0>IP<49><50><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
strcpy(dev_info->IP, ip); //装置IP
dev_info->Port = port; //端口号
//LOG_INFO("(报告触发)新增装置dev_type_name= %s, IP= %s Port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //仅调试使用! zl 2019-12-24 00:23:55
list_add_last(&dev_rcb->dev_ip_port_list, dev_info); //添加 全局装置报告控制块链表->装置IP、端口链表
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>----------------------------------------------------------------------------------------------------------------------------------------------------------------------
RCB_INFO *rcb_info = NULL; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>ָ<EFBFBD><EFBFBD>
ST_BOOLEAN bFindRCB = 0; //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD>ҵ<EFBFBD>
for (rcb_info = dev_rcb->rcb_info_list; rcb_info != NULL; rcb_info = (RCB_INFO *)list_get_next(dev_rcb->rcb_info_list, rcb_info)) //<EFBFBD>۱<EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
//三、装置报告控制块查找判断----------------------------------------------------------------------------------------------------------------------------------------------------------------------
RCB_INFO *rcb_info = NULL; //报告控制块指针
ST_BOOLEAN bFindRCB = 0; //是否在装置报告控制块链表中查找到
for (rcb_info = dev_rcb->rcb_info_list; rcb_info != NULL; rcb_info = (RCB_INFO *)list_get_next(dev_rcb->rcb_info_list, rcb_info)) //③遍历 全局装置报告控制块链表->报告控制块信息链表
{
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>rcb_info_list<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, RptID= %s<EFBFBD><EFBFBD>dom_Name= %s<EFBFBD><EFBFBD>dom= %s<EFBFBD><EFBFBD>rcb_name= %s<EFBFBD><EFBFBD>rpt= %s", rcb_info->RptID, rcb_info->dom_Name, dom, rcb_info->rcb_name, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2018-10-17 21:19:36
if ((strcmp(rcb_info->rcb_name, rcb_name) == 0) && (strcmp(rcb_info->dom_Name, dom_name) == 0)) //ƥ<EFBFBD><EFBFBD> װ<>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
//LOG_INFO("(报告触发)遍历rcb_info_list链表, RptID= %sdom_Name= %sdom= %srcb_name= %srpt= %s", rcb_info->RptID, rcb_info->dom_Name, dom, rcb_info->rcb_name, rpt); //仅调试使用! zl 2018-10-17 21:19:36
if ((strcmp(rcb_info->rcb_name, rcb_name) == 0) && (strcmp(rcb_info->dom_Name, dom_name) == 0)) //匹配 装置报告控制块
{
bFindRCB = 1; //<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>dev_type_name= %s, dom= %s<EFBFBD><EFBFBD>rcb= %s<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", dev_rcb->dev_type_name, dom, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-3-13 14:24:43
bFindRCB = 1; //查找到装置报告控制块
//LOG_INFO("(报告触发)匹配到报告控制块dev_type_name= %s, dom= %srcb= %s,已触发过!", dev_rcb->dev_type_name, dom, rpt); //仅调试使用! zl 2019-3-13 14:24:43
break; /* rcb_info now points to right structure */
}
}
if (!bFindRCB) //δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
if (!bFindRCB) //未查找到装置报告控制块
{
rcb_info = rcb_info_create(clientNetInfo, dom_name, rcb_name, rpt_typeids, timeOut); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD> <20><>>> ע<><D7A2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>͵ı<CDB5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
rcb_info = rcb_info_create(clientNetInfo, dom_name, rcb_name, rpt_typeids, timeOut); //调用 创建装置报告控制块 —>> 注:该函数较为耗时,若本装置类型的报告控制块已创建过,则不需再进行创建!
if (rcb_info == NULL) {
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>dev_type_name= %s, dom= %s<EFBFBD><EFBFBD>rcb= %s", dev_rcb->dev_type_name, dom, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-3-13 14:24:43
//LOG_INFO("(报告触发)创建报告控制块失败!dev_type_name= %s, dom= %srcb= %s", dev_rcb->dev_type_name, dom, rpt); //仅调试使用! zl 2019-3-13 14:24:43
return SD_FAILURE;
}
else {
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dev_type_name= %s, dom= %s<EFBFBD><EFBFBD>rcb= %s", dev_rcb->dev_type_name, dom, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-3-13 14:24:43
list_add_last(&dev_rcb->rcb_info_list, rcb_info); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
//LOG_INFO("(报告触发)创建报告控制块成功,新增全局报告控制块链表!dev_type_name= %s, dom= %srcb= %s", dev_rcb->dev_type_name, dom, rpt); //仅调试使用! zl 2019-3-13 14:24:43
list_add_last(&dev_rcb->rcb_info_list, rcb_info); //添加 全局报告控制块链表->报告控制块信息链表
}
//TRACE("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ飡dom= %s rcb= %s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ:%0.6f<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С:%d", dom, rpt, dwEnd - dwStart, sizeof(RCB_INFO));
//TRACE("(报告触发)创建报告控制块!dom= %s rcb= %s,耗时:%0.6f,报告大小:%d", dom, rpt, dwEnd - dwStart, sizeof(RCB_INFO));
}
if (rcb_info)
{
//<EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WW 2023-08-29ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>
//先注销报告先 WW 2023-08-29注释先注销报告的代码
//ST_BOOLEAN RptDisEna = 0; /* 0 = disable the report */
//ST_CHAR varName[MAX_IDENT_LEN + 1];
//apr_snprintf(varName, sizeof(varName), "%s$RptEna", rcb_name);
@@ -971,81 +971,81 @@ ST_RET mms_unregister_iec_rpt_by_devtype(MVL_NET_INFO *clientNetInfo, RPT_TYPEID
ST_BOOLEAN RptEna = 0;
ST_CHAR varName[MAX_IDENT_LEN + 1];
ST_RET ret; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>з<EFBFBD><EFBFBD><EFBFBD>ֵ
ST_RET ret; //函数执行返回值
//һ<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>---------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindDevType = 0; //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dev_RCB_INFO *dev_rcb = NULL;//װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹָ<EFBFBD><EFBFBD>
for (dev_rcb = gDev_rcb_list.dev_rcb_info_Head; dev_rcb != NULL; dev_rcb = (Dev_RCB_INFO *)list_get_next(gDev_rcb_list.dev_rcb_info_Head, dev_rcb)) //<EFBFBD>ٱ<EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
//一、装置类型查找判断---------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindDevType = 0; //是否在链表中查找到装置类型
Dev_RCB_INFO *dev_rcb = NULL;//装置报告结构指针
for (dev_rcb = gDev_rcb_list.dev_rcb_info_Head; dev_rcb != NULL; dev_rcb = (Dev_RCB_INFO *)list_get_next(gDev_rcb_list.dev_rcb_info_Head, dev_rcb)) //①遍历 全局装置报告控制块链表
{
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)<29><><EFBFBD><EFBFBD>gDev_rcb_list<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, dev_type_name= %s", dev_rcb->dev_type_name); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:16:31
if ((strcmp(dev_rcb->dev_type_name, dev_type) == 0)) //ƥ<EFBFBD><EFBFBD> װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//LOG_INFO("(报告停止)遍历gDev_rcb_list链表, dev_type_name= %s", dev_rcb->dev_type_name); //仅调试使用! zl 2019-12-24 00:16:31
if ((strcmp(dev_rcb->dev_type_name, dev_type) == 0)) //匹配 装置类型
{
bFindDevType = 1; //<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)ƥ<>䵽װ<E4B5BD><D7B0><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>dev_type_name= %s", dev_rcb->dev_type_name); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:23:55
bFindDevType = 1; //查找到装置类型
//LOG_INFO("(报告停止)匹配到装置类型,dev_type_name= %s", dev_rcb->dev_type_name); //仅调试使用! zl 2019-12-24 00:23:55
break;
}
} //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
} //遍历 装置类型链表 结束
if (!bFindDevType) //δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (!bFindDevType) //未查找到装置类型
{
dev_rcb = (Dev_RCB_INFO *)chk_calloc(1, sizeof(Dev_RCB_INFO)); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<D5BC><E4A3AC><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַָ<D6B7><EFBFBD><EFBFBD><E0B5B1>New
//memset(dev_rcb, 0, sizeof(Dev_RCB_INFO)); //ָ<EFBFBD><EFBFBD> <20><>0
strcpy(dev_rcb->dev_type_name, dev_type); //װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
list_add_last(&gDev_rcb_list.dev_rcb_info_Head, dev_rcb); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>
dev_rcb = (Dev_RCB_INFO *)chk_calloc(1, sizeof(Dev_RCB_INFO)); //调用 申请连续内存空间并初始化为0返回首地址指针相当于New
//memset(dev_rcb, 0, sizeof(Dev_RCB_INFO)); //指针 清0
strcpy(dev_rcb->dev_type_name, dev_type); //装置类型
list_add_last(&gDev_rcb_list.dev_rcb_info_Head, dev_rcb); //添加 全局装置报告控制块链表
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿ںŲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>---------------------------------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindIpPort = 0; //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿ں<EFBFBD>
Dev_IP_Port_INFO *dev_info = NULL; //װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿ںŽṹָ<EFBFBD><EFBFBD>
for (dev_info = dev_rcb->dev_ip_port_list; dev_info != NULL; dev_info = (Dev_IP_Port_INFO *)list_get_next(dev_rcb->dev_ip_port_list, dev_info)) //<EFBFBD>ڱ<EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD><D7B0>IP<49><50><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
//二、装置IP、端口号查找判断---------------------------------------------------------------------------------------------------------------------------------------------------
ST_BOOLEAN bFindIpPort = 0; //是否在链表中查找到装置IP、端口号
Dev_IP_Port_INFO *dev_info = NULL; //装置IP、端口号结构指针
for (dev_info = dev_rcb->dev_ip_port_list; dev_info != NULL; dev_info = (Dev_IP_Port_INFO *)list_get_next(dev_rcb->dev_ip_port_list, dev_info)) //②遍历 全局装置IP、端口链表
{
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)<29><><EFBFBD><EFBFBD>dev_ip_port_list<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, dev_type_name= %s, ip= %s, port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:16:31
if ((strcmp(dev_info->IP, ip) == 0) && (dev_info->Port == port)) //ƥ<EFBFBD><EFBFBD> װ<><D7B0>IP && <EFBFBD>˿ں<EFBFBD>
//LOG_INFO("(报告停止)遍历dev_ip_port_list链表, dev_type_name= %s, ip= %s, port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //仅调试使用! zl 2019-12-24 00:16:31
if ((strcmp(dev_info->IP, ip) == 0) && (dev_info->Port == port)) //匹配 装置IP && 端口号
{
bFindIpPort = 1; //<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD>IP && <EFBFBD>˿ں<EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)ƥ<>䵽װ<E4B5BD><D7B0>dev_type_name= %s, IP= %s<EFBFBD><EFBFBD> Port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-12-24 00:23:55
bFindIpPort = 1; //查找到装置IP && 端口号
//LOG_INFO("(报告停止)匹配到装置dev_type_name= %s, IP= %s Port= %d", dev_rcb->dev_type_name, dev_info->IP, dev_info->Port); //仅调试使用! zl 2019-12-24 00:23:55
break;
}
} //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> װ<><D7B0>IP<49><50><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if (!bFindIpPort) //δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD><EFBFBD>IP<EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
} //遍历 装置IP、端口链表 结束
if (!bFindIpPort) //未查找到装置IP、端口
{
dev_info = (Dev_IP_Port_INFO *)chk_calloc(1, sizeof(Dev_IP_Port_INFO)); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ռ<D5BC><E4A3AC><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַָ<D6B7><EFBFBD><EFBFBD><E0B5B1>New
//memset(dev_info, 0, sizeof(Dev_IP_Port_INFO)); //ָ<EFBFBD><EFBFBD> <20><>0
strcpy(dev_info->IP, ip); //װ<EFBFBD><EFBFBD>IP
dev_info->Port = port; //<EFBFBD>˿ں<EFBFBD>
list_add_last(&dev_rcb->dev_ip_port_list, dev_info); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>->װ<><D7B0>IP<49><50><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
dev_info = (Dev_IP_Port_INFO *)chk_calloc(1, sizeof(Dev_IP_Port_INFO)); //调用 申请连续内存空间并初始化为0返回首地址指针相当于New
//memset(dev_info, 0, sizeof(Dev_IP_Port_INFO)); //指针 清0
strcpy(dev_info->IP, ip); //装置IP
dev_info->Port = port; //端口号
list_add_last(&dev_rcb->dev_ip_port_list, dev_info); //添加 全局装置报告控制块链表->装置IP、端口链表
}
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>----------------------------------------------------------------------------------------------------------------------------------------------------------------------
RCB_INFO *rcb_info = NULL; //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>ָ<EFBFBD><EFBFBD>
ST_BOOLEAN bFindRCB = 0; //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><EFBFBD>ҵ<EFBFBD>
for (rcb_info = dev_rcb->rcb_info_list; rcb_info != NULL; rcb_info = (RCB_INFO *)list_get_next(dev_rcb->rcb_info_list, rcb_info)) //<EFBFBD>۱<EFBFBD><EFBFBD><EFBFBD> ȫ<><C8AB>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
//三、装置报告控制块查找判断----------------------------------------------------------------------------------------------------------------------------------------------------------------------
RCB_INFO *rcb_info = NULL; //报告控制块指针
ST_BOOLEAN bFindRCB = 0; //是否在装置报告控制块链表中查找到
for (rcb_info = dev_rcb->rcb_info_list; rcb_info != NULL; rcb_info = (RCB_INFO *)list_get_next(dev_rcb->rcb_info_list, rcb_info)) //③遍历 全局装置报告控制块链表->报告控制块信息链表
{
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)<29><><EFBFBD><EFBFBD>rcb_info_list<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, RptID= %s<EFBFBD><EFBFBD>dom_Name= %s<EFBFBD><EFBFBD>dom= %s<EFBFBD><EFBFBD>rcb_name= %s<EFBFBD><EFBFBD>rpt= %s", rcb_info->RptID, rcb_info->dom_Name, dom, rcb_info->rcb_name, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2018-10-17 21:19:36
//if ((strcmp (rcb_info->rcb_name, rpt) == 0) && (strcmp(rcb_info->dom_Name, dom) == 0)) //ƥ<EFBFBD><EFBFBD> װ<>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> zl 2019-12-26 17:27:29
if ((strcmp(rcb_info->rcb_name, rcb_name) == 0)) //ƥ<EFBFBD><EFBFBD> װ<>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
//LOG_INFO("(报告停止)遍历rcb_info_list链表, RptID= %sdom_Name= %sdom= %srcb_name= %srpt= %s", rcb_info->RptID, rcb_info->dom_Name, dom, rcb_info->rcb_name, rpt); //仅调试使用! zl 2018-10-17 21:19:36
//if ((strcmp (rcb_info->rcb_name, rpt) == 0) && (strcmp(rcb_info->dom_Name, dom) == 0)) //匹配 装置报告控制块 —— 废弃! zl 2019-12-26 17:27:29
if ((strcmp(rcb_info->rcb_name, rcb_name) == 0)) //匹配 装置报告控制块
{
bFindRCB = 1; //<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)ƥ<><EFBFBD><E4B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>dom= %s<EFBFBD><EFBFBD>rcb= %s<EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", dom, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-3-13 14:24:43
bFindRCB = 1; //查找到装置报告控制块
//LOG_INFO("(报告停止)匹配到报告控制块dom= %srcb= %s,已触发过!", dom, rpt); //仅调试使用! zl 2019-3-13 14:24:43
break; /* rcb_info now points to right structure */
}
}
if (!bFindRCB) //δ<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD>װ<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>
if (!bFindRCB) //未查找到装置报告控制块
{
rcb_info = rcb_info_create(clientNetInfo, dom_name, rcb_name, rpt_typeids, timeOut); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD> <20><>>> ע<><D7A2><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>͵ı<CDB5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>
rcb_info = rcb_info_create(clientNetInfo, dom_name, rcb_name, rpt_typeids, timeOut); //调用 创建装置报告控制块 —>> 注:该函数较为耗时,若本装置类型的报告控制块已创建过,则不需再进行创建!
if (rcb_info == NULL) {
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>dom= %s<EFBFBD><EFBFBD>rcb= %s", dom, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-3-13 14:24:43
//LOG_INFO("(报告停止)创建报告控制块失败!dom= %srcb= %s", dom, rpt); //仅调试使用! zl 2019-3-13 14:24:43
return SD_FAILURE;
}
else {
//LOG_INFO("(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dom= %s<EFBFBD><EFBFBD>rcb= %s", dom, rpt); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD> zl 2019-3-13 14:24:43
list_add_last(&dev_rcb->rcb_info_list, rcb_info); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȫ<>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
//LOG_INFO("(报告停止)创建报告控制块成功,新增全局报告控制块链表!dom= %srcb= %s", dom, rpt); //仅调试使用! zl 2019-3-13 14:24:43
list_add_last(&dev_rcb->rcb_info_list, rcb_info); //添加 全局报告控制块链表->报告控制块信息链表
}
}
sprintf(varName, "%s$RptEna", rcb_name); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ <20><><EFBFBD><EFBFBD>LLN0$BR$brcbStatisticData03$RptEna
ret = mms_named_var_write(clientNetInfo, varName, DOM_SPEC, dom_name, rpt_typeids->mmsbool, (ST_CHAR *)&RptEna, timeOut); //<EFBFBD><EFBFBD><EFBFBD><EFBFBD> д<><D0B4>װ<EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD>(<28><><EFBFBD><EFBFBD>ֹͣ)
sprintf(varName, "%s$RptEna", rcb_name); //报告停止 例:LLN0$BR$brcbStatisticData03$RptEna
ret = mms_named_var_write(clientNetInfo, varName, DOM_SPEC, dom_name, rpt_typeids->mmsbool, (ST_CHAR *)&RptEna, timeOut); //调用 写入装置报告控制块(报告停止)
return ret;
@@ -1107,18 +1107,18 @@ ST_VOID doCommService ()
/* connectToServer */
/************************************************************************/
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD>ա<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD><EFBFBD>򲻿ɼ<EFBFBD><EFBFBD>ַ<EFBFBD>lnk20241119
// 检查字符串是否为空、仅空格或不可见字符lnk20241119
int is_empty_or_whitespace(const char* str) {
if (str == NULL) {
return 1; // NULL <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ"<22><>"
return 1; // NULL 情况,视为"空"
}
while (*str) {
if (!isspace((unsigned char)*str)) {
return 0; // <EFBFBD>зǿո<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"<22><>"
return 0; // 有非空格字符,非"空"
}
str++;
}
return 1; // ȫ<EFBFBD>ǿո<EFBFBD><EFBFBD>򲻿ɼ<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ"<22><>"
return 1; // 全是空格或不可见字符,视为"空"
}
ST_RET mms_connectToServer (ST_CHAR * dev_key,ST_CHAR *dev_series, ST_CHAR *serverARName,
@@ -1174,7 +1174,7 @@ S_SEC_ENCRYPT_CTRL *encryptCtrl = NULL; /* conn enctryption info */
//authInfo->mech_type = ACSE_AUTH_MECH_PASSWORD;
//memset(ied_password,0,sizeof(ied_password));
//lnk20241119<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϺʹ<EFBFBD>ӡ<EFBFBD><EFBFBD>ȷ<EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԿΪ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü<EFBFBD><EFBFBD><EFBFBD>
//lnk20241119添加判断和打印,确保识别码秘钥为空时不调用加密
if (!is_empty_or_whitespace(dev_series) || !is_empty_or_whitespace(dev_key)) {
printf("dev_series= %s,dev_key= %s\n", dev_series,dev_key);
/* Fill out an authentication structure */