我们在主机 A 上运行一个 FreeSwitch 实例,它使用 SOFIA 模块向在主机 B 上运行的 3CX 实例发出出站呼叫。
一切正常,除了挂断:主机 A 发送的 BYE 数据包未被 404 用户未知的 3CX 主机接受。
在第一次(工作)呼叫之后,由于线路被占用,直到我们重新启动整个 freeswitch-service 后,才能发起更多呼叫。
网关配置如下:
<include>
<gateway name="default">
<param name="realm" value="<host B>:5059"/>
<param name="username" value="59"/>
<param name="password" value="<the password>"/>
<param name="register-transport" value="udp"/>
<param name="extension" value="59"/>
<param name="from-user" value="59"/>
<param name="expire-seconds" value="800"/>
<param name="register" value="true"/>
<param name="register-transport" value="udp"/>
<param name="context" value="public"/>
<param name="caller-id-in-from" value="false“/>
<param name="extension-in-contact" value="true"/>
<param name="cid-type" value="rpid"/>
</gateway>
</include>
该授权适用于除 BYE 之外的所有其他软件包。我们还打开了 SIP-tracing 并验证了 Proxy-Athorization 标头设置是否正确:
BYE sip:<destination number>@<host B>:5059 SIP/2.0
Via: SIP/2.0/UDP <host A>:5059;rport;branch=z9hG4bKpB6QZ9aU643pH
Max-Forwards: 70
From: "pi" <sip:59@<host B>:5059>;tag=jXU3S8avD9tQH
To: <sip:<dest number>@<host B>:5059>;tag=4442ed0d
Call-ID: fac6951d-4ab5-123a-0d9b-dca632517e68
CSeq: 37449519 BYE
User-Agent: FreeSWITCH-mod_sofia/1.10.6-release-7-1ff9d0a60e~32bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY
Supported: timer, path, replaces
Proxy-Authorization: Digest username="59", realm="3CXPhoneSystem", nonce="414d535960cc5fda38:061e13fce3696c0ade88da4c548cab3a", algorithm=MD5, uri="sip:<dest number>@<host B>:5059", response="9d75bd5d59cc7b2111e005259d04aa65"
Reason: Q.850;cause=16;text="NORMAL_CLEARING"
Content-Length: 0
检查 3CX 端的 SIP 包,我们被告知根本不应该授权 BYE 包使其工作。
因此,我们将以下设置添加到正在使用的配置文件中:
<param name="auth-all-packets" value="false"/>
但 Sofia(或 Freeswitch?)仍然授权 BYE 包。
任何人都可以帮助我们吗?这会很棒!
对于我们的场景,这个问题可以在 3CX 端解决:
我们的扩展点已配置为“传真端点”。将其切换到“通用 voip 端点”后,一切都按预期工作。(不确定此处的 3CX 术语是否正确)