@@ -57,6 +57,13 @@ extern "C" {
# ifdef __cplusplus
}
# endif
///////////////////////////////lnk20250118̨<38> ˱<EFBFBD> <CBB1> <EFBFBD> ʹ <EFBFBD> õ<EFBFBD> <C3B5> ڴ<EFBFBD> <DAB4> أ<EFBFBD> <D8A3> <EFBFBD> ̬<EFBFBD> ڴ<EFBFBD> <DAB4> صķ<D8B5> ʽ <EFBFBD> <CABD> ÿ<EFBFBD> <C3BF> <EFBFBD> ڴ<EFBFBD> <DAB4> ط<EFBFBD> һ <EFBFBD> <D2BB> ied<65> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݣ<EFBFBD> <DDA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ݲ<EFBFBD> ʹ <EFBFBD> ã<EFBFBD> ֻ<EFBFBD> <D6BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʵ<EFBFBD> ֺ<EFBFBD> <D6BA> <EFBFBD>
// <20> <> <EFBFBD> ڴ洢<DAB4> ն<EFBFBD> ID <20> Ͷ<EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> ӳ<EFBFBD>
std : : list < std : : pair < std : : string , apr_pool_t * > > pool_list ;
///////////////////////////////////////////////////
//ZW 2023-10-10 <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> нṹ
class RecallInfo
{
@@ -191,6 +198,9 @@ std::string LEDGER_UPDATE_FN = "LedgerUpdate.log";
const int MAX_CPUNO = 10 ;
//lnk20250121<32> ն<EFBFBD> ̨<EFBFBD> <CCA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
int IED_COUNT = 200 ; //Ĭ<> <C4AC> 200
//WW 2-23-08-20 add start
otl_connect db ; //OTL<54> <4C> <EFBFBD> ݿ<EFBFBD> <DDBF> <EFBFBD> <EFBFBD> Ӷ<EFBFBD> <D3B6> <EFBFBD> WW 2023-08-20
int g_iOTLFlag = 0 ; //Sql<71> Ƿ<EFBFBD> ִ<EFBFBD> б <EFBFBD> ־(0-<2D> <> ִ<EFBFBD> У <EFBFBD> 1-ִ<> <D6B4> ) //lnk202410-22<32> 滻web<65> ӿں<D3BF> <DABA> ر<EFBFBD>
@@ -666,6 +676,7 @@ void init_config() {
std : : cout < < " Read MONITOR_STATUS: " < < MONITOR_STATUS < < std : : endl ;
ICD_FLAG = settings . value ( " Ledger/IcdFlag " , 0 ) . toString ( ) . toStdString ( ) ;
std : : cout < < " Read ICD_FLAG: " < < ICD_FLAG < < std : : endl ;
IED_COUNT = settings . value ( " Ledger/IedCount " , 0 ) . toInt ( ) ;
//////////////////////////////////////////////////<2F> <> <EFBFBD> <EFBFBD> socket<65> <74> <EFBFBD> <EFBFBD> ///////////////////
SOCKETENABLE = settings . value ( " Socket/SocketEnable " , 0 ) . toInt ( ) ;
@@ -3849,7 +3860,8 @@ int parse_rpt_log_ini()
QStringList * log_temp = new QStringList ( ) ;
rpt_cfg_strlists . insert ( type , rpt_temp ) ;
log_cfg_strlists . insert ( type , log_temp ) ;
parse_one_rpt_log_ini ( ied_usr - > dev_flag , rpt_cfg_strlists [ type ] , log_cfg_strlists [ type ] , ied_usr - > dev_type ) ;
//g_DevFlagû<67> <C3BB> ʹ <EFBFBD> <CAB9>
parse_one_rpt_log_ini ( g_DevFlag , rpt_cfg_strlists [ type ] , log_cfg_strlists [ type ] , ied_usr - > dev_type ) ;
}
/*if (not_loaded[ied_usr->dev_flag]) {
@@ -12145,10 +12157,12 @@ int parse_device_cfg_web()
std : : cout < < " terminal_ledger_num: " < < count_cfg < < std : : endl ;
g_node - > n_clients = count_cfg ; //<2F> <> <EFBFBD> <EFBFBD> ̨<EFBFBD> <CCA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD>
g_node - > clients = ( ied_t * * ) apr_pcalloc ( g_cfg_pool , count_cfg * sizeof ( ied_t * ) ) ;
g_node - > n_clients = count_cfg ;
//<2F> <> <EFBFBD> ↑<EFBFBD> ٵ<EFBFBD> ied<65> Ŀռ <C4BF> <D5BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> е <EFBFBD> <D0B5> ն<EFBFBD> ̨<EFBFBD> <CCA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> lnk20250121
g_node - > clients = ( ied_t * * ) apr_pcalloc ( g_cfg_pool , IED_COUNT * sizeof ( ied_t * ) ) ; //g_node->clients <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڴ<EFBFBD> <DAB4> ռ <EFBFBD> <D5BC> 洢<EFBFBD> <E6B4A2> count_cfg <20> <> ied_t* <20> <> <EFBFBD> ͵<EFBFBD> ָ<EFBFBD> 루<EFBFBD> <EBA3A8> һ <EFBFBD> <D2BB> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> 飩<EFBFBD> <E9A3A9> <EFBFBD> ǣ<EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> 룩<EFBFBD> <EBA3A9> ָ<EFBFBD> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//<2F> <> ied<65> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
for ( int k = 0 ; k < count_cfg ; k + + )
g_node - > clients [ k ] = ( ied_t * ) apr_pcalloc ( g_cfg_pool , sizeof ( ied_t ) ) ;
g_node - > clients [ k ] = ( ied_t * ) apr_pcalloc ( g_cfg_pool , sizeof ( ied_t ) ) ; //ÿ<> <C3BF> g_node->clients[k] ָ<> <D6B8> <EFBFBD> <EFBFBD> <EFBFBD> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> Ƕ<EFBFBD> <C7B6> <EFBFBD> <EFBFBD> ģ<EFBFBD> ÿ<EFBFBD> <C3BF> ied_t <20> ṹ<EFBFBD> <E1B9B9> ռ <EFBFBD> õ<EFBFBD> <C3B5> ڴ<EFBFBD> <DAB4> 飩<EFBFBD> <E9A3A9> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8> <EFBFBD> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> <EFBFBD> ָ<EFBFBD> <D6B8>
//<2F> <> ȡ<EFBFBD> ն<EFBFBD> ̨<EFBFBD> ˱<EFBFBD> <CBB1> 滻Ϊweb<65> ӿ<EFBFBD>
//////////////////////////////////////////////////////////////////////////////////////////////////
@@ -12192,21 +12206,24 @@ int parse_device_cfg_web()
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> ն<EFBFBD> ̨<EFBFBD> <CCA8>
ied = g_node - > clients [ count_real + + ] ;
ied_usr = ( ied_usr_t * ) apr_pcalloc ( g_init_pool , sizeof ( ied_usr_t ) ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀռ <C4BF> <D5BC> <EFBFBD> <EFBFBD> <EFBFBD> ied<65> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ص<EFBFBD> ied<65> <64>
ied_usr = ( ied_usr_t * ) apr_pcalloc ( g_init_pool , sizeof ( ied_usr_t ) ) ; //<2F> ն<EFBFBD> ̨<EFBFBD> <CCA8> <EFBFBD> <EFBFBD> initpool<6F> <6C> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD>
ied - > usr_ext = ied_usr ;
if ( ied_usr = = NULL )
return APR_ENOMEM ;
ied_usr - > last_call_wavelist_time = sGetMsTime ( ) + g_pt61850app - > giTime * 1000 ;
ied_usr - > LD_info = ( LD_info_t * ) apr_pcalloc ( g_init_pool , MAX_CPUNO * sizeof ( LD_info_t ) ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀռ <C4BF> <D5BC> <EFBFBD> <EFBFBD> <EFBFBD> ied<65> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ص<EFBFBD> ied<65> <64>
ied_usr - > LD_info = ( LD_info_t * ) apr_pcalloc ( g_init_pool , MAX_CPUNO * sizeof ( LD_info_t ) ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̨<EFBFBD> <CCA8> <EFBFBD> <EFBFBD> initpool<6F> <6C> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ռ <EFBFBD>
if ( ied_usr - > LD_info = = NULL )
return APR_ENOMEM ;
ied_usr - > dev_flag = g_DevFlag ;
ied_usr - > dev_flag = ENABLE ; //<2F> ն<EFBFBD> <D5B6> <EFBFBD> Ч
ied - > chncount = 1 ;
ied - > channel = ( channel_t * ) apr_pcalloc ( g_cfg_pool , sizeof ( channel_t ) * ied - > chncount ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀռ <C4BF> <D5BC> <EFBFBD> <EFBFBD> <EFBFBD> ied<65> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ص<EFBFBD> ied<65> <64>
ied - > channel = ( channel_t * ) apr_pcalloc ( g_cfg_pool , sizeof ( channel_t ) * ied - > chncount ) ; //ͨ<> Žṹ<C5BD> <E1B9B9> g_cfg_pool<6F> <6C> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ռ 䣺<D5BC> ն˵<D5B6> ip<69> ˿ڵ<CBBF>
ied - > channel [ 0 ] . ied = ied ;
ied - > channel [ 0 ] . status = STATUS_BREAKOFF ;
ied - > cpucount = 0 ;
@@ -12309,7 +12326,8 @@ int parse_device_cfg_web()
cout < < " ied_usr->time: " < < ied_usr - > time < < endl ;
}
chnl_usr = ( chnl_usr_t * ) apr_pcalloc ( g_init_pool , sizeof ( chnl_usr_t ) ) ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀռ <C4BF> <D5BC> <EFBFBD> <EFBFBD> <EFBFBD> ied<65> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ص<EFBFBD> ied<65> <64>
chnl_usr = ( chnl_usr_t * ) apr_pcalloc ( g_init_pool , sizeof ( chnl_usr_t ) ) ; //<2F> <> չ<EFBFBD> <D5B9> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ͨ<EFBFBD> Žṹ<C5BD> <E1B9B9> g_init_pool<6F> <6C> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ռ 䣺<D5BC> <E4A3BA> չ<EFBFBD> <D5B9> ¼һ Щ<D2BB> <D0A9> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> Ϣ
ied - > channel [ 0 ] . connect = chnl_usr ;
chnl_usr - > chnl = & ( ied - > channel [ 0 ] ) ;
chnl_usr - > chnl_id = 0 ;
@@ -12413,7 +12431,7 @@ int parse_device_cfg_web()
strcpy ( line_info . name , monitor_name ) ;
cout < < " name: " < < line_info . name < < endl ;
line_info . read_flag = 1 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ч
line_info . read_flag = ENABLE ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ч
//ied = find_ied_from_dev_code(line_info.terminal_code); //<2F> <> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> ϼ<EFBFBD> <CFBC> ն<EFBFBD> <D5B6> ˣ<EFBFBD> <CBA3> Ѿ<EFBFBD> <D1BE> <EFBFBD> <EFBFBD> ն<EFBFBD> <D5B6> <EFBFBD> <EFBFBD> <EFBFBD>
@@ -12427,10 +12445,11 @@ int parse_device_cfg_web()
ied_usr = ( ied_usr_t * ) ied - > usr_ext ;
ied_usr - > LD_info [ cpuno - 1 ] = line_info ; //cpunoĬ<6F> <C4AC> <EFBFBD> <EFBFBD> 1
ied_usr - > LD_info [ cpuno - 1 ] . ied = ied ;
apr_snprintf ( str , sizeof ( str ) , " PQMonitorPQM%d " , cpuno ) ;
ied_usr - > LD_info [ cpuno - 1 ] . LD_name = apr_pstrdup ( g_init_pool , str ) ;
ied_usr - > LD_info [ cpuno - 1 ] . ht_fcd = apr_hash_make ( g_init_pool ) ;
ied_usr - > LD_info [ cpuno - 1 ] . ht_full_ fcda = apr_hash_make ( g_init_pool ) ;
apr_snprintf ( str , sizeof ( str ) , " PQMonitorPQM%d " , cpuno ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <DFBC> <EFBFBD> תΪPQMonitorPQM+<2B> <EFBFBD> <DFBC> <EFBFBD>
ied_usr - > LD_info [ cpuno - 1 ] . LD_name = apr_pstrdup ( g_init_pool , str ) ; //<2F> <> str <20> е ĸ<D0B5> ʽ <EFBFBD> <CABD> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƶ<EFBFBD> <C6B5> ڴ<EFBFBD> <DAB4> <EFBFBD> g_init_pool <20> С <EFBFBD> ied_usr->LD_info[cpuno - 1].LD_name <20> 洢<EFBFBD> <E6B4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> ĸ<EFBFBD> <C4B8> <EFBFBD> <EFBFBD> <EFBFBD> LD_name <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> PQMonitorPQM{cpuno} <20> <> <EFBFBD> <EFBFBD> ʽ <EFBFBD> <CABD>
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ŀռ <C4BF> <D5BC> <EFBFBD> <EFBFBD> <EFBFBD> ied<65> <64> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ص<EFBFBD> ied<65> <64>
ied_usr - > LD_info [ cpuno - 1 ] . ht_fcd = apr_hash_make ( g_init_pool ) ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> <EFBFBD> <EFBFBD> ֱ<EFBFBD> Ϊ ied_usr->LD_info[cpuno - 1] <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ա<EFBFBD> <D4B1> ht_fcd <20> <> ht_full_fcda<64> <61> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ˿յĹ<D5B5> ϣ<EFBFBD> <CFA3> <EFBFBD> <EFBFBD> apr_hash_make(g_init_pool) <20> <> <EFBFBD> <EFBFBD> g_init_pool <20> ڴ<EFBFBD> <DAB4> <EFBFBD> <EFBFBD> <EFBFBD> Ϊ<EFBFBD> <CEAA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϣ<EFBFBD> <CFA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڴ<EFBFBD> <DAB4> ռ <EFBFBD>
ied_usr - > LD_info [ cpuno - 1 ] . ht_full_fcda = apr_hash_make ( g_init_pool ) ; //<2F> <> <EFBFBD> ǵ<EFBFBD> key ֵ<> <D6B5> value <20> ں<EFBFBD> <DABA> <EFBFBD> <EFBFBD> Ĵ<EFBFBD> <C4B4> <EFBFBD> <EFBFBD> п<EFBFBD> <D0BF> ܻᱻ<DCBB> <E1B1BB> <EFBFBD> <EFBFBD>
ied_usr - > LD_info [ cpuno - 1 ] . rptcount = 0 ;
cout < < " rptcount: " < < ied_usr - > LD_info [ cpuno - 1 ] . rptcount < < endl ;
@@ -12442,171 +12461,7 @@ int parse_device_cfg_web()
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////
#if 0
ied = g_node->clients[count_real++];
ied_usr = (ied_usr_t*)apr_pcalloc(g_init_pool, sizeof(ied_usr_t));
ied->usr_ext = ied_usr;
if (ied_usr == NULL)
return APR_ENOMEM;
ied_usr->last_call_wavelist_time = sGetMsTime() + g_pt61850app->giTime * 1000;
ied_usr->LD_info = (LD_info_t*)apr_pcalloc(g_init_pool, MAX_CPUNO * sizeof(LD_info_t));
if (ied_usr->LD_info == NULL)
return APR_ENOMEM;
ied_usr->dev_flag = g_DevFlag;
ied->chncount = 1;
ied->channel = (channel_t*)apr_pcalloc(g_cfg_pool, sizeof(channel_t) * ied->chncount);
ied->channel[0].ied = ied;
ied->channel[0].status = STATUS_BREAKOFF;
ied->cpucount = 0;
if (strlen(terminal_id) != 0) {
apr_snprintf(ied_usr->terminal_id, sizeof(ied_usr->terminal_id), "%s", terminal_id);//terminal_id
cout << "ied_usr->terminal_id:" << ied_usr->terminal_id << endl;
}
if (terminal_code != NULL) {
apr_snprintf(ied_usr->terminal_code, sizeof(ied_usr->terminal_code), "%s", terminal_code);//terminal_code
cout << "ied_usr->terminal_code:" << ied_usr->terminal_code << endl;
}
/*<2A> <> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ
if (org_name != NULL) {
apr_snprintf(ied_usr->org_name, sizeof(ied_usr->org_name), "%s", org_name);//org_name
cout << "ied_usr->org_name:" << ied_usr->org_name << endl;
}
if (maint_name != NULL) {
apr_snprintf(ied_usr->maint_name, sizeof(ied_usr->maint_name), "%s", maint_name);//maint_name
cout << "ied_usr->maint_name:" << ied_usr->maint_name << endl;
}
if (station_name != NULL) {
apr_snprintf(ied_usr->station_name, sizeof(ied_usr->station_name), "%s", station_name);//station_name
cout << "ied_usr->station_name:" << ied_usr->station_name << endl;
}
*/
if (tmnl_factory != NULL) {
apr_snprintf(ied_usr->tmnl_factory, sizeof(ied_usr->tmnl_factory), "%s", tmnl_factory);//tmnl_factory
cout << "ied_usr->tmnl_factory:" << ied_usr->tmnl_factory << endl;
}
if (tmnl_status != NULL) {
apr_snprintf(ied_usr->tmnl_status, sizeof(ied_usr->tmnl_status), "%s", tmnl_status);//tmnl_status
cout << "ied_usr->tmnl_status:" << ied_usr->tmnl_status << endl;
}
if (dev_type != NULL) {
apr_snprintf(ied_usr->dev_type, sizeof(ied_usr->dev_type), "%s", dev_type);//dev_type
cout << "ied_usr->dev_type:" << ied_usr->dev_type << endl;
}
if (dev_series != NULL) {
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", dev_seri);//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}
else
{
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", "");//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}
if (dev_key != NULL) {
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", dev_key);//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
}
else
{
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", "");//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
}
//<2F> ϲ <EFBFBD> <CFB2> <EFBFBD>
/* cout << "code" << ied_usr->terminal_code << endl;
if (terminal_ext_map.contains(QString::fromUtf8(ied_usr->terminal_code))) {
terminal_ext* ext = terminal_ext_map.value(QString::fromUtf8(ied_usr->terminal_code));
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", ext->terminal_key);//DEV_Key
cout << "dev_key:" << ied_usr->dev_key << endl;
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", ext->terminal_identify_code);//DEV_Series
cout << "dev_series:" << ied_usr->dev_series << endl;
}
else
{
apr_snprintf(ied_usr->dev_key, sizeof(ied_usr->dev_key), "%s", "");//DEV_Key
cout << "defalut dev_key:" << ied_usr->dev_key << endl;
apr_snprintf(ied_usr->dev_series, sizeof(ied_usr->dev_series), "%s", "");//DEV_Series
cout << "defalut dev_series:" << ied_usr->dev_series << endl;
}*/
ied->channel[0].channel_type = CHANNEL_TYPE_IPV4;//channel
ied->channel[0].addr_str[LONGNAME - 1] = 0;//DEV_IP
if (addr_str != NULL) {
ied->channel[0].addr = ntohl(inet_addr(addr_str));//DEV_IP
strncpy(ied->channel[0].addr_str, addr_str, LONGNAME - 1);//DEV_IP
cout << "ied_usr->addr_str:" << ied->channel[0].addr_str << endl;
}
else
{
ied->channel[0].addr = ntohl(inet_addr("0.0.0.0"));//DEV_IP
strncpy(ied->channel[0].addr_str, addr_str, LONGNAME - 1);//DEV_IP
cout << "ied_usr->addr_str:" << ied->channel[0].addr_str << endl;
}
if (port_char != NULL) {
int port = 102;
if (stringToInt(port_char, &port)) {
// ת<> <D7AA> <EFBFBD> ɹ<EFBFBD> <C9B9> <EFBFBD> portStrȫΪ<C8AB> <CEAA> <EFBFBD> ֣<EFBFBD> <D6A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ѿ<EFBFBD> ת<EFBFBD> <D7AA> Ϊint<6E> <74> <EFBFBD> ͵<EFBFBD> port
ied->channel[0].port = port;//DEV_PortID
cout << "ied_usr->port:" << ied->channel[0].port << endl;//DEV_PortID
}
else {
ied->channel[0].port = 102;//DEV_PortID
cout << "ied_usr->port:" << port_char << ",<2C> ǺϷ<C7BA> <CFB7> ˿<EFBFBD> .ʹ <> <CAB9> Ĭ<EFBFBD> ϶˿<CFB6> :" << ied->channel[0].port << endl;//DEV_PortID
}
}
if (timestamp.year != 0) {
//// <20> <> <EFBFBD> <EFBFBD> struct tm<74> <6D> <EFBFBD> <EFBFBD>
struct tm timeinfo;
timeinfo.tm_year = timestamp.year - 1900; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> ȥ1900
timeinfo.tm_mon = timestamp.month - 1; // <20> ·<EFBFBD> <C2B7> <EFBFBD> Ҫ<EFBFBD> <D2AA> ȥ1
timeinfo.tm_mday = timestamp.day;
timeinfo.tm_hour = timestamp.hour;
timeinfo.tm_min = timestamp.minute;
timeinfo.tm_sec = timestamp.second;
time_t time = std::mktime(&timeinfo);
ied_usr->time = static_cast<long long>(time);
cout << "ied_usr->time:" << ied_usr->time << endl;
}
chnl_usr = (chnl_usr_t*)apr_pcalloc(g_init_pool, sizeof(chnl_usr_t));
ied->channel[0].connect = chnl_usr;
chnl_usr->chnl = &(ied->channel[0]);
chnl_usr->chnl_id = 0;
chnl_usr->m_state = CHANNEL_DISCONNECTED;
chnl_usr->m_ClosedMsTime = NEXT_CONNECT_TIME * (-1);
g_pt61850app->chnl_counts++;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
std::cout << "value:" << terminal_id <<" "<<terminal_code <<" "<<tmnl_factory <<" "<<dev_series <<" "<<dev_key <<" "<< tmnl_status <<" "<<dev_type <<" "<<addr_str <<" "<<port_char <<" "<< timestamp.year << std::endl;
}//̨<> <CCA8> ѭ<EFBFBD> <D1AD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
//û<> ж<EFBFBD> ǰ<EFBFBD> <C7B0>
/*//<2F> 滻ǰ<E6BBBB> ñ<EFBFBD> <C3B1> <EFBFBD> <EFBFBD> ²<EFBFBD> <C2B2> <EFBFBD>
if (MULTIPLE_NODE_FLAG) {
codes.push_back("updatefront");
codes.push_back(std::string(FRONT_IP));
codes.push_back(intToString(FRONT_INST));
codes.push_back(intToString(count_real));
codes.push_back(std::string(PROGRAM_VERSION)); //<2F> Ͷ<EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> updateһ <65> <D2BB> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> PROGRAM_VERSION
parse_device_web_test_front_write(codes);
codes.clear();
}
//<2F> 滻ǰ<E6BBBB> ñ<EFBFBD> <C3B1> <EFBFBD> <EFBFBD> ²<EFBFBD> <C2B2> <EFBFBD> */
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////
if ( count_real < count_cfg )
g_node - > n_clients = count_real ;
@@ -13096,7 +12951,7 @@ void OnTimerThread::run()
pthread_mutex_lock ( & mtx ) ; //lnk20250114
std : : string mp_num_str = " " ;
mp_num_str . append ( " connected device count: " ) ;
mp_num_str . append ( QString : : number ( FRONT_MP_NUM ) . toStdString ( ) ) ;
mp_num_str . append ( QString : : number ( FRONT_MP_NUM ) . toStdString ( ) ) ; //<2F> <> ¼<EFBFBD> <C2BC> <EFBFBD> ӵļ<D3B5> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
mp_num_str . append ( " ,g_node clients: " ) ;
mp_num_str . append ( QString : : number ( g_node - > n_clients ) . toStdString ( ) ) ;
@@ -14142,7 +13997,7 @@ void SOEFileWeb_test()
/*<2A> <> װC<D7B0> ɵ<EFBFBD> <C9B5> õ<EFBFBD> ̨<EFBFBD> ˸ <EFBFBD> <CBB8> º<EFBFBD> <C2BA> <EFBFBD> */ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//3-д<> <D0B4> ̨<EFBFBD> <CCA8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> //////////////////////////////
int update_one_terminal_ledger ( terminal * update , int i , ied_t * ied , int terminal_index )
int update_one_terminal_ledger ( terminal * update , int i , ied_t * ied , int terminal_index , int ied_take )
{
chnl_usr_t * chnl_usr = NULL ;
ied_usr_t * ied_usr = NULL ;
@@ -14183,8 +14038,10 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
apr_snprintf ( ied_usr - > dev_key , sizeof ( ied_usr - > dev_key ) , " %s " , " " ) ; // Ĭ<> <C4AC> Ϊ<EFBFBD> <CEAA> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD>
printf ( " ied_usr->dev_key (default): %s \n " , ied_usr - > dev_key ) ;
}
ied_usr - > dev_idx = terminal_index ; // <20> <> <EFBFBD> µ<EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> ն<EFBFBD> <D5B6> ź<EFBFBD>
ied_usr - > dev_idx = terminal_index ; //<2F> ն<EFBFBD> <D5B6> ź<EFBFBD>
printf ( " dev_idx: %d \n " , ied_usr - > dev_idx ) ;
ied - > channel [ 0 ] . channel_type = CHANNEL_TYPE_IPV4 ; // channel
ied - > channel [ 0 ] . addr_str [ LONGNAME - 1 ] = 0 ; // DEV_IP
if ( update [ i ] . addr_str ! = NULL ) {
@@ -14207,6 +14064,7 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
printf ( " ied_usr->port: %s, <20> ǺϷ<C7BA> <CFB7> ˿<EFBFBD> . ʹ <> <CAB9> Ĭ<EFBFBD> ϶˿<CFB6> : %d \n " , update [ i ] . port , ied - > channel [ 0 ] . port ) ; // DEV_PortID
}
}
if ( update [ i ] . timestamp ! = NULL & & strlen ( update [ i ] . timestamp ) > 0 ) {
// <20> <> <EFBFBD> <EFBFBD> struct tm<74> <6D> <EFBFBD> <EFBFBD>
struct tm timeinfo = { 0 } ; // <20> <> ʼ <EFBFBD> <CABC> Ϊ0
@@ -14235,13 +14093,22 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
return - 1 ;
}
}
chnl_usr = ( chnl_usr_t * ) apr_pcalloc ( g_init_pool , sizeof ( chnl_usr_t ) ) ;
ied - > channel [ 0 ] . connect = chnl_usr ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʹ <EFBFBD> <CAB9> <EFBFBD> <EFBFBD> <EFBFBD> пռ <D0BF> <D5BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( ! ied_take ) {
chnl_usr = ( chnl_usr_t * ) apr_pcalloc ( g_init_pool , sizeof ( chnl_usr_t ) ) ;
ied - > channel [ 0 ] . connect = chnl_usr ;
g_pt61850app - > chnl_counts + + ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ҫ<EFBFBD> <D2AA> <EFBFBD> <EFBFBD>
}
else {
chnl_usr = ( chnl_usr_t * ) ied - > channel [ 0 ] . connect ;
}
chnl_usr - > chnl = & ( ied - > channel [ 0 ] ) ;
chnl_usr - > chnl_id = 0 ;
chnl_usr - > m_state = CHANNEL_DISCONNECTED ;
chnl_usr - > m_ClosedMsTime = NEXT_CONNECT_TIME * ( - 1 ) ;
g_pt61850app - > chnl_counts + + ;
// <20> <> monitorData <20> е <EFBFBD> <D0B5> <EFBFBD> <EFBFBD> <EFBFBD> д<EFBFBD> 뵽 LD_info <20> <>
int count_real_monitor = 0 ; //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ̨<EFBFBD> ˵ļ<CBB5> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
int j ;
@@ -14249,9 +14116,10 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
monitor monitor_data = update [ i ] . line [ j ] ;
//<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
count_real_monitor + + ;
// <20> <> ʼ <EFBFBD> <CABC> LD_info
// <20> <> ʼ <EFBFBD> <CABC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> LD_info<66> <6F> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 漰ָ<E6BCB0> <D6B8> <EFBFBD> IJ<EFBFBD> <C4B2> ֶ<EFBFBD> Ϊ<EFBFBD> <CEAA>
LD_info_t line_info ;
memset ( & line_info , 0 , sizeof ( line_info ) ) ;
char logical_device_seq [ 64 ] ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ϣ
strncpy ( line_info . mp_id , monitor_data . monitor_id , sizeof ( line_info . mp_id ) - 1 ) ;
@@ -14269,6 +14137,7 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
printf ( " logical_device_seq: %d \n " , line_info . cpuno ) ;
}
line_info . line_id = count_real_monitor ; // <20> <> ¼<EFBFBD> ն<EFBFBD> <D5B6> ź<EFBFBD>
printf ( " line_id: %d \n " , line_info . line_id ) ;
printf ( " mp_id: %s \n " , line_info . mp_id ) ;
printf ( " terminal_code: %s \n " , line_info . terminal_code ) ;
@@ -14276,6 +14145,7 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
printf ( " v_wiring_type: %s \n " , line_info . v_wiring_type ) ;
printf ( " monitor_status: %s \n " , line_info . monitor_status ) ;
printf ( " name: %s \n " , line_info . name ) ;
// <20> <> <EFBFBD> <EFBFBD> ʱ<EFBFBD> <CAB1> <EFBFBD> <EFBFBD>
if ( update [ i ] . timestamp [ 0 ] ! = ' \0 ' ) {
struct tm timeinfo ;
@@ -14313,13 +14183,24 @@ int update_one_terminal_ledger(terminal* update, int i,ied_t* ied,int terminal_i
ied_usr - > LD_info [ cpuno - 1 ] = line_info ; // cpunoĬ<6F> <C4AC> <EFBFBD> <EFBFBD> 1
ied_usr - > LD_info [ cpuno - 1 ] . ied = ied ;
apr_snprintf ( str , sizeof ( str ) , " PQMonitorPQM%d " , cpuno ) ;
ied_usr - > LD_info [ cpuno - 1 ] . LD_name = apr_pstrdup ( g_init_pool , str ) ;
ied_usr - > LD_info [ cpuno - 1 ] . ht_fcd = apr_hash_make ( g_init_pool ) ;
ied_usr - > LD_info [ cpuno - 1 ] . ht_full_fcda = apr_hash_make ( g_init_pool ) ;
// <20> <> <EFBFBD> <EFBFBD> û<EFBFBD> <C3BB> ֵʱ<D6B5> <CAB1> <EFBFBD> <EFBFBD> LD_name<6D> <65> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ظ<EFBFBD> <D8B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڴ<EFBFBD>
if ( ied_usr - > LD_info [ cpuno - 1 ] . LD_name = = NULL ) {
ied_usr - > LD_info [ cpuno - 1 ] . LD_name = apr_pstrdup ( g_init_pool , str );
} else { //<2F> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 滻<EFBFBD> <E6BBBB> <EFBFBD> <EFBFBD> ԭ<EFBFBD> пռ <D0BF> <D5BC> ϸ<EFBFBD> <CFB8> <EFBFBD>
apr_cpystrn ( ied_usr - > LD_info [ cpuno - 1 ] . LD_name , str , sizeof ( ied_usr - > LD_info [ cpuno - 1 ] . LD_name ) ) ;
}
// <20> <> <EFBFBD> ¹<EFBFBD> ϣ<EFBFBD> <CFA3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ظ<EFBFBD> <D8B8> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ڴ棬ԭ<E6A3AC> <D4AD> <EFBFBD> <EFBFBD> ied<65> ͷ<EFBFBD> <CDB7> <EFBFBD> <EFBFBD> ˿յĹ<D5B5> ϣ<EFBFBD> <CFA3> <EFBFBD> Ͳ<EFBFBD> <CDB2> ٷ<EFBFBD> <D9B7> 䣬<EFBFBD> <E4A3AC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ϣ<EFBFBD> <CFA3> <EFBFBD> <EFBFBD> ʱû<CAB1> <C3BB> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
if ( ied_usr - > LD_info [ cpuno - 1 ] . ht_fcd = = NULL ) {
ied_usr - > LD_info [ cpuno - 1 ] . ht_fcd = apr_hash_make ( g_init_pool ) ;
}
if ( ied_usr - > LD_info [ cpuno - 1 ] . ht_full_fcda = = NULL ) {
ied_usr - > LD_info [ cpuno - 1 ] . ht_full_fcda = apr_hash_make ( g_init_pool ) ;
}
ied_usr - > LD_info [ cpuno - 1 ] . rptcount = 0 ;
printf ( " rptcount: %d \n " , ied_usr - > LD_info [ cpuno - 1 ] . rptcount ) ;
if ( cpuno > ied - > cpucount ) {
ied - > cpucount = cpuno ;
ied - > cpucount = cpuno ; //<2F> <> <EFBFBD> <EFBFBD> ԭ<EFBFBD> е ļ<D0B5> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ļ<EFBFBD> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ࣬û<E0A3AC> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> ǵIJ<C7B5> <C4B2> <EFBFBD> <EFBFBD> Դ<EFBFBD> <D4B4> <EFBFBD> <EFBFBD> ڴ<EFBFBD> <DAB4> У <EFBFBD> <D0A3> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> ᱣ֤<E1B1A3> <D6A4> <EFBFBD> Dz<EFBFBD> <C7B2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ʵ<EFBFBD> <CAB5> <EFBFBD> Щ֮ǰ<D6AE> <C7B0> û<EFBFBD> б <EFBFBD> <D0B1> <EFBFBD> <EFBFBD> ǵļ<C7B5> <C4BC> <EFBFBD> <EFBFBD> <EFBFBD>
}
}
// ied_usr->LD_info[j] = line_info;
@@ -14411,33 +14292,47 @@ void create_ledger_log(trigger_update_xml_t* ledger_update_xml) {
log_file . close ( ) ;
std : : cout < < " Ledger log has been updated. " < < std : : endl ;
}
///////////////////////////////////////////////////////////////////////////
// <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ied_usr_t <20> ṹ<EFBFBD> <E1B9B9> <EFBFBD> <EFBFBD> <EFBFBD> ݵĺ<DDB5> <C4BA> <EFBFBD>
void clear_ied_usr ( ied_t * ie d) {
if ( ied & & ie d- > usr_ext ) { // <20> <> <EFBFBD> <EFBFBD> usr_ext <20> Ƿ<EFBFBD> Ϊ NULL
ied_usr_t * ied_usr = ( ied_usr_t * ) ied - > usr_ext ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ַ<EFBFBD> <D6B7> <EFBFBD> <EFBFBD> <EFBFBD> Ա
memset ( ied_usr - > dev_type , 0 , sizeof ( ied_usr - > dev_type ) ) ;
memse t( ied_usr - > dev_key , 0 , sizeof ( ied_usr - > dev_key ) ) ;
memset ( ied_usr - > dev_series , 0 , sizeof ( ied_usr - > dev_series ) ) ;
memset ( ied_usr - > terminal_id , 0 , sizeof ( ied_usr - > terminal_id ) ) ;
memset ( ied_usr - > org_name , 0 , sizeof ( ied_usr - > org_name ) ) ;
memset ( ied_usr - > maint_name , 0 , sizeof ( ied_usr - > maint_name ) ) ;
memset ( ied_usr - > station_name , 0 , sizeof ( ied_usr - > station_name ) ) ;
memset ( ied_usr - > tmnl_factory , 0 , sizeof ( ied_usr - > tmnl_factory ) ) ;
memset ( ied_usr - > tmnl_status , 0 , sizeof ( ied_usr - > tmnl_status ) ) ;
memset ( ied_usr - > terminal_code , 0 , sizeof ( ied_usr - > terminal_code ) ) ;
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ֵ<EFBFBD> <D6B5> <EFBFBD> ͵ij<CDB5> Ա
ied_usr - > dev_idx = 0 ;
ied_usr - > dev_flag = 0 ;
ied_usr - > cookie = NULL ;
ied_usr - > last_call_wavelist_time = 0 ;
ied_usr - > time = 0 ;
ied_usr - > update_flag = 0 ;
///////////////////////////////////////////////////////////////////////////̨<EFBFBD> <EFBFBD> <EFBFBD> ڴ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> 䲿<EFBFBD> ֹ<EFBFBD> <EFBFBD> ܴ<EFBFBD> <EFBFBD> 룺δʹ <EFBFBD> <EFBFBD>
// ɾ<EFBFBD> <EFBFBD> ָ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ӳ <EFBFBD>
void delete_sub_pool ( const char * terminal_i d) {
std : : list < std : : pair < st d: : string , apr_pool_t * > > : : iterator it ;
for ( it = pool_list . begin ( ) ; it ! = pool_list . end ( ) ; + + it ) {
if ( it - > first = = terminal_id ) {
apr_pool_destroy ( it - > second ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӳ<EFBFBD>
pool_lis t. erase ( it ) ; // <20> <> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> Ƴ<EFBFBD>
break ;
}
}
}
//<2F> Ҷ<EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> ӳ<EFBFBD>
apr_pool_t * find_sub_pool ( const char * terminal_id ) {
std : : list < std : : pair < std : : string , apr_pool_t * > > : : iterator it ;
for ( it = pool_list . begin ( ) ; it ! = pool_list . end ( ) ; + + it ) {
if ( it - > first = = terminal_id ) {
return it - > second ; // <20> ҵ<EFBFBD> <D2B5> <EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> ӳ<EFBFBD>
}
}
return NULL ; // û<> <C3BB> <EFBFBD> ҵ<EFBFBD> <D2B5> <EFBFBD> Ӧ<EFBFBD> <D3A6> <EFBFBD> ӳ<EFBFBD>
}
// <20> <> <EFBFBD> <EFBFBD> <EFBFBD> ӳز<D3B3> <D8B2> <EFBFBD> <EFBFBD> ӵ<EFBFBD> <D3B5> <EFBFBD> <EFBFBD> <EFBFBD>
apr_pool_t * create_sub_pool ( apr_pool_t * parent_pool , const char * terminal_id ) {
apr_pool_t * new_sub_pool = NULL ;
// <20> ڸ<EFBFBD> <DAB8> <EFBFBD> <EFBFBD> д<EFBFBD> <D0B4> <EFBFBD> һ <EFBFBD> <D2BB> <EFBFBD> ӳ<EFBFBD>
apr_pool_create ( & new_sub_pool , parent_pool ) ;
if ( new_sub_pool = = NULL ) {
return NULL ; // <20> <> <EFBFBD> <EFBFBD> ʧ<EFBFBD> <CAA7>
}
// <20> <> <EFBFBD> ӳغ<D3B3> <D8BA> ն<EFBFBD> ID <20> 洢<EFBFBD> <E6B4A2> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD>
pool_list . push_back ( std : : make_pair ( std : : string ( terminal_id ) , new_sub_pool ) ) ;
return new_sub_pool ;
}
/*<2A> <> װC<D7B0> ɵ<EFBFBD> <C9B5> õ<EFBFBD> ̨<EFBFBD> ˸ <EFBFBD> <CBB8> º<EFBFBD> <C2BA> <EFBFBD> */ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////