int init_mi_core(void) { if (cfg_register_ctx(&_kex_cfg_ctx, NULL)) { LM_ERR("failed to register cfg context\n"); return -1; } if (register_mi_mod( "core", mi_core_cmds)<0) { LM_ERR("unable to register core MI cmds\n"); return -1; } if(init_mi_uptime()<0) { return -1; } return 0; }
/* module initialization function */ static int mod_init(void) { static str default_s = STR_STATIC_INIT("<default>"); db_cmd_t *cmd; db_res_t *res; db_rec_t *rec; db_fld_t cols[7]; DBG(MODULE_NAME": mod_init: initializing\n"); /* get default values from translation table */ if (connect_db() < 0) return E_CFG; DBG(MODULE_NAME": mod_init: getting default values from translation table\n"); if (exec_transl(&default_s, &cmd, &res) < 0) return E_CFG; rec = db_first(res); if (rec) { CSTRDUP(def_cfg_table, rec->fld[0]); CSTRDUP(def_cfg_table_group_name_field, rec->fld[1]); CSTRDUP(def_cfg_table_name_field, rec->fld[2]); CSTRDUP(def_cfg_table_value_field, rec->fld[3]); } // db_rec_free(rec); // ---> causes next db_cmd is aborted !!! db_res_free(res); db_cmd_free(cmd); DBG(MODULE_NAME": mod_init: default values: table='%s', group_name_field='%s', name_field='%s', value_field='%s'\n", def_cfg_table, def_cfg_table_group_name_field, def_cfg_table_name_field, def_cfg_table_value_field); /* get custom parameters from database */ DBG(MODULE_NAME": mod_init: getting custom parameters from '%s'\n", custom_tbl); memset(cols, 0, sizeof(cols)); cols[0].name = custom_tbl_group_name_fld; cols[0].type = DB_CSTR; cols[1].name = custom_tbl_name_fld; cols[1].type = DB_CSTR; cols[2].name = custom_tbl_value_type_fld; cols[2].type = DB_CSTR; cols[3].name = custom_tbl_min_value_fld; cols[3].type = DB_INT; cols[4].name = custom_tbl_max_value_fld; cols[4].type = DB_INT; cols[5].name = custom_tbl_decription_fld; cols[5].type = DB_CSTR; cmd = db_cmd(DB_GET, db_cntx, custom_tbl, cols, NULL, NULL); if (!cmd) { ERR(MODULE_NAME": Error preparing query '%s'\n", custom_tbl); return E_CFG; } if (db_exec(&res, cmd) < 0) { ERR(MODULE_NAME": Error executing query '%s'\n", custom_tbl); db_cmd_free(cmd); return E_CFG; } rec = db_first(res); while (rec) { DBG(MODULE_NAME": custom parameter '%s.%s' type:%s\n", rec->fld[0].v.cstr, rec->fld[1].v.cstr, rec->fld[2].v.cstr); if (((rec->fld[0].flags & DB_NULL) || strlen(rec->fld[0].v.cstr) == 0) || ((rec->fld[1].flags & DB_NULL) || strlen(rec->fld[1].v.cstr) == 0) || ((rec->fld[2].flags & DB_NULL) || strlen(rec->fld[2].v.cstr) == 0)) { ERR(MODULE_NAME": empty group_name,name or type value in table '%s'\n", custom_tbl); return E_CFG; } switch (rec->fld[2].v.cstr[0]) { case 'i': case 'I': if (cfg_declare_int(rec->fld[0].v.cstr, rec->fld[1].v.cstr, 0, rec->fld[3].v.int4, rec->fld[4].v.int4, rec->fld[5].v.cstr) < 0) { ERR(MODULE_NAME": Error declaring cfg int '%s.%s'\n", rec->fld[0].v.cstr, rec->fld[1].v.cstr); return E_CFG; } break; case 's': case 'S': if (cfg_declare_str(rec->fld[0].v.cstr, rec->fld[1].v.cstr, "", rec->fld[5].v.cstr) < 0) { ERR(MODULE_NAME": Error declaring cfg str '%s.%s'\n", rec->fld[0].v.cstr, rec->fld[1].v.cstr); return E_CFG; } break; default: ERR(MODULE_NAME": bad custom value type '%s'\n", rec->fld[2].v.cstr); return E_CFG; } rec = db_next(res); } db_res_free(res); db_cmd_free(cmd); /* register into config framework */ DBG(MODULE_NAME": mod_init: registering cfg callback\n"); if (cfg_register_ctx(&cfg_ctx, on_declare) < 0) { ERR(MODULE_NAME": failed to register cfg context\n"); return -1; } return 0; }