概述
freeswitch是一款简单好用的VOIP开源软交换平台。
sip信令中对于主被叫号码有多个头域显示,不同的配置参数又有多种头域组合,当我们在使用fs处理信令时,应该如何设置和获取主被叫号码在恰当的头域中。
环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.6.20
GCC:4.8.5
测试方案
A->fs1(55.138)->fs2(55.137)->B
A号码使用10011,B号码使用13712345678。
其中fs1上设置号码,fs2上展示获取号码。
rpid模式
fs1使用rpid模式 {sip_cid_type=rpid} ,也是fs的默认模式。拨号计划设置如下。
<action application="export" data="effective_caller_id_name=11111"/>
<action application="export" data="effective_caller_id_number=22222"/>
<action application="bridge" data="{sip_cid_type=rpid,sip_invite_full_from='33333' <sip:+44444@test.com>;tag=QN11rSr6yH0vF,sip_invite_to_uri=<sip:12345678@test.com>}sofia/external/$1@10.55.55.137:5080"/>
fs1发出的invite信令如下,头域中会使用“Remote-Party-ID”展示主叫号码。
INVITE sip:13712345678@10.55.55.137:5080 SIP/2.0
From: 33333 <sip:+44444@test.com>;tag=QN11rSr6yH0vF
To: <sip:12345678@test.com>
Remote-Party-ID: "11111" <sip:22222@10.55.55.138>;party=calling;screen=yes;privacy=off
fs2使用log展示不同的通道变量值。日志如下。
EXECUTE sofia/external/+44444@test.com log(destination_number=13712345678)
EXECUTE sofia/external/+44444@test.com log(sip_to_user=12345678)
EXECUTE sofia/external/+44444@test.com log(caller_id_name=11111)
EXECUTE sofia/external/+44444@test.com log(caller_id_number=22222)
EXECUTE sofia/external/+44444@test.com log(sip_from_user=+44444)
EXECUTE sofia/external/+44444@test.com log(sip_from_user_stripped=44444)
pid模式
fs1使用pid模式 {sip_cid_type=pid} 。拨号计划设置如下。
<action application="export" data="effective_caller_id_name=11111"/>
<action application="export" data="effective_caller_id_number=22222"/>
<action application="bridge" data="{sip_cid_type=pid,sip_invite_full_from='33333' <sip:+44444@test.com>;tag=QN11rSr6yH0vF,sip_invite_to_uri=<sip:12345678@test.com>}sofia/external/$1@10.55.55.137:5080"/>
fs1发出的invite信令如下,头域中会使用“P-Asserted-Identity”展示主叫号码。
INVITE sip:13712345678@10.55.55.137:5080 SIP/2.0
From: 33333 <sip:+44444@test.com>;tag=QN11rSr6yH0vF
To: <sip:12345678@test.com>
P-Asserted-Identity: "11111" <sip:22222@10.55.55.138>
fs2使用log展示不同的通道变量值。日志如下。
EXECUTE sofia/external/+44444@test.com log(destination_number=13712345678)
EXECUTE sofia/external/+44444@test.com log(sip_to_user=12345678)
EXECUTE sofia/external/+44444@test.com log(caller_id_name=11111)
EXECUTE sofia/external/+44444@test.com log(caller_id_number=22222)
EXECUTE sofia/external/+44444@test.com log(sip_from_user=+44444)
EXECUTE sofia/external/+44444@test.com log(sip_from_user_stripped=44444)
none模式
fs1使用none模式 {sip_cid_type=none} 。拨号计划设置如下。
<action application="export" data="effective_caller_id_name=11111"/>
<action application="export" data="effective_caller_id_number=22222"/>
<action application="bridge" data="{sip_cid_type=none,sip_invite_full_from='33333' <sip:+44444@test.com>;tag=QN11rSr6yH0vF,sip_invite_to_uri=<sip:12345678@test.com>}sofia/external/$1@10.55.55.137:5080"/>
fs1发出的invite信令如下,头域中只有“from”展示主叫号码。
INVITE sip:13712345678@10.55.55.137:5080 SIP/2.0
From: 33333 <sip:+44444@test.com>;tag=QN11rSr6yH0vF
To: <sip:12345678@test.com>
fs2使用log展示不同的通道变量值。日志如下。
EXECUTE sofia/external/+44444@test.com log(destination_number=13712345678)
EXECUTE sofia/external/+44444@test.com log(sip_to_user=12345678)
EXECUTE sofia/external/+44444@test.com log(caller_id_name=33333)
EXECUTE sofia/external/+44444@test.com log(caller_id_number=+44444)
EXECUTE sofia/external/+44444@test.com log(sip_from_user=+44444)
EXECUTE sofia/external/+44444@test.com log(sip_from_user_stripped=44444)
总结
fs收到invite信令时,通过“caller_id_number”获取主叫号码的头域优先级,Remote-Party-ID,P-Asserted-Identity,From。
fs收到invite信令时,通过“destination_number”获取的被叫号码是requestline中的号码。
fs收到invite信令时,通过“sip_from_user”和“sip_to_user”获取from和to头域中的号码。
空空如常
求真得真