freeswitch 使用外部directory 代替磁盘xml文件
大家都知道,FreeSWITCH默认是从磁盘中xml文件,决定系统中有哪些用户的。 对于一个常规的信息系统,用户信息都是存储在数据库中。 以下非常简单的演示了,FreeSWITCH中的用户如何使用数据库注册。 准备工作: 一套LAMP或LNMP环境 编译FreeSWITCH 的mod_xml_curl 模块 Apache + php7 + MySQL 5.7 中的php脚本 根据实际情况,修改相关参数 zhouss@zhouss/var/www/html$catchunli_test.php <?php /* *作者:李春利 *功能:演示接收FreeSWITCH注册请求,连接到远程MySQL数据库检索用户密码,返回XML文件 *备注:PHP7.0版本程序,注意MySQL函数发生了变化 *MySQL数据库表快速创建: CREATEDATABASEIFNOTEXISTS`freeswitch`DEFAULTCHARACTERSETutf8; USE`freeswitch`; DROPTABLEIFEXISTS`authentication`; CREATETABLE`authentication`( `user_name`varchar(100)NOTNULL,`user_password`varchar(100)NOTNULL )ENGINE=InnoDBDEFAULTCHARSET=utf8; INSERTINTO`authentication`VALUES('lao_wang','tiger'),('1234','4321'),('chunli','chunli'),('1030','123456'),('1019','1234'),('2222','12345678'); */ $user=$_POST['user']; $domain=$_POST['domain']; $password=""; $db_host="172.16.66.111"; $db_user="root"; $db_pwd="root"; $db_name="freeswitch"; functiongetlink($db_host,$db_user,$sb_pwd,$db_name) { $link=mysqli_connect($db_host,$sb_pwd); if(!$link) { echo"MySQL数据库连接失败n"; exit(); } if(!mysqli_select_db($link,$db_name)) { echo"MySQL数据库选择失败n"; exit(); } mysqli_query($link,"setnamesutf8"); return$link; } $link=getlink($db_host,$db_pwd,$db_name); $result=mysqli_query($link,"selectuser_passwordfromauthenticationwhereuser_name='${user}'"); if(mysqli_num_rows($result)>0) { while($row=$result->fetch_row()) { foreach($rowas$key=>$val) { $password=$val; } } $result->free(); } else { echo"查无此人{$user}n"; exit(); } mysqli_close($link); ?> <documenttype="freeswitch/xml"> <sectionname="directory"> <domainname="<?phpecho$domain;?>"> <params> <paramname="dial-string"value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/> </params> <groups> <groupname="default"> <users> <userid="<?phpecho$user;?>"> <params> <paramname="password"value="<?phpecho$password;?>"/> </params> <variables> <variablename="user_context"value="default"/> </variables> </user> </users> </group> </groups> </domain> </section> </document> zhouss@zhouss/var/www/html$ 编译FreeSWITCH 相关模块
[root@CentOS ~]# iptables -F [root@CentOS ~]# iptables -X 编译mod_xml_curl,默认不编译 [root@CentOS01_install]#vimfreeswitch-1.6.17/modules.conf 将 #xml_int/mod_xml_curl 改为 xml_int/mod_xml_curl 编译./configure&&make&&makemod_xml_curl-install 具体你的configure怎么设置的,自己加上原先的参数。 使FreeSWITCH自动加载mod_xml_curl [root@CentOSfreeswitch]#vim./autoload_configs/modules.conf.xml 将 <!--<loadmodule="mod_xml_curl"/>--> 改为 <loadmodule="mod_xml_curl"/> 修改FreeSWITCH用户注册的方式,HTTP优先,如果请求失败了,再到本地磁盘找xml文件 [root@CentOSfreeswitch]#vimautoload_configs/xml_curl.conf.xml <configurationname="xml_curl.conf"description="cURLXMLGateway"> <bindings> <bindingname="directory"> <paramname="gateway-url"value="http://172.16.20.17/chunli_test.php"bindings="directory"/> </binding> </bindings> </configuration> 修改拨号计划,添加通话路由 [root@CentOSfreeswitch]#vimdialplan/default.xml <conditionfield="destination_number"expression="^(10[01][0-9]|1234|lao_wang)$"> 启动FreeSWITCH
一个SIP 使用 ('lao_wang',注册 一个SIP 使用('1234',注册
调错技巧: 按F8,打开 debug级别日志。 拨打电话,打不通,如果出现以下情况,说明HTTP请求是失败的,检查php脚本的ip,user,password参数 2017-06-2901:21:40.705900[WARNING]mod_voicemail.c:3487Can'tfinduser[1000@172.16.66.88] 如果出现以下情况,说明HTTP请求被拒绝,tcpdump 查看发来的包结构。 2017-06-2900:22:38.681206[WARNING]mod_xml_curl.c:294CURLreturnederror:[52]Serverreturnednothing(noheaders,nodata) 用户1234 拨打 lao_wang lao_wang的电话显示1234来电了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |