freeswitch中Context的理解

  • 现象

注册了两个用户1000和1001。

1 1001拨1000能拨通

2 1001拨9999拨不通,9999在default.xml中有相应的extension对应处理。

疑惑....

  • 分析过程

1 启用log:freeswitch@fs-COM-BT> console loglevel debug

2 呼叫9999

2018-11-15 03:12:13.714925 [INFO] mod_dialplan_xml.c:637 Processing 1001 <1001>->9999 in context public
Dialplan: sofia/internal/1001@192.168.4.207 parsing [public->unloop] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (PASS) [unloop] ${unroll_loops}(true) =~ /^true$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [unloop] ${sip_looped_call}() =~ /^true$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [public->outside_call] continue=true
Dialplan: sofia/internal/1001@192.168.4.207 Absolute Condition [outside_call]
Dialplan: sofia/internal/1001@192.168.4.207 Action set(outside_call=true)
Dialplan: sofia/internal/1001@192.168.4.207 Action export(RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)})
Dialplan: sofia/internal/1001@192.168.4.207 parsing [public->call_debug] continue=true
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [call_debug] ${call_debug}(false) =~ /^true$/ break=never
Dialplan: sofia/internal/1001@192.168.4.207 parsing [public->public_extensions] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [public_extensions] destination_number(9999) =~ /^(10[01][0-9])$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [public->public_extensions] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [public_extensions] destination_number(9999) =~ /^(2015)$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [public->public_did] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [public_did] destination_number(9999) =~ /^(5551212)$/ break=on-false

从上面可以看出,dialplan走了context public。应用比较诡异,1001发起的呼叫应该是走user_context中的定义啊。

检查internal.xml

    <param name="log-auth-failures" value="false"/>
    <param name="forward-unsolicited-mwi-notify" value="false"/>

    <param name="context" value="public"/>
    <param name="rfc2833-pt" value="101"/>

为public。

这个说明什么呢?9999不在internal域内,它不是一个注册extension,因此fs没有使用1001的user_context,而是使用了internal的context。

3 修改配置internal.xml

    <param name="log-auth-failures" value="false"/>
    <param name="forward-unsolicited-mwi-notify" value="false"/>

    <param name="context" value="default"/>
    <param name="rfc2833-pt" value="101"/>

4 重启fs,再次拨号9999,这次成功

2018-11-15 03:08:21.979059 [INFO] mod_dialplan_xml.c:637 Processing 1001 <1001>->9999 in context default
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->unloop] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (PASS) [unloop] ${unroll_loops}(true) =~ /^true$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [unloop] ${sip_looped_call}() =~ /^true$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->route_ana] continue=true
Dialplan: sofia/internal/1001@192.168.4.207 Regex (PASS) [route_ana] () =~ // break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 Action lua(route_ana.lua)
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->tod_example] continue=true
Dialplan: sofia/internal/1001@192.168.4.207 Date/TimeMatch (FAIL) [tod_example] break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->holiday_example] continue=true
Dialplan: sofia/internal/1001@192.168.4.207 Date/TimeMatch (FAIL) [holiday_example] break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->global-intercept] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [global-intercept] destination_number(9999) =~ /^886$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->group-intercept] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [group-intercept] destination_number(9999) =~ /^\*8$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->intercept-ext] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [intercept-ext] destination_number(9999) =~ /^\*\*(\d+)$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->redial] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [redial] destination_number(9999) =~ /^(redial|870)$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->global] continue=true
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [global] ${call_debug}(false) =~ /^true$/ break=never
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [global] ${rtp_has_crypto}() =~ /^(AEAD_AES_256_GCM_8|AEAD_AES_128_GCM_8|AES_CM_256_HMAC_SHA1_80|AES_CM_192_HMAC_SHA1_80|AES_CM_128_HMAC_SHA1_80|AES_CM_256_HMAC_SHA1_32|AES_CM_192_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_32|AES_CM_128_NULL_AUTH)$/ break=never
Dialplan: sofia/internal/1001@192.168.4.207 Regex (PASS) [global] ${endpoint_disposition}(DELAYED NEGOTIATION) =~ /^(DELAYED NEGOTIATION)/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [global] ${switch_r_sdp}(v=0
o=ebang 1038288670 1038288670 IN IP4 192.168.4.208
s=-
c=IN IP4 192.168.4.208
t=0 0
m=audio 10000 RTP/AVP 8 0 18
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:18 G729/8000
a=ptime:20
) =~ /(AES_CM_128_HMAC_SHA1_32|AES_CM_128_HMAC_SHA1_80)/ break=never
Dialplan: sofia/internal/1001@192.168.4.207 Absolute Condition [global]
Dialplan: sofia/internal/1001@192.168.4.207 Action hash(insert/${domain_name}-spymap/${caller_id_number}/${uuid})
Dialplan: sofia/internal/1001@192.168.4.207 Action hash(insert/${domain_name}-last_dial/${caller_id_number}/${destination_number})
Dialplan: sofia/internal/1001@192.168.4.207 Action hash(insert/${domain_name}-last_dial/global/${uuid})
Dialplan: sofia/internal/1001@192.168.4.207 Action export(RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)})
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->snom-demo-2] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [snom-demo-2] destination_number(9999) =~ /^9001$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->snom-demo-1] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [snom-demo-1] destination_number(9999) =~ /^9000$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->eavesdrop] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [eavesdrop] destination_number(9999) =~ /^88(\d{4})$|^\*0(.*)$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->eavesdrop] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [eavesdrop] destination_number(9999) =~ /^779$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->call_return] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [call_return] destination_number(9999) =~ /^\*69$|^869$|^lcr$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->del-group] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [del-group] destination_number(9999) =~ /^80(\d{2})$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->add-group] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [add-group] destination_number(9999) =~ /^81(\d{2})$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->call-group-simo] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [call-group-simo] destination_number(9999) =~ /^82(\d{2})$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->call-group-order] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [call-group-order] destination_number(9999) =~ /^83(\d{2})$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->extension-intercom] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [extension-intercom] destination_number(9999) =~ /^8(10[01][0-9])$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->show_info_1] continue=true
Dialplan: sofia/internal/1001@192.168.4.207 Regex (FAIL) [show_info_1] destination_number(9999) =~ /^(10[01][0-9])$/ break=never
Dialplan: sofia/internal/1001@192.168.4.207 parsing [default->lua_test1] continue=false
Dialplan: sofia/internal/1001@192.168.4.207 Regex (PASS) [lua_test1] destination_number(9999) =~ /^(9999)$/ break=on-false
Dialplan: sofia/internal/1001@192.168.4.207 Action lua(test.lua)
  • 结论

可以使用internal中的context和user_context的context的值可以不同,简化某些复杂场景的应用处理

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值