asterisk extconfig.conf文件解析
1. int read_config_maps(void), 定義在main/config.c,被main函數(shù)調(diào)用,下面開始分析read_config_maps
?
??? struct ast_config *config, *configtmp;
???? 新建一個配置結(jié)構(gòu)體
???? configtmp = ast_config_new();
??? 從extconfig_conf即extconfig.conf得到配置信息并存儲在config 中。ast_config_internal_load執(zhí)行后,extconfig.conf
?? 文件中的信息都保存在了config中。
??? config = ast_config_internal_load(extconfig_conf, configtmp, flags, "", "extconfig");
??? 然后依次分析config中的settings配置項的每一條信息,v為struct ast_variable*,因為我的配置文件中的setting下面有
??? 如下兩行,
??? extensions => mysql,general,extensions
??? sip.conf => mysql,general,sip_conf2
??? 經(jīng)過對v->name和v->value進行打印輸出,下面for循環(huán)執(zhí)行兩次,其中,name保存=>前面的值,value保存=>后面的字符串
??? for (v = ast_variable_browse(config, "settings"); v; v = v->next)
??? 然后將value的值分別解析出來,放到driver(mysql), database(general), table(extensions)后,最后通過下面這個函數(shù)追加到config_maps里
????????? append_mapping(v->name, driver, database, table, pri);
2. struct ast_config *ast_config_internal_load(const char *filename, struct ast_config *cfg, struct ast_flags flags, const char *suggested_include_file, const char *who_asked)
??? 定義在config.c中
??? 這個函數(shù)根據(jù)傳入的filename(配置文件名稱),來構(gòu)建一個ast_config結(jié)構(gòu)體
??? static struct ast_config_engine text_file_engine = {
?? ????? .name = "text",
?? ????? .load_func = config_text_file_load,
???? };
??? 得到默認(rèn)的文件加載器
?????? struct ast_config_engine *loader = &text_file_engine;
???? 此時刻,config_engine_list還為空,因此下面if語句不執(zhí)行
??? if (!ast_test_flag(&flags, CONFIG_FLAG_NOREALTIME) && config_engine_list)
??? 調(diào)用text_file_engine的load_func來解析extconfig.conf文件并構(gòu)造ast_config結(jié)構(gòu)體
??? result = loader->load_func(db, table, filename, cfg, flags, suggested_include_file, who_asked);
3. static int append_mapping(const char *name, const char *driver, const char *database, const char *table, int priority)
??? 定義在config.c
??? 這個函數(shù)將extconfig.conf中的每一條數(shù)據(jù),構(gòu)造ast_config_map結(jié)構(gòu)體,并加入到config_maps鏈表中
??? ast_config_map定義如下:
??? static struct ast_config_map {
???????? struct ast_config_map *next;
?? ????? char *name;
?? ????? char *driver;
?? ????? char *database;
?? ????? char *table;
?? ????? char stuff[0];
??? } *config_maps = NULL;
???? 在read_config_maps執(zhí)行完成后,config_maps里面有兩項,
????? name = extensions??dirver = mysql?? database =general??? table = extensions
????? name = sip.conf?????? dirver =mysql?? database = general??? table = sip_config2
總結(jié)
以上是生活随笔為你收集整理的asterisk extconfig.conf文件解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 狂飙7200Mbps!华为最强单体路由A
- 下一篇: QString与中文问题