日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

asterisk extconfig.conf文件解析

發(fā)布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asterisk extconfig.conf文件解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。