当在 SIP/H.323/SS7 协议间做转换的时候,通常我们需要将一个 H.323/SS7 Call Leg 的 disconnect cause 传递到另外一个 SIP Call Leg。以前一直都是按照 cisco IOS 的标准将它和 SIP status code 间做个映射表。
http://www.cisco.com/en/US/docs/ios/12_2t/12_2t11/feature/guide/ftmap.html
最近在跟踪 8801 路由的时候,发觉在两个 softswitch 间 disconnect cause 没有被可靠的传递,使得在呼叫涉及的 switch 上看到的 cause 不一致。而有些 TDM switch 对这个 disconnect cause 是很敏感的,一般涉及到它们的路由跳转,以及相关的呼叫分析报表等。
利用 RFC 3326 新增的 SIP Reason Header 可以很好的放置对应的 Q.850 cause。pjsip 不支持这个 Header,sofia-sip 则支持。也许做 SIP Server 功能最齐全的还是 resiprocate。
Examples are:
Reason: SIP ;cause=200 ;text="Call completed elsewhere"
Reason: Q.850 ;cause=16 ;text="Terminated"
Reason: SIP ;cause=600 ;text="Busy Everywhere"
Reason: SIP ;cause=580 ;text="Precondition Failure"