加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

freeswitch 使用外部directory 代替磁盘xml文件

发布时间:2020-12-16 08:15:46 所属栏目:百科 来源:网络整理
导读:大家都知道,FreeSWITCH默认是从磁盘中xml文件,决定系统中有哪些用户的。 对于一个常规的信息系统,用户信息都是存储在数据库中。 以下非常简单的演示了,FreeSWITCH中的用户如何使用数据库注册。 准备工作: 一套LAMP或LNMP环境 编译FreeSWITCH 的mod_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

wKiom1lVvHuTFiuoAAEs3AhGeYY444.png



lao_wang的电话显示1234来电了

wKioL1lVu_GhMTiJAAIlYxZDKtI274.png

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读