概述

freeswitch有非常多的周边模块,给我们提供各种各样的功能,有些功能在适当的场景下可以极大的方便我们的开发和应用。

今天我们介绍一个不常用的模块mod_xml_rpc。

freeswitch自身内置有http服务器模块,而mod_xml_rpc模块提供了一种非常方便的访问fs内部API接口的方式:通过webapi方式访问,并且可以做到和fs命令行一样的效果。

我们只需要在freeswitch的配置文件中打开一些默认配置,就可以很方便的使用该功能。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.8.7

GCC:4.8.5

安装mod_xml_rpc模块

freeswitch的源码安装部署请参照之前的文章。

mod_xml_rpc模块在fs编译安装过程中,默认是有编译安装的,不需要额外的操作步骤。

cd /usr/local/freeswitch/mod

ll

-rwxr-xr-x. 1 root root 1642704 8月  17 09:59 mod_xml_rpc.so

-rwxr-xr-x. 1 root root    1347 8月  17 09:59 mod_xml_rpc.la

配置启动

mod_xml_rpc模块默认安装,但是在默认配置中是没有启动的,我想应该是出于安全的考虑,毕竟大多数使用fs的人员在不清楚mod_xml_rpc的功能的情况下,是有安全风险的。

修改freeswitch模块加载文件,启动加载mod_xml_rpc模块

cd /usr/local/freeswitch/conf/autoload_configs

vi modules.conf.xml

    <!-- XML Interfaces -->

  <load module="mod_xml_rpc"/>

查看xml_rpc模块配置文件,其中有http端口配置,默认是8080,另外有fs的鉴权信息,如果不做修改直接打开了公网的端口,有很大的安全风险。

[root@localhost autoload_configs]# cat xml_rpc.conf.xml

<configuration name="xml_rpc.conf" description="XML RPC">

  <settings>

    <!-- The port where you want to run the http service (default 8080) -->

    <param name="http-port" value="8080"/>

    <!-- if all 3 of the following params exist all http traffic will require auth -->

    <param name="auth-realm" value="freeswitch"/>

    <param name="auth-user" value="freeswitch"/>

    <param name="auth-pass" value="works"/>

    <!-- regex pattern to match against commands called against this service.

         If a command with arguments matches, it will be logged at INFO level -->

    <!--<param name="commands-to-log" value=""/> -->

  </settings>

</configuration>

测试

使用浏览器打开http://192.168.0.152:8080/,用户名密码使用xml_rpc.conf.xml文件中的配置,查看如图

使用浏览器打开http://192.168.0.152:8080/webapi/status,查看如图,和直接在命令行中使用status命令返回信息一致

使用curl方式调用fs的webapi接口

[root@localhost ~]# curl --user freeswitch:works http://192.168.0.152:8080/webapi/status

<h1>FreeSWITCH Status</h1>

2021-09-22 13:47:12<br>

UP 0 years, 0 days, 2 hours, 15 minutes, 55 seconds, 38 milliseconds, 425 microseconds<br>

FreeSWITCH (Version 1.8.7  64bit) is ready<br>

0 session(s) since startup<br>

0 session(s) - peak 0, last 5min 0 <br>

0 session(s) per Sec out of max 30, peak 0, last 5min 0 <br>

1000 session(s) max<br>

min idle cpu 0.00/99.87<br>

Current Stack Size/Max 240K/8192K

使用curl方式调用fs的自定义接口task,并附带参数test1 1234,mod_task模块代码见之前的文章

[root@localhost ~]# curl --user freeswitch:works http://192.168.0.152:8080/webapi/task?test1%201234 

task api test1, cmd:test1 1234, session:(nil)

总结

freeswitch的mod_xml_prc模块在某些场景中有大用处,通过webapi方式调用fs内部api很方便,同时也要考虑到安全方面的风险。

freeswitch内部的API提供给外部调用的方式还是挺多的,后续我们再慢慢介绍。

最后,freeswitch通过webapi方式访问自定义API配合访问自定义模块的代码逻辑,可以深入研究一下。

fs官方文档:

https://freeswitch.org/confluence/display/FREESWITCH/mod_xml_rpc


空空如常

求真得真

freeswitch xml_rpc模块的更多相关文章

  1. freeswitch新增模块

    概述 freeswitch的架构由稳定的核心模块和大量的外围插件式模块组成.核心模块保持稳定,外围模块可以动态的加载/卸载,非常灵活方便. 外围模块通过核心提供的 Public API与核心进行通信, ...

  2. freeswitch新增模块API

    概述 上一章我们讲解了freeswitch的源码基本结构,以及如何新增一个插件式模块. freeswitch的架构非常适合这种业务开发模式,即以freeswitch的基本功能为开发平台,新增插件式模块 ...

  3. freeswitch python模块

    概述 freeswitch支持多种语言的业务开发,包括C/C++,java,python,js,lua,Golang等等.freeswitch在使用python做业务开发时,有俩种接入方式,一种是ES ...

  4. freeswitch tts_commandline模块介绍

    概述 freeswitch是开源.免费的VOIP软交换平台,自带了很多功能各异的模块. mod_tts_commandline模块,本身没有TTS能力,而是通过调用TTS引擎的命令生成语音文件,tts ...

  5. freeswitch自定义模块的wiki地址

    http://wiki.freeswitch.org/wiki/Authoring_Freeswitch_Modules

  6. freeswitch拨打分机号源代码跟踪

    概述 freeswitch是一款非常好用的开源VOIP软交换平台. 之前我们有介绍过使用fs拨打分机号的方法,其中代码流程是比较复杂的,所以单独开一章介绍. fs拨打分机号,是使用send_dtmf接 ...

  7. freeswitch模块之event_socket

    这是我之前整理的关于freeswitch mod_event_socket的相关内容,这里记录下,也方便我以后查阅. mod_event_socket以socket的形式,对外提供控制FS一种途径, ...

  8. 《FreeSWITCH: VoIP实战》:SIP 模块 - mod_sofia

    SIP 模块是 FreeSWITCH 的主要模块,所以,值得拿出专门一章来讲解. 在前几章时里,你肯定见过几次 sofia 这个词,只是或许还不知道是什么意思.是这样的,Sofia-SIP 是由诺基亚 ...

  9. FreeSWITCH 加载模块过程解读

    今天来学习FreeSWITCH 加载模块过程. 哪些模块需要编译,是由源码下的 modules.conf 文件决定的. 哪些模块在程序启动时自动加载,是由 freeswitch/conf/autolo ...

  10. freeswitch插件式模块接口实现方式

    概述 freeswitch的外围模块是插件式的,可以动态的加载和卸载,使用起来非常的灵活和方便. 如果我们自己来设计一个开源的代码框架,相信这种插件式的模块结构是非常适合多人合作的模式. 本文对fs的 ...

随机推荐

  1. [ABC245G] Foreign Friends

    Problem Statement There are $N$ people and $K$ nations, labeled as Person $1$, Person $2$, $\ldots$, ...

  2. Mongodb安装篇+可视化工具篇

    下载MongoDB 官网下载地址:Download MongoDB Community Server | MongoDB   Version 选择:稳定版4.4.2 Mongo的版本分为稳定版和开发版 ...

  3. SpringCloudGateway解决跨域问题

    1.跨域问题详情 2.为什么会跨域? 官方定义:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS 怎么出现的? 1.浏览器访问了一个业务 h ...

  4. Codeforces Round #426 (Div. 2) problem C

    C. The Meaningless Game time limit per test 1 second memory limit per test 256 megabytes input stand ...

  5. 【scikit-learn基础】--『监督学习』之 岭回归

    岭回归(Ridge Regression)是一种用于处理共线性数据的线性回归改进方法.和上一篇用基于最小二乘法的线性回归相比,它通过放弃最小二乘的无偏性,以损失部分信息.降低精度为代价来获得更实际和可 ...

  6. 神经网络优化篇:详解其他正则化方法(Other regularization methods)

    其他正则化方法 除了\(L2\)正则化和随机失活(dropout)正则化,还有几种方法可以减少神经网络中的过拟合: 一.数据扩增 假设正在拟合猫咪图片分类器,如果想通过扩增训练数据来解决过拟合,但扩增 ...

  7. 启动android项目时报dx.jar错误的解决方案

    启动android项目时遇到如下错误: Failed to load E:\SDK\android-sdk-windows\build-tools\27.0.2\lib\dx.jar 原因: 自动使用 ...

  8. ElasticSearch之Index stats API

    获取指定索引的统计数据. 获取指定索引的全部统计数据,命令样例如下: curl -X GET "https://localhost:9200/testindex_001/_stats?pre ...

  9. Python中的协程、线程和进程

    一.协程与多线程和多进程一起使用有什么不同   协程.多线程和多进程都是实现程序并发执行的方法,不过它们在工作方式和适合的应用场景上存在一些区别. 1.协程(Coroutine)   协程是在单一线程 ...

  10. IDEA Edit Configuration解决隐藏了不见了

    IDEA Edit Configuration解决隐藏了不见了 IDEA Edit Configuration解决隐藏了不见了,我的IDEA版本是2020.3.4,某天按了哪个快捷键导致不见了.按Al ...