国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

freeswitch的mod_xml_curl模塊動態(tài)獲取dialplan

這篇具有很好參考價值的文章主要介紹了freeswitch的mod_xml_curl模塊動態(tài)獲取dialplan。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

freeswitch的mod_xml_curl模塊動態(tài)獲取dialplan,技術-VOIP,xml,freeswitch,voip

?

概述

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

mod_xml_curl模塊支持從web服務獲取xml配置,本文介紹如何動態(tài)獲取dialplan配置。

環(huán)境

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

freeswitch:v1.6.20

GCC:4.8.5

dialplan查找流程

我們在“switch_xml_parse_file”函數(shù)中設置一個斷點,并打印堆棧。

Breakpoint 1, switch_xml_parse_file (file=file@entry=0x7fdda1a015f0 "/tmp/34096cac-311f-11ee-b31e-672fb2a27310.tmp.xml") at src/switch_xml.c:1625

1625?????????????????????????? if ((xml = switch_xml_parse_fd(fd))) {

(gdb) bt

#0? switch_xml_parse_file (file=file@entry=0x7fdda1a015f0 "/tmp/34096cac-311f-11ee-b31e-672fb2a27310.tmp.xml") at src/switch_xml.c:1625

#1? 0x00007fddee4d5258 in xml_url_fetch (section=<optimized out>, tag_name=<optimized out>, key_name=<optimized out>, key_value=<optimized out>, params=0x7fdd68004d10, user_data=0x1ad1ae8) at mod_xml_curl.c:311

#2? 0x00007fddf71e0ec0 in switch_xml_locate (section=section@entry=0x7fddae9fc7e8 "dialplan", tag_name=tag_name@entry=0x0, key_name=key_name@entry=0x0, key_value=key_value@entry=0x0, root=root@entry=0x7fdda1a01b00,

??? node=node@entry=0x7fdda1a01af8, params=0x7fdd68004d10, clone=clone@entry=SWITCH_FALSE) at src/switch_xml.c:1675

#3? 0x00007fddae9fc214 in dialplan_xml_locate (node=0x7fdda1a01af8, root=0x7fdda1a01b00, caller_profile=0x7fddd004d690, session=0x7fddd0030328) at mod_dialplan_xml.c:613

#4? dialplan_hunt (session=0x7fddd0030328, arg=<optimized out>, caller_profile=0x7fddd004d690) at mod_dialplan_xml.c:658

#5? 0x00007fddf71342ef in switch_core_standard_on_routing (session=0x7fddd0030328) at src/switch_core_state_machine.c:281

#6? switch_core_session_run (session=0x7fddd0030328) at src/switch_core_state_machine.c:643

#7? 0x00007fddf712c9fe in switch_core_session_thread (thread=<optimized out>, obj=0x7fddd0030328) at src/switch_core_session.c:1648

#8? 0x00007fddf71286f3 in switch_core_session_thread_pool_worker (thread=0x7fddd004f5e0, obj=<optimized out>) at src/switch_core_session.c:1711

#9? 0x00007fddf7213e10 in dummy_worker (opaque=0x7fddd004f5e0) at threadproc/unix/thread.c:151

#10 0x00007fddf4a11ea5 in start_thread () from /lib64/libpthread.so.0

#11 0x00007fddf4065b0d in clone () from /lib64/libc.so.6

(gdb)

從堆棧中可以看出,一通呼叫查找動態(tài)dialplan的流程如下。

switch_core_session_thread

switch_core_session_run

switch_core_standard_on_routing

dialplan_hunt

dialplan_xml_locate

switch_xml_locate

xml_url_fetch

switch_xml_parse_file

web服務

mod_xml_curl模塊依賴于web服務,需要自己創(chuàng)建一個web接口并動態(tài)的返回xml配置。

下面是python3.10實現(xiàn)的一個簡單的web服務接口函數(shù),從基類“BaseHTTPRequestHandler”繼承并實現(xiàn)簡單的返回邏輯。

??? 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="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

web服務響應消息格式注意事項,必須有“section”段,xml格式不能使用壓縮格式,否則會解析錯誤。

配置

檢查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>

? </bindings>

</configuration>

測試

使用10011發(fā)起呼叫,日志如下。

2023-08-03 11:08:27.438976 [INFO] mod_dialplan_xml.c:637 Processing 10011 <10011>->13712345678 in context public

2023-08-03 11:08:27.478976 [CONSOLE] mod_xml_curl.c:323 XML response is in /tmp/042fcd1e-31ab-11ee-b34d-672fb2a27310.tmp.xml

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] 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)

呼叫結果符合預期。

問題

網(wǎng)友的問題:當使用 dialplan時,這個動態(tài)獲取的dialplan優(yōu)先級最高,每通電話都會執(zhí)行到這個dialplan。 而有些電話我不想走xml動態(tài)獲取的,就想走本地配置的,這個問題怎解決呢?

方案1,mod_xml_curl模塊內(nèi)部已實現(xiàn)的邏輯,當web服務返回“NOT FOUND”時,自動走本地配置。缺點是對web服務依賴,每通呼叫都會到web服務查詢。

方案2,修改“switch_xml_locate”函數(shù),增加條件控制,比如caller是“123456”時直接使用本地配置。缺點是不夠靈活,配置條件修改較困難。

方案3,修改mod_xml_curl模塊的“xml_url_fetch”函數(shù),對web響應的xml結果進行緩存,設置過期時間,減少了對web服務的依賴,又有動態(tài)配置的優(yōu)點。缺點是web配置的生效會增加緩存的延遲,弱一致性。

以上方案僅僅從測試結果推導,并未真正實現(xiàn),實現(xiàn)細節(jié)有不確定性。

總結

mod_xml_curl模塊動態(tài)獲取dialplan數(shù)據(jù),控制呼叫流程。

未解決問題。

如何更靈活的控制從web服務和本地xml文件獲取配置。

如何緩存web服務的xml配置。

如何解決web服務不可用的時候,呼叫流程問題。

空空如常

求真得真文章來源地址http://www.zghlxwxcb.cn/news/detail-631939.html

到了這里,關于freeswitch的mod_xml_curl模塊動態(tài)獲取dialplan的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 頂頂通呼叫中心中間件自動外呼來電轉(zhuǎn)人工顯示被叫號碼而不是顯示路由條件 :一步步配置(mod_cti基于FreeSWITCH)

    頂頂通呼叫中心中間件自動外呼來電轉(zhuǎn)人工顯示被叫號碼而不是顯示路由條件 :一步步配置(mod_cti基于FreeSWITCH)

    介紹 頂頂通呼叫中心中間件自動外呼來電轉(zhuǎn)人工顯示被叫號碼而不是顯示自動外呼的路由條件,可以是默認的被叫號碼也可以改為顯示指定的號碼 一、顯示默認被叫 1、配置撥號方案 打開ccadmin-》點擊撥號方案-》找到進入排隊-》配置跟圖中一樣的通道變量。 修改了撥號方案

    2024年01月18日
    瀏覽(18)
  • 騎砍2霸主MOD開發(fā)(8)-action_sets.xml骨骼動畫

    一.action_sets.xml ? ? ?1.文件目錄:ModulesNativeModuleDataaction_sets.xml ? ? ?2.action_set(骨骼動畫animation)?= action1 + action2 +action3 ? ? ?3.通過在action_set中配置skeleton,人,馬匹,牛,羊等骨架 二.使用編輯器修改動作 三.骨架骨骼骨骼動畫 ? ? ?1.骨架skeleton ? ? ? ? Skeleton skel = Mission.Main

    2024年04月27日
    瀏覽(15)
  • 解決 go mod tidy 加載模塊超時

    解決 go mod tidy 加載模塊超時

    如果go mod tidy 加載模塊超時 解決方法 修改GOPROXY: 查看go環(huán)境相關信息:

    2024年02月11日
    瀏覽(22)
  • 【FreeSwitch開發(fā)實踐】media bug獲取通話語音流

    【FreeSwitch開發(fā)實踐】media bug獲取通話語音流

    ?? 博客主頁:小小馬車夫的主頁 ?? 所屬專欄:FreeSwitch開發(fā)實踐 ?? 專欄介紹:主要介紹博主在實際項目中使用FreeSwitch開發(fā)外呼類項目的一些經(jīng)驗心得,主要涉及FreeSwitch的基本安裝編譯、基本配置、ESL、WSS、錄音、自定義模塊、media bug、語音播放、MRCP及對接AI機器人等內(nèi)

    2024年02月04日
    瀏覽(11)
  • go mod tidy總是安裝最新依賴,如何查找哪個模塊導致某個包安裝最新依賴,提供一個小工具

    go mod tidy總是安裝最新依賴,如何查找哪個模塊導致某個包安裝最新依賴,提供一個小工具

    安裝: go install github.com/jan-bar/interesting/findModVer@latest 執(zhí)行: findModVer d:myproject 結果如下圖所示: 根據(jù)結果可以找到哪個依賴導致 google.golang.org/grpc v1.45.0 使用了這個版本,這樣每次執(zhí)行 go mod tidy 會自動修改該模塊到 v1.45.0 版本。我看了下 github.com/spf13/viper v1.11.0 就是用的 go

    2024年02月08日
    瀏覽(26)
  • Apache HTTP Server <2.4.56 mod_proxy_uwsgi 模塊存在請求走私漏洞(CVE-2023-27522)

    Apache HTTP Server <2.4.56 mod_proxy_uwsgi 模塊存在請求走私漏洞(CVE-2023-27522)

    Apache HTTP Server 是一個Web服務器軟件。 該項目受影響版本存在請求走私漏洞。由于mod_proxy_uwsgi.c 中uwsgi_response方法對于源響應頭缺少檢查,當apache啟用mod_proxy_uwsgi后,攻擊者可利用過長的源響應頭等迫使應轉(zhuǎn)發(fā)到客戶端的響應被截斷或拆分,進而可能造成會話劫持等危害。 漏

    2024年02月09日
    瀏覽(22)
  • shell腳本獲取curl POST命令返回的http狀態(tài)碼

    ?在shell腳本中判斷curl 發(fā)的post命令執(zhí)行返回的http狀態(tài)碼,從而判斷POST命令執(zhí)行成功還是失敗 有兩種方法 status_code=`curl -s -o /dev/null -w \\\"%{http_code}\\\" -X POST \\\"http://xxx\\\"` 注意上述命令兩邊的符號 ``,是鍵盤上數(shù)字1左邊的字符 status_code=$(curl -s -o /dev/null -w \\\"%{http_code}\\\" -X POST \\\"http://xxx

    2024年02月12日
    瀏覽(19)
  • Python入門:常用模塊—xml模塊

    xml是實現(xiàn)不同語言或程序之間進行數(shù)據(jù)交換的協(xié)議,跟json差不多,但json使用起來更簡單 data ???? country name = \\\"Liechtenstein\\\" ???????? rank updated = \\\"yes\\\" 2 / rank ???????? year updated = \\\"yes\\\" 2010 / year ???????? gdppc 141100 / gdppc ???????? neighbor direction = \\\"E\\\" ? name = \\\"Austria\\\" ?

    2024年02月19日
    瀏覽(21)
  • 通過curl訪問k8s集群獲取證書或token的方式

    通過curl訪問k8s集群獲取證書或token的方式

    K8S安全控制框架主要由下面3個階段進行控制,每一個階段都支持插件方式,通過API Server配置來啟用插件。 1. Authentication(認證) 2. Authorization(授權) 3. Admission Control(準入控制) 客戶端(kubectl或curl等)要想訪問K8s集群API Server,一般需要證書、Token或者用戶名+密碼。如果

    2024年01月24日
    瀏覽(26)
  • ArcGIS切片服務獲取切片方案xml文件(conf.xml)

    ArcGIS切片服務獲取切片方案xml文件(conf.xml)

    在使用ArcGIS進行影像、地形等切片時,往往需要保持一致的切片方案才能夠更好的加載地圖服務。 本文介紹如何獲取已經(jīng)發(fā)布好的ArcGIS服務的切片方案xml文件。 當然切片xml文件還可以通過工具 Generate Tile Cache Tiling Scheme 生成,具體操作可參考相關文檔,本文不做說明。 示例

    2023年04月20日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包