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

前端之家收集整理的这篇文章主要介绍了freeswitch 使用外部directory 代替磁盘xml文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


大家都知道,FreeSWITCH默认是从磁盘中xml文件,决定系统中有哪些用户的。


对于一个常规的信息系统,用户信息都是存储在数据库中。


以下非常简单的演示了,FreeSWITCH中的用户如何使用数据库注册



准备工作:

一套LAMP或LNMP环境

编译FreeSWITCH 的mod_xml_curl 模块



Apache + PHP7 + MysqL 5.7 中的PHP脚本

根据实际情况,修改相关参数

  1. zhouss@zhouss/var/www/html$catchunli_test.PHP
  2. <?PHP
  3. /*
  4. *作者:李春利
  5. *功能:演示接收FreeSWITCH注册请求,连接到远程MysqL数据库检索用户密码,返回XML文件
  6. *备注:PHP7.0版本程序,注意MysqL函数发生了变化
  7.  
  8. *MysqL数据库快速创建:
  9. CREATEDATABASEIFNOTEXISTS`freeswitch`DEFAULTCHARACTERSETutf8;
  10. USE`freeswitch`;
  11. DROPTABLEIFEXISTS`authentication`;
  12. CREATETABLE`authentication`(
  13. `user_name`varchar(100)NOTNULL,`user_password`varchar(100)NOTNULL
  14. )ENGINE=InnoDBDEFAULTCHARSET=utf8;
  15. INSERTINTO`authentication`VALUES('lao_wang','tiger'),('1234','4321'),('chunli','chunli'),('1030','123456'),('1019','1234'),('2222','12345678');
  16. */
  17.  
  18. $user=$_POST['user'];
  19. $domain=$_POST['domain'];
  20. $password="";
  21.  
  22. $db_host="172.16.66.111";
  23. $db_user="root";
  24. $db_pwd="root";
  25. $db_name="freeswitch";
  26.  
  27. functiongetlink($db_host,$db_user,$sb_pwd,$db_name)
  28. {
  29. $link=MysqLi_connect($db_host,$sb_pwd);
  30. if(!$link)
  31. {
  32. echo"MysqL数据库连接失败\n";
  33. exit();
  34. }
  35. if(!MysqLi_select_db($link,$db_name))
  36. {
  37. echo"MysqL数据库选择失败\n";
  38. exit();
  39. }
  40. MysqLi_query($link,"setnamesutf8");
  41.  
  42. return$link;
  43. }
  44.  
  45.  
  46. $link=getlink($db_host,$db_pwd,$db_name);
  47. $result=MysqLi_query($link,"selectuser_passwordfromauthenticationwhereuser_name='${user}'");
  48.  
  49. if(MysqLi_num_rows($result)>0)
  50. {
  51. while($row=$result->fetch_row())
  52. {
  53. foreach($rowas$key=>$val)
  54. {
  55. $password=$val;
  56. }
  57. }
  58. $result->free();
  59. }
  60. else
  61. {
  62. echo"查无此人{$user}\n";
  63. exit();
  64. }
  65. MysqLi_close($link);
  66. ?>
  67. <documenttype="freeswitch/xml">
  68. <sectionname="directory">
  69. <domainname="<?PHPecho$domain;?>">
  70. <params>
  71. <paramname="dial-string"value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/>
  72. </params>
  73. <groups>
  74. <groupname="default">
  75. <users>
  76. <userid="<?PHPecho$user;?>">
  77. <params>
  78. <paramname="password"value="<?PHPecho$password;?>"/>
  79. </params>
  80. <variables>
  81. <variablename="user_context"value="default"/>
  82. </variables>
  83. </user>
  84. </users>
  85. </group>
  86. </groups>
  87. </domain>
  88. </section>
  89. </document>
  90. zhouss@zhouss/var/www/html$



编译FreeSWITCH 相关模块

[root@CentOS ~]# iptables -F

[root@CentOS ~]# iptables -X



编译mod_xml_curl,默认不编译

  1. [root@CentOS01_install]#vimfreeswitch-1.6.17/modules.conf
  2. #xml_int/mod_xml_curl
  3. 改为
  4. xml_int/mod_xml_curl
  5.  
  6. 编译./configure&&make&&makemod_xml_curl-install
  7. 具体你的configure怎么设置的,自己加上原先的参数。


使FreeSWITCH自动加载mod_xml_curl

  1. [root@CentOSfreeswitch]#vim./autoload_configs/modules.conf.xml
  2. <!--<loadmodule="mod_xml_curl"/>-->
  3. 改为
  4. <loadmodule="mod_xml_curl"/>

修改FreeSWITCH用户注册的方式,HTTP优先,如果请求失败了,再到本地磁盘找xml文件

  1. [root@CentOSfreeswitch]#vimautoload_configs/xml_curl.conf.xml
  2. <configurationname="xml_curl.conf"description="cURLXMLGateway">
  3. <bindings>
  4. <bindingname="directory">
  5. <paramname="gateway-url"value="http://172.16.20.17/chunli_test.PHP"bindings="directory"/>
  6. </binding>
  7. </bindings>
  8. </configuration>

修改拨号计划,添加通话路由

  1. [root@CentOSfreeswitch]#vimdialplan/default.xml
  2. <conditionfield="destination_number"expression="^(10[01][0-9]|1234|lao_wang)$">




启动FreeSWITCH

一个SIP 使用 ('lao_wang',注册

一个SIP 使用('1234',注册


互相拨打电话,试试





调错技巧:

按F8,打开 debug级别日志。



拨打电话,打不通,如果出现以下情况,说明HTTP请求是失败的,检查PHP脚本的ip,user,password参数

  1. 2017-06-2901:21:40.705900[WARNING]mod_voicemail.c:3487Can'tfinduser[1000@172.16.66.88]



@H_502_231@如果出现以下情况,说明HTTP请求被拒绝,tcpdump 查看发来的包结构。

  1. 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

猜你在找的XML相关文章