asterisk extconfig.conf文件解析

1. int read_config_maps(void), 定义在main/config.c,被main函数调用,下面开始分析read_config_maps

 

    struct ast_config *config, *configtmp;

     新建一个配置结构体

     configtmp = ast_config_new();

    从extconfig_conf即extconfig.conf得到配置信息并存储在config 中。ast_config_internal_load执行后,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

    经过对v->name和v->value进行打印输出,下面for循环执行两次,其中,name保存=>前面的值,value保存=>后面的字符串

    for (v = ast_variable_browse(config, "settings"); v; v = v->next)

    然后将value的值分别解析出来,放到driver(mysql), database(general), table(extensions)后,最后通过下面这个函数追加到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中

    这个函数根据传入的filename(配置文件名称),来构建一个ast_config结构体

    static struct ast_config_engine text_file_engine = {
         .name = "text",
         .load_func = config_text_file_load,
     };

    得到默认的文件加载器

       struct ast_config_engine *loader = &text_file_engine;

     此时刻,config_engine_list还为空因此下面if语句不执行

    if (!ast_test_flag(&flags, CONFIG_FLAG_NOREALTIME) && config_engine_list)

    调用text_file_engine的load_func来解析extconfig.conf文件并构造ast_config结构体

    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

    这个函数将extconfig.conf中的每一条数据,构造ast_config_map结构体,并加入到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执行完成后,config_maps里面有两项,

      name = extensions  dirver = mysql   database =general    table = extensions

      name = sip.conf       dirver =mysql   database = general    table = sip_config2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值