免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6056 | 回复: 1
打印 上一主题 下一主题

转 利用Asterisk实现SIP CallFWD [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-11 09:36 |只看该作者 |倒序浏览
Asterisk启动后,缺省条件下,只支持ODBC数据库,在官方的Asterisk-addons包中,添加了MySQL的数据库引擎。在本系统实现中,选用Postgres数据库,使用ODBC方式。
第一步 Postgres数据库安装
     postgresql-contrib-7.4.5-2PGDG.i686.rpm
     postgresql-devel-7.4.5-2PGDG.i686.rpm
     postgresql-libs-7.4.5-2PGDG.i686.rpm
     postgresql-odbc-7.4.5-13.i586.rpm
第二步 Unixodbc安装
     unixODBC-2.2.11-1.i386.rpm
     unixODBC-devel-2.2.11-1.i386.rpm
第三步 Postgres配置
     //odbc连接准备
     astrealtime:~# su - postgres
     astrealtime:~$ psql -d template1 </usr/share/psqlodbc/odbc.sql
     astrealtime:~$ psql -d template1
     template1=# CREATE DOMAIN lo AS int4;
     //创建用户和数据库
     astrealtime:~$ createuser -P -N -d -D asterisk  
     astrealtime:~$ createdb asterisk
     astrealtime:~$ psql -d asterisk
     //权限(创建一张表的时候补上这一句就行了)
     asterisk=> GRANT ALL ON TABLE × TO asterisk;
     //pg_hba.conf文件中添加连接许可
     local asterisk asterisk password
     host asterisk asterisk 127.0.0.1 255.255.255.255 password
第四步 Odbc配置文件
     //odbcinst.ini
     [PostgreSQL]
     Description     = ODBC for PostgreSQL
     Driver          = /usr/lib/libodbcpsql.so
     Setup           = /usr/lib/libodbcpsqlS.so
     FileUsage       = 1
     ReadOnly        = 0
     //odbc.ini
     [asterisk]
     Description = PSQL Asterisk database
     Trace       = Off
     TraceFile   = stderr
     driver      = PostgreSQL
     Servername  = 127.0.0.1
     USER        =
     PASSWORD    =
     port        = 5432
     database    = asterisk
     配置前,使用odbcinst -j可以查询当前使用的配置文件的位置。
     配置后,使用odbcinst -q -d 和odbs -q -s检测配置。
第五步 asterisk odbc数据源配置
     //etc/asterisk/res_odbc.conf
     [asterisk]
     dsn      => asterisk
     username => asterisk
     password => asterisk
     pre-connect => yes
第六步 asterisk realtime static配置文件
1. asterisk数据库
     CREATE TABLE sip_config (
     id serial NOT NULL,
     cat_metric int default 0 NOT NULL,
     var_metric int default 0 NOT NULL,
     commented  int default 0 NOT NULL,
     filename character varying(12 default'' NOT NULL,
     category character varying(12 default'default' NOT NULL,
     var_name character varying(12 default'' NOT NULL,
     var_val  character varying(12 default'' NOT NULL
     );
     /*
     对应的MySQL数据表
     CREATE TABLE `ast_config` (
     `id` int(11) NOT NULL auto_increment,
     `cat_metric` int(11) NOT NULL default '0',
     `var_metric` int(11) NOT NULL default '0',
     `commented` int(11) NOT NULL default '0',
     `filename` varchar(12 NOT NULL default '',
     `category` varchar(12 NOT NULL default 'default',
     `var_name` varchar(12 NOT NULL default '',
     `var_val` varchar(12 NOT NULL default '',
     PRIMARY KEY  (`id`),
     KEY `filename_comment` (`filename`,`commented`)
     ) TYPE=MyISAM;
     */
         id | cat_metric | var_metric | commented | filename | category | var_name | var_val                                    
         ----+------------+------------+-----------+-----------------+----------+-----------+-----------------------
         43 |          0 |          0 |         0 | sip.conf        | general  | port      | 5060
         44 |          0 |          0 |         0 | sip.conf        | general  | bindaddr  | 0.0.0.0
         45 |          0 |          0 |         0 | sip.conf        | general  | srvlookup | yes
         50 |          0 |          0 |         0 | extensions.conf | default  | switch    | RealTime/teltel.com@realtime_ext
         69 |          0 |          0 |         0 | sip.conf        | general  | context   | default
     asterisk从表中读出的配置文件格式为
     sip.conf
       [general]
       port=5060
       bindaddr=0.0.0.0
       srvlookup=yes     (参见附录1)
       context=default
     extensions.conf
       [default]
       switch => RealTime/teltel.com@realtime_ext  
2. asterisk配置文件(/etc/extconfig.conf)
     [settings]
     sip.conf => odbc,asterisk,sip_config
     extensions.conf => odbc,asterisk,sip_config
     realtime_ext => odbc,asterisk,extensions_conf
第七步 asterisk realtime dynamic配置文件
1 asterisk配置   
     asterisk realtime dynamic可以动态配置sip用户和sip extensions。
     这里只用到sip extensions配置。
     在sip extensions静态配置部分
     switch => RealTime/teltel.com@realtime_ext
     teltel.com  是extensions context   
     realtime_ext 是context的数据库来源
     由此实现Asterisk在呼叫进入时,动态加载Context
2 asterisk数据库
     CREATE TABLE extensions_conf (
     id serial NOT NULL,
     context character varying(20) DEFAULT '' NOT NULL,
     exten character varying(12 DEFAULT '' NOT NULL,
     priority smallint DEFAULT 0 NOT NULL,
     app character varying(20) DEFAULT '' NOT NULL,
     appdata character varying(12
     );
第八步 使用
     在sip_config表中,添加
     84 |          0 |          0 |         0 | sip.conf        | general  | register  | radision_AT_126.com:password:authname@126.com@teltel.com/123
    register 说明Asterisk将作为UA想proxy注册,参数为
    username[:password[:authname]]@domain/contact
    由于sip_config是静态配置文件,添加用户后需要reload才能生效
    在extensions_conf表中,添加
    id |  context   |             exten              | priority |  app   |                    appdata                    
          ----+------------+--------------------------------+----------+--------+-----------------------------------------------
           91 | teltel.com | 123  |        1 | Wait   | 5
           92 | teltel.com | 123  |        2 | Dial   | SIP/sun.xianwei_AT_21vianet.com@teltel.com
           93 | teltel.com | 123  |        3 | Hangup |
    当呼叫进入Asterisk后,首先等待5秒,然后呼叫Dial中的参数,最后挂机
    extensions_conf是动态表,改变其中的配置后不需要加载就可以生效
附录1 srvlookup
rfc3263 Locating SIP Servers
     例如域名为 example.com。首先取example.com的NAPTR SIP服务(IN为网络类型,order为优先级)通常应使用优先级数值小的服务,然后按照服务取服务对应的ip地址和端口,取得的结果集中使用优先值小的地址使用协议中建议如果同一个域的几台服务器配置了相同的优先值,则区别权重(Weight)。
  
     Asterisk-1.0.6中,没有NAPTR过程。直接使用res_search函数查询_sip._udp.domainde的ip地址。
  
     在终端里面可以使用host -t srv _sip._udp.domain命令查询
rfc2915 NAPTR DNS RR

          order pref flags service regexp replacement
  IN NAPTR 50 50 "s" "SIPS+D2T" "" _sips._tcp.example.com.
  IN NAPTR 90 50 "s" "SIP+D2T" "" _sip._tcp.example.com
  IN NAPTR 100 50 "s" "SIP+D2U" "" _sip._udp.example.com.

rfc2782 DNS SRV RR

          Priority Weight Port Target
  IN SRV 0 1 5060 server1.example.com
  IN SRV 0 2 5060 server2.example.com

论坛徽章:
0
2 [报告]
发表于 2007-04-17 20:17 |只看该作者
....一头雾水,好像这个都在讲数据库
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP