add log4cplus
This commit is contained in:
206
mms/mmsclient.c
206
mms/mmsclient.c
@@ -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= %s,dom_Name= %s,dom= %s,rcb_name= %s,rpt= %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= %s,rcb= %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= %s,rcb= %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= %s,rcb= %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= %s,dom_Name= %s,dom= %s,rcb_name= %s,rpt= %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= %s,rcb= %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= %s,rcb= %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= %s,rcb= %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 */
|
||||
|
||||
Reference in New Issue
Block a user