freeswitch的mod_xml_curl模塊動態獲取configuration

?

概述

freeswitch是一款簡單好用的VOIP開源軟交換平臺。

mod_xml_curl模塊支持從web服務獲取xml配置,本文介紹如何動態獲取acl配置。

環境

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

freeswitch:v1.6.20

GCC:4.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 type="freeswitch/xml">

<section name="dialplan" description="dialplan-url">

??? <include>

??????? <context name="public">

??????????? <extension name="test-url" continue="false">

??????????????? <condition field="${acl(${network_addr} list_out)}" expression="true"/>

??????????????? <condition field="destination_number" expression="^(\d+)$">

?????????? ?????????<action application="answer"/>

??????????????????? <action application="playback" 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;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 = '''<document type="freeswitch/xml">

<section name="configuration" description="config-acl">

<configuration name="acl.conf" description="Network Lists">

? <network-lists>

??? <list name="list_out" default="deny">

????? <node type="allow" cidr="10.55.55.138/32"/>

??? </list>

? </network-lists>

</configuration>

</section>

</document>

'''

??????? 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模塊要放在配置的頂部。

??? <load module="mod_console"/>

<load module="mod_logfile"/>

<load module="mod_xml_curl"/>

修改conf/autoload_configs/xml_curl.conf.xml文件。

<configuration name="xml_curl.conf" description="cURL XML Gateway">

? <bindings>

??? <binding name="dialplan">

????? <param name="gateway-url" value="http://10.55.55.137:8080/fs/dialplan" bindings="dialplan"/>

</binding>

<binding name="configuration">

<param name="gateway-url" value="http://10.9.0.27:8080/fs/config-acl" bindings="configuration"/>

</binding>

? </bindings>

</configuration>

測試

configuration動態配置需要刷新生效。

freeswitch@localhost.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/10011@10.55.55.138 parsing [public->test-url] continue=false

Dialplan: sofia/external/10011@10.55.55.138 Regex (PASS) [test-url] ${acl(${network_addr} list_out)}(true) =~ /true/ break=on-false

Dialplan: sofia/external/10011@10.55.55.138 Regex (PASS) [test-url] destination_number(13712345678) =~ /^(\d+)$/ break=on-false

Dialplan: sofia/external/10011@10.55.55.138 Action answer()

Dialplan: sofia/external/10011@10.55.55.138 Action playback(/usr/local/freeswitch/sounds/dialplan-test-url.wav)

呼叫結果符合預期。

總結

mod_xml_curl模塊動態獲取config數據,方便對批量的fs集中統一管理配置。

未解決問題。

configuration類型的配置數據動態刷新的邊界在哪里,我們可以把哪些配置數據放在web服務統一管理。

如何解決web服務不可用的本地xml配置問題,本地xml配置與web動態配置不一致的問題。

空空如常

求真得真

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41071.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41071.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41071.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第2章 性能測量

理解應用程序性能的第一步是學會對它進行測量。 與絕大多數功能問題相比&#xff0c;性能問題通常很難跟蹤和復現。 任何關注過性能評估的人可能都知道公允地進行性能測量并從中得到準確結論是多么困難。 因為在測量中存在誤差&#xff0c;性能分析通常需要統計方法進行處理…

ThreadLocal(超詳細介紹!!)

關于ThreadLocal&#xff0c;可能很多同學在學習Java的并發編程部分時&#xff0c;都有所耳聞&#xff0c;但是如果要仔細問ThreadLocal是個啥&#xff0c;我們可能也說不清楚&#xff0c;所以這篇博客旨在幫助大家了解ThreadLocal到底是個啥&#xff1f; 1.ThreadLocal是什么&…

Android設備通過藍牙HID技術模擬鍵盤實現

目錄 一&#xff0c;背景介紹 二&#xff0c;技術方案 2.1 獲取BluetoothHidDevice實例 2.2 注冊/解除注冊HID實例 2.3 Hid report description描述符生成工具 2.4 鍵盤映射表 2.5 通過HID發送鍵盤事件 三&#xff0c;實例 一&#xff0c;背景介紹 日常生活中&#xff0…

AndroidStudio中修改打包生成的apk名稱

1.配置手機架構 splits {abi {enable truereset()include armeabi-v7a,arm64-v8auniversalApk false} } 2.多渠道 productFlavors {normal {applicationId "*****"manifestPlaceholders [appName: "string/app_name_normal"]}driver {applicationId &qu…

圖片轉換成pdf格式?這幾種轉換格式方法了解一下

圖片轉換成pdf格式&#xff1f;將圖片轉換成PDF格式的好處有很多。首先&#xff0c;PDF格式具有通用性&#xff0c;可以在幾乎任何設備上查看。其次&#xff0c;PDF格式可以更好地保護文件&#xff0c;防止被篡改或者復制。此外&#xff0c;PDF格式還可以更好地壓縮文件大小&am…

使用Kaptcha生成驗證碼

說明&#xff1a;驗證碼&#xff0c;是登錄流程中必不可少的一環&#xff0c;一般企業級的系統&#xff0c;使用都是專門制作驗證碼、審核校驗的第三方SDK&#xff08;如極驗&#xff09;。本文介紹&#xff0c;使用谷歌提供的Kaptcha技術&#xff0c;制作一個簡單的驗證碼。 …

sqlserver數據庫導出到mysql

愛到分才顯珍貴&#xff0c;很多人都不懂珍惜擁有&#xff0c;只到失去才看到&#xff0c;其實那最熟悉的才最珍貴的。 這里只介紹一種方式&#xff0c;有很多的方式。 1.使用Navicat 安裝 下載 2.工具 數據傳輸 3.選擇源和目標 然后開始 4.最好導入前備份一下庫

【KVM虛擬化環境部署】

環境部署 KVM虛擬化環境 1、裝系統時手動選擇安裝 2、CentOS 7 最小化安裝 yum install qemu-kvm qemu-img libvirt -y yum install virt-install libvirt-python virt-manager python-virtinst libvirt-client -y安裝好CentOS 7后&#xff0c;去設置里面點擊處理器&#x…

4.0 Spring Boot入門

1. Spring Boot概述 Spring Boot介紹 Spring Boot是Pivotal團隊在2014年推出的全新框架&#xff0c;主要用于簡化Spring項目的開發過程&#xff0c;可以使用最少的配置快速創建Spring項目。 Spring Boot版本 2014年4月v1.0.0.RELEASE發布。 ? 2.Spring Boot特性 約定優于配…

docker-compose部署可道云

文章目錄 一. Mac1.1 下載源碼1.2 部署1.2.1 修改密碼部署(可忽略)1.2.2 直接部署 1.3 卸載1.4 訪問 二. Win2.1 下載源碼2.2 部署2.2.1 修改密碼部署(可忽略)2.2.2 直接部署 2.3 卸載 一. Mac 1.1 下載源碼 mkdir -p /Users/wanfei/docker-compose && cd /Users/wan…

mysql 數據備份和恢復

操作系統&#xff1a;22.04.1-Ubuntu mysql 版本&#xff1a;8.033 binlog 介紹 binlog 是mysql 二進制日志 binary log的簡稱&#xff0c;可以簡單理解為數據的修改記錄。 需要開啟binlog,才會產生文件&#xff0c;mysql 8.0 默認開啟,開啟后可以在 /var/lib/mysql &#xff…

技術債 筆記

目錄 1. 技術債 筆記1.1. 什么是技術債1.2. 討論1.3. 國內技術從業者怎么看? 1. 技術債 筆記 1.1. 什么是技術債 1992 年, Ward Cunningham 在敏捷宣言中首次提出了"技術債"概念, 主要指有意或無意地做了錯誤的或不理想的技術決策所累積的債務。隨后, 《重構》一書…

sql中union all、union、intersect、minus的區別圖解,測試

相關文章 sql 的 join、left join、full join的區別圖解總結&#xff0c;測試&#xff0c;注意事項 1. 結論示意圖 對于intersect、minus&#xff0c;oracle支持&#xff0c;mysql不支持&#xff0c;可以變通&#xff08;in或exists&#xff09;實現 2.測試 2.1.創建表和數…

vue pc端項目el-upload上傳圖片時加水印

html代碼&#xff1a; <a-uploadclass"avatar-uploader"list-type"picture-card":file-list"uploadFileList":custom-request"uploadDoneHandle":before-upload"beforeUpload":remove"removeHandle"v-decorat…

案例21 基于Spring Boot+Redis實現圖書信息按書號存儲案例

1. 案例需求 基于Spring BootRedis實現圖書信息按書號存儲和取出功能&#xff0c;數據存儲至Redis。 2. 創建Spring Boot項目 創建Spring Boot項目&#xff0c;項目名稱為springboot-redis02。 3. 選擇依賴 ? pom.xml文件內容如下所示&#xff1a; <?xml version&quo…

瀏覽器控制臺調試代碼和JavaScript控制臺方法介紹

瀏覽器控制臺調試代碼和JavaScript控制臺方法介紹 瀏覽器控制臺調試代碼 瀏覽器控制臺&#xff08;Console&#xff09;是瀏覽器提供的一個開發工具&#xff0c;用于在瀏覽器中執行和調試 JavaScript 代碼。它提供了一個交互式環境&#xff0c;可以輸入 JavaScript 代碼&#…

Qt:隱式內存共享

隱式內存共享 Many C classes in Qt use implicit data sharing to maximize resource usage and minimize copying. Implicitly shared classes are both safe and efficient when passed as arguments, because only a pointer to the data is passed around, and the data i…

C語言:每日一練(選擇+編程)

目錄 選擇題&#xff1a; 題一&#xff1a; 題二&#xff1a; 題三&#xff1a; 題四&#xff1a; 題五&#xff1a; 編程題&#xff1a; 題一&#xff1a;打印1到最大的n位數 示例1 思路一&#xff1a; 題二&#xff1a;計算日期到天數轉換 示例1 思路一&#xf…

【JVM】如何判定一個對象已死以及“標記-清除”、“標記-復制”、“標記-整理”三種垃圾收集算法

文章目錄 0、如何判定一個對象的生死&#xff1f;1、上文提到的引用又是什么1、強引用&#xff1a;2、軟引用&#xff1a;3、弱引用&#xff1a;4、虛引用&#xff1a; 2、垃圾收集算法1、標記-清除2、標記-復制優化&#xff1a;&#x1f447; 3、標記-整理 0、如何判定一個對象…

Java面向對象程序設計——知識、概念、定義及作用(簡答)

?專欄&#xff1a;《Java面向對象程序設計》學習筆記 問題是依據考綱整理的&#xff0c;稍微做了一些補充。大部分答案由GPT生成&#xff0c;部分內容摘選自書本。 內容太多了&#xff0c;目前懶得濃縮精煉了&#xff0c;以后再說吧。 如果有大佬可以幫忙精簡一些文字、補充…