Asterisk链接MySQL数据库

本文详细介绍了如何配置Asterisk以使用MySQL数据库进行实时配置加载及CDR记录存储,包括连接设置、配置文件示例及核心代码解析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源自  http://blog.youkuaiyun.com/ln5336993/article/details/6435200

下面是以版本安装完成并测试过的小结. 
配置文件的样例我们可以在每个包安装后的目录下看到.在make samples后,我们在/etc/asterisk/configs/目录下有几乎所有配置的样例,没有也可以到相应安装包的configs目录下去找 

<1>数据库的设置

1.使asterisk能连接上数据库(asterisk-addons-1.4.7/configs/内可以看到设置的样例): 
在/etc/asterisk/res_mysql.conf内设置 
如: 
[general] 
dbhost = localhost    //数据库的地址,因为数据库一般在asterisk启动的机子上,所以就为localhost 
dbname = mya2billing    //库名 
dbuser = root        //数据库登陆的用户名 
dbpass = 123456        //数据库登陆密码 
dbport = 3306        //端口号 
dbsock = /var/lib/mysql/mysql.sock    //mysql连接的文件 
这样就连接上数据库了. 
2.上面我们连接 
在/etc/asterisk/extconfig.conf内加连接引擎: 
sipusers => mysql,mya2billing,cc_sip_buddies//两张电话注册的表 
sippeers => mysql,mya2billing,cc_sip_buddies 
也就是让sippeers连接对应 mya2billing库内的cc_sip_buddies表,在下面会说明用处. 
3.分析连接过程:(以struct ast_variable *ast_load_realtime(const char *family, ...)为例) 
(1)asterisk-1.4.23.1/include/asterisk/config.h内定义了struct ast_config_engine,在此上面typedef定义一种函数类型(typedef struct ast_variable *realtime_var_get(const char *database, const char *table, va_list ap)),而此函数类型就是在res_config_mysql.c内的函数类型,并在struct ast_config_engine内定义一个指针(realtime_var_get *realtime_func;)指向它,这样就把这函数加到engine内了 
(2)asterisk-addons-1.4.7内res_config_mysql.c进行与mysql的连接,运用的是mysql的CAPI接口函数.通过 
static struct ast_config_engine mysql_engine = { 
    .name = "mysql", 
    .load_func = config_mysql, 
    .realtime_func = realtime_mysql,//用于查找 
    .realtime_multi_func = realtime_multi_mysql,//也是用于查找 
    .update_func = update_mysql    //修改 
};结构体指向对应的函数来进行操作,而此结构体内.realtime_func就是在(1)内提到的函数指针,把此指针指到要响应的函数。 
(3)使用这个接口函数 
在config.c内ast_load_realtime()看到如何找到这个接口并运用的 
struct ast_variable *ast_load_realtime(const char *family, ...) 

    ............................    
    struct ast_config_engine *eng; 
    va_list ap; 
    va_start(ap, family); 
    eng = find_engine(family, db, sizeof(db), table, sizeof(table));//处理2中的连接引擎,也就是写入db,table 
    if (eng && eng->realtime_func) 
        res = eng->realtime_func(db, table, ap);//在这里找到并执行此函数 
    va_end(ap); 
    ................ 

(4)函数肯定需要声明才能用,在config.h文件中声明struct ast_variable *ast_load_realtime(const char *family, ...),只要包含了config.h就能使用ast_load_realtime()函数了。自己写一个也是这个流程。写完后需要重新 make,makeinstall才会生效. 
(5)运用这个函数只要在/etc/asterisk/extconfig.conf内加入需要连接的引擎,就可以运用了 
//student => mysql,student,stuscore    //mysql数据库类型,student数据库,stuscore此库内的表 
ast_load_realtime("数据库引擎", "字段名", "与字段名对应的值", NULL); 
//而电话登陆注册时的连接则加 
同样我们对数据库的操作还有Cdr:与其类似的试着做做. 
在/etc/asterisk/cdr_mysql.conf内配置如下:(与上面mysql意思一样,如果在此目录下没有,那我们是不是就可以在相应的 configs文件内找到呢,是的) 
[global] 
hostname=localhost 
dbname=ipbx 
table=cdr 
password=123456 
port=3306 
sock=/var/lib/mysql/mysql.sock 
userfield=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值