freeswitch是一款简单好用的VOIP开源软交换平台。
mod_xml_curl模块支持从web服务获取xml配置,本文介绍如何动态获取acl配置。
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.6.20
GCC:4.8.5
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 = '''
'''
self.send_response(200)
self.send_header('Content-Type', 'application;charset=utf-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 = '''
'''
self.send_response(200)
self.send_header('Content-Type', 'application;charset=utf-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模块要放在配置的顶部。
修改conf/autoload_configs/xml_curl.conf.xml文件。
configuration动态配置需要刷新生效。
[email protected]> 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/[email protected] parsing [public->test-url] continue=false
Dialplan: sofia/external/[email protected] Regex (PASS) [test-url] ${acl(${network_addr} list_out)}(true) =~ /true/ break=on-false
Dialplan: sofia/external/[email protected] Regex (PASS) [test-url] destination_number(13712345678) =~ /^(\d+)$/ break=on-false
Dialplan: sofia/external/[email protected] Action answer()
Dialplan: sofia/external/[email protected] Action playback(/usr/local/freeswitch/sounds/dialplan-test-url.wav)
呼叫结果符合预期。
mod_xml_curl模块动态获取config数据,方便对批量的fs集中统一管理配置。
未解决问题。
configuration类型的配置数据动态刷新的边界在哪里,我们可以把哪些配置数据放在web服务统一管理。
如何解决web服务不可用的本地xml配置问题,本地xml配置与web动态配置不一致的问题。
空空如常
求真得真