在freeswitch拨号计划中,我创建一个扩展debug_001并桥接到另一个freeswitch实例。
<extension name="debug_001">
<condition field="destination_number" expression="^\+(49301234567)$">
<action application="export" data="sip_invite_params=user=phone"/>
<action application="export" data="sip_cid_type=pid"/>
<action application="export" data="t38_passthru=true"/>
<action application="export" data="sip_from_uri=${sip_from_uri}"/>
<action application="bridge" data="sofia/gateway/FS2/$1"/>
</condition>
</extension>
那很好,扩展名匹配在正确的情况下,并且呼叫桥接到FS2。但是,如果FS2实例发送重新邀请,则FS1实例不会将(重新)邀请桥接到调用方。在reinvite中,设置了一个我们要在Caller网站上解析的自定义标头字段。
这是显示SIP流的梯形图。
或更详细地讲:
FS1不会将重新邀请桥接到呼叫者。也许重新邀请被解析为FS1和FS2之间的保持连接,因为SDP或其他方面没有任何变化,仅插入了自定义标头ist。无论如何,我应该定义什么动作来通过(重新)邀请?
我认为问题在于,如果(重新)邀请的SDP发生更改,Freeswitch仅绕过(重新)邀请,在这种情况下,SDP不会是不同的,并且sofia将此表示为重复SDP,如您在此处看到的:
fac8529a-e0d9-11e8-91c6-0d38c130bd96 2018-11-05 10:05:46.508841 [DEBUG] sofia.c:7048 Channel sofia/external/49301234567 entering state [ready][200]
fac8529a-e0d9-11e8-91c6-0d38c130bd96 2018-11-05 10:05:46.508841 [NOTICE] sofia.c:8123 Channel [sofia/external/49301234567] has been answered
fac8529a-e0d9-11e8-91c6-0d38c130bd96 2018-11-05 10:05:46.508841 [DEBUG] switch_channel.c:3773 (sofia/external/49301234567) Callstate Change EARLY -> ACTIVE
fac8529a-e0d9-11e8-91c6-0d38c130bd96 2018-11-05 10:05:46.568848 [DEBUG] switch_rtp.c:7254 Correct audio ip/port confirmed.
fac8529a-e0d9-11e8-91c6-0d38c130bd96 2018-11-05 10:05:54.228841 [DEBUG] sofia.c:7048 Channel sofia/external/49301234567 entering state [received][100]
fac8529a-e0d9-11e8-91c6-0d38c130bd96 2018-11-05 10:05:54.228841 [DEBUG] sofia.c:7055 Duplicate SDP
fac8529a-e0d9-11e8-91c6-0d38c130bd96 v=0
fac8529a-e0d9-11e8-91c6-0d38c130bd96 o=- 1541408745 2 IN IP4 10.1.11.10
fac8529a-e0d9-11e8-91c6-0d38c130bd96 s=-
fac8529a-e0d9-11e8-91c6-0d38c130bd96 c=IN IP4 10.1.11.10
fac8529a-e0d9-11e8-91c6-0d38c130bd96 b=AS:64
fac8529a-e0d9-11e8-91c6-0d38c130bd96 t=0 0
fac8529a-e0d9-11e8-91c6-0d38c130bd96 m=audio 10374 RTP/AVP 8 101
fac8529a-e0d9-11e8-91c6-0d38c130bd96 a=rtpmap:8 PCMA/8000
fac8529a-e0d9-11e8-91c6-0d38c130bd96 a=rtpmap:101 telephone-event/8000
fac8529a-e0d9-11e8-91c6-0d38c130bd96 a=ptime:20
因此,我需要一个解决方案来告诉sofia也发送重复的SDP,或者Sofia还解析(重新)邀请标头中的自定义标头字段。 Brian West在此JIRA Ticket中写道,此行为是代理功能,而Freeswitch不是代理。但是在我们的例子中,SDP是相同的,但是自定义标头字段是不同的,因此它不是代理行为,应绕过不同的Call-Leg。