Freeswitch sip用户管理

环境:jdk8、windows

        对于 sip 用户的增删改查我采取的方法是直接修改用户配置 xml 文件,然后发送 reloadxml命令来实现的;(这种方式较为简便快速,适合简单的小型项目)

1.Java 程序通过 ESL 连接 Freeswitch

1.1 Freeswitch 配置允许外部程序接入

        Freeswitch 中有一个 mod_event_socket 模块,这个模块提供了 ESL 接口,这个接口允许外部应用程序通过 TCP/IP 连接到 Freeswitch 发送命令、接收事件,从而实现对 Freeswitch 的远程控制和状态监控;

        他的配置文件就是 ..\conf\autoload_configs 目录下的 event_socket.conf.xml

<configuration name="event_socket.conf" description="Socket Client">
  <settings>
    <param name="nat-map" value="false"/>
    <param name="listen-ip" value="0.0.0.0"/>
    <param name="listen-port" value="3040"/>
    <param name="password" value="ClueCon"/>
    <param name="apply-inbound-acl" value="test_acl"/>
    <param name="stop-on-bind-error" value="true"/>
  </settings>
</configuration>
  • nat-map:与 NAT 相关的参数,设置为 false 表示不使用 STUN/TURN 进行 NAT 映射;
  • listen-ip:指定 ESL 在哪个 IP 地址上监听传入的连接,0.0.0.0 表示所有访问到 Freeswitch 服务器的 IP 地址的设备都可以连接到 ESL 端口;
  • listen-port:指定 ESL 监听端口;
  • password:ESL 连接密码;
  • apply-inbound-acl:指定入站访问控制列表,表示只有匹配 test_acl 中定义的 IP 地址才能连接到 ESL 端口;

        配置入站访问控制列表 ..\conf\autoload_configs\acl.conf

        在里面添加一条规则 取名为 test_acl

    <list name="test_acl" default="allow">
	  <grant ip="any"/>
    </list>

    <list name="test_acl" default="allow">
      <node type="deny" cidr="192.168.42.0/24"/>
      <node type="allow" cidr="192.168.42.42/32"/>
    </list>
  • 上面那个代表所有的 IP 都允许连接
  • 下面的一条拒绝来自以 192.168.42 开头 IP的连接,一条允许 192.168.42.42 访问;
  • 192.168.42.0/24 中 /24 代表子网掩码的长度,表示IP地址的前 24 位是网络部分是固定的;
  • 192.168.42.42/32 表示一个单个的 IP 地址,/32 表示IP地址的全部 32 位都是固定的;
  • Freeswitch 的 ACL 规则按顺序处理,且按照先匹配先生效的原则(后定义的规则优先级更高),而且允许规则的优先级更高;

1.2 Java程序构建

        Java 服务想与 Freeswitch 服务连接,需要借助 Freeswitch 提供的 esl 库;

1.2.1 导入依赖

    <!-- FreeSWITCH ESL 客户端库本身 -->
    <dependency>
      <groupId>org.freeswitch.esl.client</groupId>
      <artifactId>org.freeswitch.esl.client</artifactId>
      <version>0.9.2</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.6.1</version>
    </dependency>
    <dependency>
      <groupId>org.jboss.netty</groupId>
      <artifactId>netty</artifactId>
      <version>3.2.1.Final</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.6.1</version>
    </dependency>
  • org.freeswitch.esl.client:最主要的库,提供了与 FreeSWITCH ESL 交互的各种 API;
  • netty:FreeSWITCH ESL 客户端库的底层网络通信是基于 Netty 框架实现的;
  • slf4j-api:ESL 客户端库内部使用 SLF4j 作为日志的抽象层;
  • slf4j-simple:非 springboot 项目需要他作为 slf4j-api 的底层实现;

1.2.2 配置 Freeswitch 相关信息

freeswitch:
  host: 127.0.0.1
  port: 3040
  password: ClueCon
  config:
    directory: C:\Program File
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值