您好,登錄后才能下訂單哦!
大家都知道,FreeSWITCH默認是從磁盤中xml文件,決定系統中有哪些用戶的。
對于一個常規的信息系統,用戶信息都是存儲在數據庫中。
以下非常簡單的演示了,FreeSWITCH中的用戶如何使用數據庫注冊。
準備工作:
一套LAMP或LNMP環境
編譯FreeSWITCH 的mod_xml_curl 模塊
Apache + php7 + MySQL 5.7 中的php腳本
根據實際情況,修改相關參數
zhouss@zhouss/var/www/html$ cat chunli_test.php <?php /* * 作者:李春利 * 功能:演示接收FreeSWITCH注冊請求,連接到遠程MySQL數據庫檢索用戶密碼,返回XML文件 * 備注:PHP 7.0 版本程序,注意MySQL函數發生了變化 * MySQL數據庫表快速創建: CREATE DATABASE IF NOT EXISTS `freeswitch` DEFAULT CHARACTER SET utf8; USE `freeswitch`; DROP TABLE IF EXISTS `authentication`; CREATE TABLE `authentication` ( `user_name` varchar(100) NOT NULL, `user_password` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `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"; function getlink($db_host,$db_user,$sb_pwd,$db_name) { $link=mysqli_connect($db_host,$db_user,$sb_pwd); if(!$link) { echo"MySQL數據庫連接失敗\n"; exit(); } if(!mysqli_select_db($link,$db_name)) { echo"MySQL 數據庫選擇失敗\n"; exit(); } mysqli_query($link, "setnames utf8"); return $link; } $link=getlink($db_host,$db_user,$db_pwd,$db_name); $result=mysqli_query($link, "select user_password from authentication where user_name = '${user}'"); if(mysqli_num_rows($result) > 0) { while($row=$result->fetch_row()) { foreach($row as $key=>$val) { $password = $val; } } $result->free(); } else { echo"查無此人{$user}\n"; exit(); } mysqli_close($link); ?> <document type="freeswitch/xml"> <section name="directory"> <domain name="<?php echo $domain;?>"> <params> <param name="dial-string" value="{presence_id=${dialed_user}@${dialed_domain}}${sofia_contact(${dialed_user}@${dialed_domain})}"/> </params> <groups> <group name="default"> <users> <user id="<?php echo $user; ?>"> <params> <param name="password" value="<?php echo $password; ?>"/> </params> <variables> <variable name="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@CentOS 01_install]# vim freeswitch-1.6.17/modules.conf 將 #xml_int/mod_xml_curl 改為 xml_int/mod_xml_curl 編譯 ./configure && make && make mod_xml_curl-install 具體你的configure怎么設置的,自己加上原先的參數。
使FreeSWITCH自動加載mod_xml_curl
[root@CentOS freeswitch]# vim ./autoload_configs/modules.conf.xml 將 <!-- <load module="mod_xml_curl"/> --> 改為 <load module="mod_xml_curl"/>
修改FreeSWITCH用戶注冊的方式,HTTP優先,如果請求失敗了,再到本地磁盤找xml文件
[root@CentOS freeswitch]# vim autoload_configs/xml_curl.conf.xml <configuration name="xml_curl.conf" description="cURL XML Gateway"> <bindings> <binding name="directory"> <param name="gateway-url" value="http://172.16.20.17/chunli_test.php" bindings="directory"/> </binding> </bindings> </configuration>
修改撥號計劃,添加通話路由
[root@CentOS freeswitch]# vim dialplan/default.xml <condition field="destination_number" expression="^(10[01][0-9]|1234|lao_wang)$">
啟動FreeSWITCH
一個SIP 使用 ('lao_wang','tiger'),注冊
一個SIP 使用('1234','4321'), 注冊
互相撥打電話,試試
調錯技巧:
按F8,打開 debug級別日志。
撥打電話,打不通,如果出現以下情況,說明HTTP請求是失敗的,檢查php腳本的ip,user,password參數
2017-06-29 01:21:40.705900 [WARNING] mod_voicemail.c:3487 Can't find user [1000@172.16.66.88]
如果出現以下情況,說明HTTP請求被拒絕,tcpdump 查看發來的包結構。
2017-06-29 00:22:38.681206 [WARNING] mod_xml_curl.c:294 CURL returned error:[52] Server returned nothing (no headers, no data)
用戶1234 撥打 lao_wang
lao_wang的電話顯示1234來電了
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。