青海旅游网站建设方案,企业网站搭建费用,做架构图简单的网站,建网站费用明细概述
freeswitch是一款简单好用的VOIP开源软交换平台。
mod_xml_curl模块支持从web服务获取xml配置#xff0c;本文介绍如何动态获取acl配置。
环境
centos#xff1a;CentOS release 7.0 (Final)或以上版本
freeswitch#xff1a;v1.6.20
GCC#xff1a;4.8.5
web… 概述
freeswitch是一款简单好用的VOIP开源软交换平台。
mod_xml_curl模块支持从web服务获取xml配置本文介绍如何动态获取acl配置。
环境
centosCentOS release 7.0 (Final)或以上版本
freeswitchv1.6.20
GCC4.8.5
web服务
mod_xml_curl模块依赖于web服务需要自己创建一个web接口并动态的返回xml配置。
下面是python3.10实现的一个简单的web服务接口函数从基类“BaseHTTPRequestHandler”继承并实现简单的返回逻辑。 def fsDialplan(self): length int(self.headers[content-length]) datas self.rfile.read(length) logging.info(/fs/dialplan request, data%s % urllib.parse.unquote(datas)) respcode document typefreeswitch/xml
section namedialplan descriptiondialplan-url include context namepublic extension nametest-url continuefalse condition field${acl(${network_addr} list_out)} expressiontrue/ condition fielddestination_number expression^(\d)$ action applicationanswer/ action applicationplayback data/usr/local/freeswitch/sounds/dialplan-test-url.wav/ /condition /extension /context /include
/section
/document self.send_response(200) self.send_header(Content-Type, application;charsetutf-8) self.end_headers() self.wfile.write(respcode.encode(utf-8)) return def fsConfigAcl(self): length int(self.headers[content-length]) datas self.rfile.read(length) # print(fsConfigAcl request, data, datas.decode()) logging.info(/fs/config/acl request, data%s % urllib.parse.unquote(datas)) respcode document typefreeswitch/xml
section nameconfiguration descriptionconfig-acl
configuration nameacl.conf descriptionNetwork Lists network-lists list namelist_out defaultdeny node typeallow cidr10.55.55.138/32/ /list /network-lists
/configuration
/section
/document self.send_response(200) self.send_header(Content-Type, application;charsetutf-8) self.end_headers() self.wfile.write(respcode.encode(utf-8)) return web服务响应消息格式注意事项必须有“section”段xml格式不能使用压缩格式否则会解析错误。
fsDialplan函数的响应中增加了acl的条件判断。
fsConfigAcl函数响应添加“list_out”的acl规则。
配置
检查conf/autoload_configs/modules.conf.xml文件mod_xml_curl模块要放在配置的顶部。 load modulemod_console/
load modulemod_logfile/
load modulemod_xml_curl/ 修改conf/autoload_configs/xml_curl.conf.xml文件。
configuration namexml_curl.conf descriptioncURL XML Gateway bindings binding namedialplan param namegateway-url valuehttp://10.55.55.137:8080/fs/dialplan bindingsdialplan/
/binding binding nameconfiguration
param namegateway-url valuehttp://10.9.0.27:8080/fs/config-acl bindingsconfiguration/
/binding /bindings
/configuration 测试
configuration动态配置需要刷新生效。
freeswitchlocalhost.localdomain reloadacl OK acl reloaded 2023-08-04 10:37:59.117939 [NOTICE] switch_utils.c:545 Adding 10.55.55.138/32 (allow) [] to list list_out 使用10011发起呼叫日志如下。
2023-08-04 10:38:05.277908 [INFO] mod_dialplan_xml.c:637 Processing 10011 10011-13712345678 in context public
Dialplan: sofia/external/1001110.55.55.138 parsing [public-test-url] continuefalse
Dialplan: sofia/external/1001110.55.55.138 Regex (PASS) [test-url] ${acl(${network_addr} list_out)}(true) ~ /true/ breakon-false
Dialplan: sofia/external/1001110.55.55.138 Regex (PASS) [test-url] destination_number(13712345678) ~ /^(\d)$/ breakon-false
Dialplan: sofia/external/1001110.55.55.138 Action answer()
Dialplan: sofia/external/1001110.55.55.138 Action playback(/usr/local/freeswitch/sounds/dialplan-test-url.wav) 呼叫结果符合预期。
总结
mod_xml_curl模块动态获取config数据方便对批量的fs集中统一管理配置。
未解决问题。
configuration类型的配置数据动态刷新的边界在哪里我们可以把哪些配置数据放在web服务统一管理。
如何解决web服务不可用的本地xml配置问题本地xml配置与web动态配置不一致的问题。 空空如常
求真得真