概述

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. [THUPC2022 决赛] rsraogps

    [THUPC2022 决赛] rsraogps 题目描述 给序列 \(a_1,\dots,a_n\),\(b_1,\dots,b_n\),\(c_1,\dots,c_n\), 定义区间 \([l,r] ...

  2. 【matlab混沌理论】1.2.洛伦兹吸引子

    ​Lorenz洛伦兹吸引子定义洛伦兹函数组后,通过ode45函数求解此微分方程方程. input: % Lorenz函数的洛伦兹吸引子 % 2.定义模型参数 sigma = 10; beta = 8/ ...

  3. Hive架构组件

    架构图 Hive组件

  4. ElasticSearch查询数据、全文检索、补全提示、拼写纠错

    https://www.elastic.co/guide/en/elasticsearch/reference/6.8/search.html https://www.elastic.co/guide ...

  5. CentOS 7 部署 Seafile 服务器(使用 MySQL/MariaDB)

    本文档用来说明通过预编译好的安装包来安装并运行基于 MySQL/MariaDB 的 Seafile 服务器.(MariaDB 是 MySQL 的分支) 提示:如果您是初次部署 Seafile 服务,我 ...

  6. C# 多线程 progressbar 界面不卡顿简单用法

    多线程进度条的简单使用,界面不卡顿.如下图: 简单源码如下: using System; using System.Collections.Generic; using System.Componen ...

  7. vue3 + element-plus 的 upload + axios + django 文件上传并保存

    之前在网上搜了好多教程,一直没有找到合适自己的,要么只有前端部分没有后端,要么就是写的不是很明白.所以还得靠自己摸索出来后,来此记录一下整个过程. 其实就是不要用默认的 action,要手动实现上传方 ...

  8. PowerDotNet平台化软件架构设计与实现系列(17):PCRM个人用户管理平台

    个人用户管理是业务系统中非常基础且重要的一个公共服务系统,我们写的绝大多数应用都和个人用户或会员有关,用户(会员)数据安全无小事,必须有一个完备的用户管理平台系统. 因为不同公司的主业务不同,个人用户 ...

  9. Java面试必考:什么是字节码?采用字节码的好处?

    Java面试必考:什么是字节码?采用字节码的好处? 于哥你好,最近在java面试中被问答到什么是字节码?采用字节码的好处是什么?瞬间懵了,如果你连这个都不知道,我保证你面试GG! 首先说下Java的优 ...

  10. CSS 基础 4 - CSS 常用单位

    CSS 基础 4 - CSS 常用单位 px:基础单位 em:相对当前父容器的系数,可以累乘 rem:相对根 <html> 的系数,方便计算 vw/vh:viewport width/he ...