源自 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