51 #define UC_CONF_PARAM_MASTER_SHM_ID "MASTER_SHM_ID" 52 #define UC_CONF_PARAM_ADMIN_LOG_FILE "ADMIN_LOG_FILE" 54 #define UC_CONF_PARAM_BROKER_NAME "%" 55 #define UC_CONF_PARAM_SERVICE "SERVICE" 56 #define UC_CONF_PARAM_APPL_SERVER "APPL_SERVER" 57 #define UC_CONF_PARAM_BROKER_PORT "BROKER_PORT" 58 #define UC_CONF_PARAM_MIN_NUM_APPL_SERVER "MIN_NUM_APPL_SERVER" 59 #define UC_CONF_PARAM_MAX_NUM_APPL_SERVER "MAX_NUM_APPL_SERVER" 60 #define UC_CONF_PARAM_AUTO_ADD_APPL_SERVER "AUTO_ADD_APPL_SERVER" 61 #define UC_CONF_PARAM_APPL_SERVER_SHM_ID "APPL_SERVER_SHM_ID" 62 #define UC_CONF_PARAM_APPL_SERVER_MAX_SIZE "APPL_SERVER_MAX_SIZE" 63 #define UC_CONF_PARAM_APPL_SERVER_HARD_LIMIT "APPL_SERVER_MAX_SIZE_HARD_LIMIT" 64 #define UC_CONF_PARAM_LOG_DIR "LOG_DIR" 65 #define UC_CONF_PARAM_SLOW_LOG_DIR "SLOW_LOG_DIR" 66 #define UC_CONF_PARAM_ERROR_LOG_DIR "ERROR_LOG_DIR" 67 #define UC_CONF_PARAM_LOG_BACKUP "LOG_BACKUP" 68 #define UC_CONF_PARAM_SOURCE_ENV "SOURCE_ENV" 69 #define UC_CONF_PARAM_ACCESS_LOG "ACCESS_LOG" 70 #define UC_CONF_PARAM_SQL_LOG "SQL_LOG" 71 #define UC_CONF_PARAM_SLOW_LOG "SLOW_LOG" 72 #define UC_CONF_PARAM_LONG_QUERY_TIME "LONG_QUERY_TIME" 73 #define UC_CONF_PARAM_LONG_TRANSACTION_TIME "LONG_TRANSACTION_TIME" 74 #define UC_CONF_PARAM_TIME_TO_KILL "TIME_TO_KILL" 75 #define UC_CONF_PARAM_SESSION_TIMEOUT "SESSION_TIMEOUT" 76 #define UC_CONF_PARAM_JOB_QUEUE_SIZE "JOB_QUEUE_SIZE" 77 #define UC_CONF_PARAM_ACCESS_LIST "ACCESS_LIST" 78 #define UC_CONF_PARAM_SQL_LOG2 "SQL_LOG2" 79 #define UC_CONF_PARAM_MAX_STRING_LENGTH "MAX_STRING_LENGTH" 80 #define UC_CONF_PARAM_STRIPPED_COLUMN_NAME "STRIPPED_COLUMN_NAME" 81 #define UC_CONF_PARAM_KEEP_CONNECTION "KEEP_CONNECTION" 82 #define UC_CONF_PARAM_SQL_LOG_MAX_SIZE "SQL_LOG_MAX_SIZE" 84 #define MAX_NUM_CONF 35 86 #define SET_CONF_ITEM(CONF_ITEM, IDX, NAME, VALUE) \ 88 (CONF_ITEM)[IDX].name = NAME; \ 89 (CONF_ITEM)[IDX].value = VALUE; \ 93 #define SET_CONF_ITEM_ONOFF(CONF_ITEM, IDX, NAME, VALUE) \ 96 SET_CONF_ITEM(CONF_ITEM, IDX, NAME, strdup("ON")); \ 98 SET_CONF_ITEM(CONF_ITEM, IDX, NAME, strdup("OFF")); \ 101 #define SET_CONF_ITEM_SQL_LOG_MODE(CONF_ITEM, IDX, NAME, VALUE) \ 103 const char *_macro_tmp_ptr; \ 104 if ((VALUE) & SQL_LOG_MODE_ALL) \ 105 _macro_tmp_ptr = "ALL"; \ 106 else if ((VALUE) & SQL_LOG_MODE_ERROR) \ 107 _macro_tmp_ptr = "ERROR"; \ 109 _macro_tmp_ptr = "NONE"; \ 110 SET_CONF_ITEM(CONF_ITEM, IDX, NAME, strdup(_macro_tmp_ptr)); \ 113 #define SET_CONF_ITEM_KEEP_CON(CONF_ITEM, IDX, NAME, VALUE) \ 115 const char *_macro_tmp_ptr; \ 116 if ((VALUE) == KEEP_CON_AUTO) \ 117 _macro_tmp_ptr = "AUTO"; \ 119 _macro_tmp_ptr = "ON"; \ 120 SET_CONF_ITEM(CONF_ITEM, IDX, NAME, strdup(_macro_tmp_ptr)); \ 125 #define SET_CONF_ITEM_INT(CONF_ITEM, IDX, NAME, VALUE, FMT) \ 127 char _macro_tmp_buf[32]; \ 128 sprintf(_macro_tmp_buf, FMT, (VALUE)); \ 129 SET_CONF_ITEM(CONF_ITEM, IDX, NAME, strdup(_macro_tmp_buf)); \ 132 #define SET_CONF_ITEM_STR(CONF_ITEM, IDX, NAME, VALUE) \ 134 SET_CONF_ITEM(CONF_ITEM, IDX, NAME, strdup(VALUE)); \ 137 #define SET_FLAG(ONOFF) ((ONOFF) == ON ? FLAG_ON : FLAG_OFF) 139 #define CP_ADMIN_ERR_MSG(BUF) sprintf(BUF, "Error: %s", admin_err_msg) 143 char *err_msg,
char admin_flag,
bool * acl_flag,
char *acl_file);
153 static int uc_changer_internal (
const char *br_name,
const char *name,
const char *value,
int as_number,
char *err_msg);
155 #define CHECK_SHARED_MEMORY(p_shm, err_msg) \ 158 if (err_msg) strcpy(err_msg, "Shared memory is not opened."); \ 167 int num_broker, master_shm_id;
171 if (
admin_common (br_conf, &num_broker, &master_shm_id, admin_log_file, err_msg, 0,
NULL,
NULL) < 0)
176 if (!ret_val && err_msg)
178 strcpy (err_msg, strerror (errno));
198 strcpy (err_msg,
"Invalid name buffer.");
203 strncpy (name, ((
T_SHM_BROKER *) shm_br)->br_info[br_index].name, buffer_size);
216 strcpy (err_msg,
"Shared memory is not opened.");
223 if (!ret_val && err_msg)
225 strcpy (err_msg, strerror (errno));
251 for (i = 0; i < array_size; i++)
285 for (i = 0; i < array_size; i++)
300 for (i = 0; i < array_size; i++)
324 int num_broker, master_shm_id;
329 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 1, &acl_flag, acl_file) < 0)
334 if (
admin_start_cmd (br_info, num_broker, master_shm_id, acl_flag, acl_file) < 0)
349 int num_broker, master_shm_id;
352 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 1,
NULL,
NULL) < 0)
369 uc_add (
const char *br_name,
char *err_msg)
372 int num_broker, master_shm_id;
376 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 1,
NULL,
NULL) < 0)
387 sprintf (msg_buf,
"add %s", br_name);
394 uc_restart (
const char *br_name,
int as_index,
char *err_msg)
397 int num_broker, master_shm_id;
401 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 1,
NULL,
NULL) < 0)
412 sprintf (msg_buf,
"restart %s %d", br_name, as_index);
422 int num_broker, master_shm_id;
423 char admin_log_file[256];
426 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 1,
NULL,
NULL) < 0)
437 sprintf (msg_buf,
"drop %s", br_name);
444 uc_on (
const char *br_name,
char *err_msg)
447 int num_broker, master_shm_id;
451 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 1,
NULL,
NULL) < 0)
462 sprintf (msg_buf,
"%s on", br_name);
469 uc_off (
const char *br_name,
char *err_msg)
472 int num_broker, master_shm_id;
476 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 1,
NULL,
NULL) < 0)
487 sprintf (msg_buf,
"%s off", br_name);
497 int num_broker, master_shm_id;
504 char client_ip_str[16];
506 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 0,
NULL,
NULL) < 0)
514 strcpy (err_msg,
"Error: shared memory open error");
520 if (strcasecmp (br_name, shm_br->
br_info[i].
name) == 0)
529 sprintf (err_msg,
"Error: cannot find broker [%s]", br_name);
533 if (shm_appl ==
NULL)
535 strcpy (err_msg,
"Error: shared memory open error");
543 strcpy (err_msg, strerror (errno));
546 memset (as_info, 0,
sizeof (
T_AS_INFO) * num_as);
560 memset (&proc_info, 0,
sizeof (
T_PSINFO));
567 if (shm_appl->use_pdh_flag ==
TRUE)
571 pct_cpu = shm_appl->
as_info[
i].pdh_pct_cpu;
574 as_info[
i].
pcpu = pct_cpu;
633 strncpy (as_info[i].clt_ip_addr, client_ip_str,
sizeof (as_info[i].clt_ip_addr) - 1);
635 strncpy (as_info[i].database_host, shm_appl->
as_info[i].
database_host, sizeof (as_info[i].database_host) - 1);
638 strncpy (as_info[i].clt_appl_name, shm_appl->
as_info[i].
clt_appl_name, sizeof (as_info[i].clt_appl_name) - 1);
641 strncpy (as_info[i].log_msg, shm_appl->
as_info[i].
log_msg, sizeof (as_info[i].log_msg) - 1);
686 int num_broker, master_shm_id;
692 if (
admin_common (br_conf, &num_broker, &master_shm_id, admin_log_file, err_msg, 0,
NULL,
NULL) < 0)
700 strcpy (err_msg,
"ERROR: shared memory open error");
713 memset (br_info, 0,
sizeof (
T_BR_INFO) * num_br);
714 for (i = 0; i < num_br; i++)
716 strncpy (br_info[i].name, shm_br->
br_info[i].
name, sizeof (br_info[i].name) - 1);
721 #if !defined(WINDOWS) 725 INT64 num_tran, num_query, num_long_query, num_long_tran, num_error_query, num_interrupts;
730 if (shm_appl ==
NULL)
732 strcpy (err_msg,
"ERROR: shared memory open error");
748 memset (&proc_info, 0,
sizeof (proc_info));
792 p = strrchr (br_info[i].log_dir,
'/');
823 *ret_br_info = br_info;
843 int num_broker, master_shm_id;
846 memset (unicas_conf, 0,
sizeof (
T_UC_CONF));
848 if (
admin_common (br_conf, &num_broker, &master_shm_id, admin_log_file, err_msg, 0,
NULL,
NULL) < 0)
853 if (
conf_copy_header (unicas_conf, master_shm_id, admin_log_file, err_msg) < 0)
864 *ret_mst_shmid = master_shm_id;
883 memset (unicas_conf, 0,
sizeof (
T_UC_CONF));
896 strcpy (err_msg, strerror (errno));
903 if (conf_item ==
NULL)
905 strcpy (err_msg, strerror (errno));
949 br_conf = &(unicas_conf->
br_conf[
i]);
961 for (i = 0; i < br_conf->
num; i++)
963 if (strcasecmp (name, br_conf->
item[i].
name) == 0)
977 uc_changer (
const char *br_name,
const char *name,
const char *value,
char *err_msg)
983 uc_cas_changer (
const char *br_name,
const char *name,
const char *value,
int as_number,
char *err_msg)
992 int num_broker, master_shm_id;
1002 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 0,
NULL,
NULL) < 0)
1025 conf_item = br_conf->
item;
1028 for (i = 0; i < num; i++)
1032 if (conf_item[i].value ==
NULL)
1036 return conf_item[
i].
value;
1047 if (conf_item ==
NULL)
1051 for (i = 0; i < num; i++)
1067 strcpy (err_msg, strerror (errno));
1073 for (i = 0; i < num_br; i++)
1077 if (conf_item ==
NULL)
1079 strcpy (err_msg, strerror (errno));
1134 if (conf_item ==
NULL)
1136 strcpy (err_msg, strerror (errno));
1150 char admin_flag,
bool * acl_flag,
char *acl_file)
1152 if (
broker_config_read (
NULL, br_info, num_broker, master_shm_id, admin_log_file, admin_flag, acl_flag, acl_file,
1165 #if defined(WINDOWS) 1168 strcpy (err_msg,
"Error: WSAinit");
1174 if (admin_get_host_ip ())
1189 int num_job = job_q[0].
id;
1195 if (job_info ==
NULL)
1199 memset (job_info, 0,
sizeof (
T_JOB_INFO) * num_job);
1201 for (i = 0; i < num_job; i++)
1208 job_info[
i].
id = item.
id;
1210 memcpy (job_info[i].ip, item.
ip_addr, 4);
1212 strncpy (job_info[i].script, item.
script, sizeof (job_info[i].script) - 1);
1213 strncpy (job_info[i].prgname, item.
prg_name, sizeof (job_info[i].prgname) - 1);
1216 *ret_job_info = job_info;
1262 if (old_as_type == new_as_type)
1266 item = br_conf->
item;
1272 num = br_conf->
num - 1;
1281 for (i = 0; i < num_item; i++)
1283 if (strcasecmp (item[i].name, name) == 0)
1301 fp = fopen (log_file,
"a");
1305 memset (&ct, 0x0,
sizeof (
struct tm));
1306 localtime_r (&ts, &ct);
1307 fprintf (fp,
"%d/%02d/%02d %02d:%02d:%02d %s\n", ct.tm_year + 1900, ct.tm_mon + 1, ct.tm_mday, ct.tm_hour,
1308 ct.tm_min, ct.tm_sec, msg);
1317 int num_broker, master_shm_id;
1320 if (
admin_common (br_info, &num_broker, &master_shm_id, admin_log_file, err_msg, 0,
NULL,
NULL) < 0)
1326 strcpy (err_msg,
"ERROR : changer");
#define UC_CONF_PARAM_APPL_SERVER
void ut_cd_work_dir(void)
int long_transaction_time
#define APPL_SERVER_CAS_TYPE_NAME
INT64 num_long_transactions
char database_name[SRV_CON_DBNAME_SIZE]
static int get_as_type(const char *type_str)
DLL_EXPORT int uc_add(const char *br_name, char *err_msg)
#define UC_CONF_PARAM_LOG_DIR
int max_heap_delete(T_MAX_HEAP_NODE *max_heap, T_MAX_HEAP_NODE *ret)
#define UC_CONF_PARAM_MAX_NUM_APPL_SERVER
DLL_EXPORT int uc_unicas_conf(T_UC_CONF *unicas_conf, int *ret_mst_shmid, char *err_msg)
#define DEFAULT_LONG_QUERY_TIME
T_MAX_HEAP_NODE job_queue[JOB_QUEUE_MAX_SIZE+1]
#define UC_CONF_PARAM_LONG_TRANSACTION_TIME
DLL_EXPORT int uc_get_as_num_with_opened_shm(void *shm_br, int br_index, char *err_msg)
char stripped_column_name
int admin_start_cmd(T_BROKER_INFO *br_info, int br_num, int master_shm_id, bool acl_flag, char *acl_file)
#define UC_CONF_PARAM_MAX_STRING_LENGTH
DLL_EXPORT void uc_shm_detach(void *p)
char * ut_get_ipv4_string(char *ip_str, int len, const unsigned char *ip_addr)
unsigned char cas_clt_ip[4]
#define JOB_QUEUE_MAX_SIZE
#define SET_CONF_ITEM_INT(CONF_ITEM, IDX, NAME, VALUE, FMT)
DLL_EXPORT int uc_cas_changer(const char *br_name, const char *name, const char *value, int as_number, char *err_msg)
int admin_conf_change(int master_shm_id, const char *br_name, const char *conf_name, const char *conf_value, int as_number)
DLL_EXPORT int uc_on(const char *br_name, char *err_msg)
#define DEFAULT_TIME_TO_KILL
char log_msg[SHM_LOG_MSG_SIZE]
#define UC_CONF_PARAM_ACCESS_LIST
#define UC_CONF_PARAM_MIN_NUM_APPL_SERVER
int admin_add_cmd(int master_shm_id, const char *broker)
#define UC_CONF_PARAM_LONG_QUERY_TIME
DLL_EXPORT int uc_changer(const char *br_name, const char *name, const char *value, char *err_msg)
#define APPL_SERVER_CAS_MYSQL_TYPE_NAME
#define UTS_STATUS_RESTART
DLL_EXPORT int uc_get_br_name_with_opened_shm(void *shm_br, int br_index, char *name, int buffer_size, char *err_msg)
INT64 num_queries_processed
#define UC_CONF_PARAM_MASTER_SHM_ID
#define SET_CONF_ITEM_SQL_LOG_MODE(CONF_ITEM, IDX, NAME, VALUE)
int appl_server_hard_limit
DLL_EXPORT int uc_start(char *err_msg)
DLL_EXPORT int uc_drop(const char *br_name, char *err_msg)
DLL_EXPORT int uc_del_cas_log(const char *br_name, int asid, char *err_msg)
#define UC_CONF_PARAM_SLOW_LOG
T_UC_CONF_ITEM * header_conf
DLL_EXPORT void uc_unicas_conf_free(T_UC_CONF *unicas_conf)
DLL_EXPORT int uc_br_info(T_BR_INFO **ret_br_info, char *err_msg)
#define APPL_SERVER_CAS_ORACLE_TYPE_NAME
#define UC_CONF_PARAM_JOB_QUEUE_SIZE
#define APPL_SERVER_CAS_MYSQL
#define UC_CONF_PARAM_APPL_SERVER_HARD_LIMIT
#define APPL_SERVER_CAS_ORACLE
static void reset_conf_value(int num_item, T_UC_CONF_ITEM *item, const char *name)
int broker_config_read(const char *conf_file, T_BROKER_INFO *br_info, int *num_broker, int *br_shm_id, char *admin_log_file, char admin_flag, bool *acl_flag, char *acl_file, char *admin_err_msg)
DLL_EXPORT int uc_as_info(const char *br_name, T_AS_INFO **ret_as_info, T_JOB_INFO **job_info, int *num_job, char *err_msg)
#define UC_CONF_PARAM_SQL_LOG2
#define CP_ADMIN_ERR_MSG(BUF)
#define UC_CONF_PARAM_ACCESS_LOG
#define UC_CONF_PARAM_LOG_BACKUP
#define UC_CONF_PARAM_AUTO_ADD_APPL_SERVER
static int conf_copy_header(T_UC_CONF *unicas_conf, int master_shm_id, char *admin_log_file, char *err_msg)
static const char * get_as_type_str(char as_type)
static int uc_changer_internal(const char *br_name, const char *name, const char *value, int as_number, char *err_msg)
void uw_shm_detach(void *p)
char clt_appl_name[APPL_NAME_LENGTH]
#define UC_CONF_PARAM_SQL_LOG_MAX_SIZE
DLL_EXPORT int uc_get_active_session_with_opened_shm(void *shm_p, char *err_msg)
#define APPL_SERVER_CAS_MYSQL51_TYPE_NAME
DLL_EXPORT int uc_stop(char *err_msg)
DLL_EXPORT const char * uc_version()
#define UC_CONF_PARAM_ADMIN_LOG_FILE
static void change_conf_as_type(T_BR_CONF *br_conf, int old_as_type, int new_as_type)
static char * get_broker_name(T_BR_CONF *br_conf)
DLL_EXPORT int uc_get_as_reqs_received_with_opened_shm(void *shm_as, long long array[], int array_size, char *err_msg)
#define DEFAULT_SQL_LOG_MAX_SIZE
char acl_file[CONF_LOG_FILE_LEN]
#define UC_CONF_PARAM_SESSION_TIMEOUT
#define DEFAULT_SERVER_MAX_SIZE
char auto_add_appl_server
char clt_req_path_info[APPL_NAME_LENGTH]
#define UC_CONF_PARAM_SQL_LOG
DLL_EXPORT void * uc_broker_shm_open(char *err_msg)
char script[PRE_SEND_SCRIPT_SIZE]
#define SET_CONF_ITEM_ONOFF(CONF_ITEM, IDX, NAME, VALUE)
INT64 num_transactions_processed
#define DEFAULT_LONG_TRANSACTION_TIME
static T_SHM_APPL_SERVER * shm_appl
DLL_EXPORT int uc_get_br_num_with_opened_shm(void *shm_br, char *err_msg)
DLL_EXPORT void * uc_as_shm_open(void *shm_br, int br_index, char *err_msg)
INT64 num_requests_received
char access_log_file[CONF_LOG_FILE_LEN]
#define UC_CONF_PARAM_SOURCE_ENV
char database_host[CUB_MAXHOSTNAMELEN]
DLL_EXPORT void uc_change_config(T_UC_CONF *unicas_conf, const char *br_name, const char *name, const char *value)
static T_SHM_BROKER * shm_br
char prg_name[PRE_SEND_PRG_NAME_SIZE]
DLL_EXPORT int uc_off(const char *br_name, char *err_msg)
static int copy_job_info(T_JOB_INFO **job_info, T_MAX_HEAP_NODE *job_q)
static char database_name[MAX_HA_DBINFO_LENGTH]
#define IS_APPL_SERVER_TYPE_CAS(x)
#define UC_CONF_PARAM_KEEP_CONNECTION
DLL_EXPORT int uc_get_as_query_processed_with_opened_shm(void *shm_as, long long array[], int array_size, char *err_msg)
INT64 num_requests_received
static int admin_common(T_BROKER_INFO *br_info, int *num_broker, int *master_shm_id, char *admin_log_file, char *err_msg, char admin_flag, bool *acl_flag, char *acl_file)
int long_transaction_time
#define SET_CONF_ITEM_STR(CONF_ITEM, IDX, NAME, VALUE)
INT64 num_queries_processed
#define UC_CONF_PARAM_ERROR_LOG_DIR
INT64 num_long_transactions
#define UC_CONF_PARAM_TIME_TO_KILL
char name[BROKER_NAME_LEN]
INT64 num_transactions_processed
#define UC_CONF_PARAM_STRIPPED_COLUMN_NAME
#define UC_CONF_PARAM_SLOW_LOG_DIR
int get_psinfo(int pid, T_PSINFO *ps)
T_APPL_SERVER_INFO * as_info
int admin_on_cmd(int master_shm_id, const char *broker_name)
int admin_del_cas_log(int master_shmid, const char *broker, int asid)
#define UC_CONF_PARAM_BROKER_NAME
DLL_EXPORT int uc_get_as_tran_processed_with_opened_shm(void *shm_as, long long array[], int array_size, char *err_msg)
T_APPL_SERVER_INFO as_info[APPL_SERVER_NUM_LIMIT]
DLL_EXPORT int uc_conf_broker_add(T_UC_CONF *unicas_conf, const char *br_name, char *err_msg)
int admin_stop_cmd(int master_shm_id)
char * strdup(const char *str)
#define APPL_SERVER_CAS_MYSQL51
static void conf_item_free(T_UC_CONF_ITEM *conf_item, int num)
static int conf_copy_broker(T_UC_CONF *unicas_conf, T_BROKER_INFO *br_conf, int num_br, char *err_msg)
char source_env[CONF_LOG_FILE_LEN]
#define CHECK_SHARED_MEMORY(p_shm, err_msg)
void * uw_shm_open(int shm_key, int which_shm, T_SHM_MODE shm_mode)
#define UC_CONF_PARAM_APPL_SERVER_SHM_ID
DLL_EXPORT int uc_restart(const char *br_name, int as_index, char *err_msg)
int admin_drop_cmd(int master_shm_id, const char *broker)
#define UC_CONF_PARAM_SERVICE
#define UC_CONF_PARAM_APPL_SERVER_MAX_SIZE
static void admin_log_write(const char *log_file, const char *msg)
int admin_restart_cmd(int master_shm_id, const char *broker, int as_index)
#define UC_CONF_PARAM_BROKER_PORT
int admin_off_cmd(int master_shm_id, const char *broker_name)
DLL_EXPORT void uc_info_free(void *info)
#define SET_CONF_ITEM_KEEP_CON(CONF_ITEM, IDX, NAME, VALUE)