asterisk的realtime架构 - 数据库sip用户

发布: 2011-08-20 18:35

asterisk自1.2开始就支持realtime架构,此架构支持把asterisk的配置信息或者sip用户信息存储在关系数据库中,在使用时实时从数据库读取,对于asterisk的配置管理非常有帮助。

今天测试在数据库中存储sip用户验证信息,(用户名/密码),在sip客户注册用户时,asterisk会到数据库中检索数据认证用户是否是合法用户,并把用户的注册状态信息更新到数据库表中。

asterisk默认开启realtime功能,没有开关关闭这功能,如需要停止此服务,在在modules.conf中禁止加载pbx_realtime.so, app_realtime.so,res_realtime.so模块。

asterisk支持的realtime数据库引擎包括odbc,mysql,postgresql,sqlite,ldap。本次测试使用postgresql引擎,涉及的配置文件包括,sip.conf, extconfig.conf, res_pgsql.conf三个文件。

首先,在res_pgsql.conf中正确设置postgresql数据库登陆信息,
host=
port=
user=
passwd=
dbname=

设置完成,重启动asterisk,可看到日志中显示连接到了postgresql数据库。

2. 设置extconfig.conf文件

设置不同功能的数据库表信息,实际测试了sippeers和sipregs两个表,这两个表分别存储用户认证数据(用户名/密码,类型)和用户注册状态信息(何时注册,注册地址,客户端)

extconfig.conf:
; syntax family => engine,dbname,tablename
sippeers => pgsql,asterisk,sippeers
sipregs => pgsql,asterisk,sipregs

这两个表可包含许多字段,下面的表结构是一种最简单的结构:

sippeers表结构,
CREATE TABLE sippeers
(
id bigserial NOT NULL,
"name" character varying(100),
secret character varying(100),
host character varying(20),
"type" character varying(10)
);
INSERT INTO sippeers (name,secret,host,type) VALUES ('abc','pw123','dynamic','friend');
该表中存储的密码是明文密码。

CREATE TABLE sipregs
(
"name" character varying(100),
fullcontact character varying(500),
ipaddr character varying(100),
port integer,
regseconds bigint,
username character varying(100),
regserver character varying(100),
lastms bigint,
defaultuser character varying(100),
useragent character varying(500)
);
该表中比较重要的字段,name,lastms(peer端连接ping值,-1表示当前不在线),regseconds(最近一次register时间)

需要注意,sipregs表不能自动添加记录,asterisk默认情况只能update这个表。所以,需要事先在sippeers表中有新数据的时候,根据name字段复制到sipregs表中,也可以修改asterisk的res_config_pgsql模块,在更新时如果找不到记录,动态添加一条相应的记录。

sipregs中的主键是name字段。



原文: http://qtchina.tk/?q=node/592

Powered by zexport