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

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

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

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

准备工作:

一套LAMP或LNMP环境

编译FreeSWITCH 的mod_xml_curl 模块

Apache + php7 + MySQL 5.7 中的php脚本

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

[email protected]/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>
[email protected]/var/www/html$

编译FreeSWITCH 相关模块

[[email protected] ~]# iptables -F

[[email protected] ~]# iptables -X


编译mod_xml_curl,默认不编译

[[email protected]S 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

[[email protected] freeswitch]# vim ./autoload_configs/modules.conf.xml
将
    <!-- <load module="mod_xml_curl"/> -->
改为
	<load module="mod_xml_curl"/>
	

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

[[email protected] 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>

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

[[email protected] 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 [[email protected]]

如果出现以下情况,说明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来电了

时间: 06-28

freeswitch 使用外部directory 代替磁盘xml文件的相关文章

在相应目录下新建或读取xml文件

string path = AppDomain.CurrentDomain.BaseDirectory+"UserContent1.xml"; //判断相应路径下文件是否存在 不存在的情况下就新建 if (!File.Exists(path)) { File.Create(path); } //Directory.Exists(path); //Directory.CreateDirectory(path); //xml文件写入方式一 xmltextwriter xmltextwrit

applicationContext.xml文件如何调用外部properties等配置文件

只需要在applicationContext.xml文件中添加一行: <!-- 导入外部的properties文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> 其中:location属性是指该文件的位置. 如果是在src目录下的话,该位置为:classpath:文件名.后缀 如果是在/WEB-INF/目录下的话,该位置为: /WEB-INF/文件名.后缀 但是要

写一个xml文件到磁盘的方法

/** * 往磁盘上写一个xml文件 * * <?xml version="1.0" encoding="UTF-8" standalone="true"?> //文档的神明 <persons> //标签tag <person id=“18"> //ID是person标签的一个属性 <name>allen</name> <age>36</age> <

POM(project Object Model) Maven包管理依赖 pom.xml文件

什么是POM POM全称为“Project Object Model”,意思是工程对象模型.Maven工程使用pom.xml来指定工程配置信息,和其他文本信息.该配置文件以xml为格式,使用xml语法表明信息. 快速预览 一个pom.xml文件主要包括以下元素信息: pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39

2015年9月01日课程作业(磁盘和文件系统管理)-JY1506402-19+liuhui880818

<Linux系统管理> (1)磁盘和文件系统管理: (2)RAID, LVM; btrfs; (3)程序包管理:rpm, yum(dnf) (4)Linux的网络管理; (5)进程和作业管理:htop, glances, tsar: (6)sed和awk: (7)Linux系统的开机启动流程: (8)内核基础知识,内核定制编译: (9)系统安装:kickstart, pxe 一.作业(练习)内容: 1.复习本次课程所讲的内容: 2.总结整理磁盘管理及文件系统管理中设计的各种命令的使用,并附注一

使用idea搭建maven项目时 java目录下的xml文件没有加载的解决方法

今天在idea集成开发环境下 使用maven搭建了ssm项目,遇到了3个问题 首先我们先复习一下知识点: 第一步:在web.xml中配置spring监听器 <!-- spring监听器 加载spring容器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <con

磁盘和文件系统管理

我们知道一块磁盘是可以被分区成多个分区的(partition),以Windows的观点来看,你可能会有一颗磁盘并且将他分区成为C:, D:, E:盘,那个C, D,E就是分区.Linux的设备都是以文件的型态存在,磁盘设备接口的不同也早就了磁盘文件名的不同.即IDE接口的磁盘设备文件名都是/dev/hd[a-z]的格式,例如:/dev/hda./dev/hdb.SCSI, SATA, SAS, USB接口的磁盘设备文件名都是:/dev/sd[a-z],例如sda.sdb,磁盘设备的命名主要是根据

史上最全的maven pom.xml文件教程详解

<project xmlns=http://maven.apache.org/POM/4.0.0 xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd >; <!-- 父项目的坐标.如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值.

Maven setting.xml 文件配置

全局配置: ${M2_HOME}/conf/settings.xml (配置环境变量  新建 M2_HOME    安装目录到版本名那里(D:\apache-maven-3.0.2) 编辑path 环境变量  %M2_HOME%\bin;) 用户配置: ${user.home}/.m2/settings.xml 注意:用户配置优先于全局配置. ${user.home} 和和所有其他系统属性只能在3.0+版本上使用.请注意windows和Linux使用变量的区别. 1. 声明规范 <?xml ve