环境: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

3494

被折叠的 条评论
为什么被折叠?



