目录

简介

背景

一般呼叫流场景

SIP规范化脚本

验证SIP信令消息

来自MotoPBX的入站SIP邀请

删除“rport”参数后发送到CUCM的规范化INVITE

规范化前200 OK响应出站到MotoPBX

规范化出站200 OK响应

简介

本文档介绍与Cisco Unified Communications Manager(CUCM)和Motorola PBX(MotoPBX)系统的会话初始协议(SIP)集成相关的互操作性问题。MotoPBX系统符合SIP RFC 3581，而CUCM符合SIP RFC 3261。由于此RFC合规性问题，在两个呼叫处理服务器（即CUCM和Motorola PBX）之间的SIP呼叫建立存在问题。

背景

Motorola PBX在SIP INVITE的“Via”报头字段中有一个“rport”参数，允许客户端请求服务器将响应发回源IP地址和端口，该源IP地址和端口是RFC 3581中包含的请求。“rport”参数类似于“received”参数，但“rport”包含端口号，而不是IP地址。此报告参数不属于RFC 3261，因此CUCM在SIP信令“Via”报头字段中不包含该参数。

一般呼叫流场景

在上述场景中，CUCM和MotoPBX系统之间的传入SIP呼叫建立与对讲机话筒的终端存在问题。当CUCM从MotoPBX收到带有“rport”参数的SIP INVITE时，它会在“Via”报头字段中发送200 OK响应，而不带“rport”参数。此外，还在MotoPBX未确认的会话描述协议(SDP)消息正文中添加了一些其他字段，如“远程方ID”、“P断言身份”报头字段和带宽信息。由于RFC合规性问题，呼叫设置失败。因此，为了缓解呼叫建立问题，设计了SIP规范化脚本，该脚本从传入SIP邀请中删除“rport”参数，并在出站200 OK响应中将“rport”参数附加到MotoPBX发送的同一SIP邀请。脚本还删除了前面提到的其他报头字段。

SIP规范化脚本

M={}

function M.inbound_INVITE(msg)                     /*Incoming SIP Invite*/

local invite = msg:getHeader("Via")

local rport=string.gsub(invite,"rport","")         /*Remove rport parameter*/

msg:modifyHeader("Via", rport)

end

function M.outbound_200_INVITE(msg)                 /*Outgoing 200 OK response*/

msg:addHeaderValueParameter("Via","rport","5060")   /*Populating rport with 5060*/

msg:removeHeader("P-Asserted-Identity")             /*Removing headers

and bandwidth information*/

msg:removeHeader("Remote-Party-ID")

local sdp = msg:getSdp()

local sdpremove=string.gsub(sdp,"b=TIAS:%d%d%d%d%d","")

local sdp=string.gsub(sdpremove,"b=AS:%d%d","")

msg.setSdp(sdp)

end

return M

验证SIP信令消息

来自MotoPBX的入站SIP邀请

INVITE sip:8888@10.10.21.14;user=phone SIP/2.0

Via:SIP/2.0/UDP192.168.5.10:5060;

branch=z9hG4bK3ad3379d104e957767cf471e77bf2738;rport

删除“rport”参数后发送到CUCM的规范化INVITE

INVITE sip:8888@10.10.21.14;user=phone SIP/2.0

Via: SIP/2.0/UDP 192.168.5.10:5060;

branch=z9hG4bK3ad3379d104e957767cf471e77bf2738;

规范化前200 OK响应出站到MotoPBX

Via: SIP/2.0/UDP 192.168.5.10:5060;

branch=z9hG4bK3ad3379d104e957767cf471e77bf2738;

From: <sip:2202@192.168.5.10;user=phone>;

tag=60817f1777729d1062239475498676f4

To: <sip:8888@10.10.21.14;user=phone>;

tag=107~f59e0381-0cdb-4ad3-b769-99c8c3c177c4-20600964

Date: Thu, 27 Feb 2014 03:22:02 GMT

Call-ID: 3f42d82e786bf9f332567ca566f3c1dd

CSeq: 1 INVITE

Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY

Allow-Events: presence, kpml

Supported: replaces

Supported: X-cisco-srtp-fallback

Supported: Geolocation

Session-Expires: 5000;refresher=uas

Require: timer

P-Asserted-Identity: "Kosal-LT"

Remote-Party-ID: "Kosal-LT"

;party=called;screen=yes;privacy=off

Contact: <sip:8888@10.10.21.14:5060>

Content-Type: application/sdp

Content-Length: 232

v=0

o=CiscoSystemsCCM-SIP 107 1 IN IP4 10.10.21.14

s=SIP Call

c=IN IP4 10.10.21.14

b=TIAS:64000

b=AS:64

规范化出站200 OK响应

SIP/2.0 200 OK

Via: SIP/2.0/UDP 192.168.5.10:5060;

branch=z9hG4bK3ad3379d104e957767cf471e77bf2738;;rport=5060

From: <sip:2202@192.168.5.10;user=phone>;tag=60817f1777729d1062239475498676f4

To: <sip:8888@10.10.21.14;user=phone>;

tag=107~f59e0381-0cdb-4ad3-b769-99c8c3c177c4-20600964

Date: Thu, 27 Feb 2014 03:22:02 GMT

Call-ID: 3f42d82e786bf9f332567ca566f3c1dd

CSeq: 1 INVITE

Allow: INVITE, OPTIONS, INFO, BYE, CANCEL, ACK, PRACK, UPDATE, REFER, SUBSCRIBE, NOTIFY

Allow-Events: presence, kpml

Supported: replaces

Supported: X-cisco-srtp-fallback

Supported: Geolocation

Session-Expires: 5000;refresher=uas

Require: timer

Contact: <sip:8888@10.10.21.14:5060>

Content-Length: 213

Content-Type: application/sdp

v=0

o=CiscoSystemsCCM-SIP 107 1 IN IP4 10.10.21.14

s=SIP Call

c=IN IP4 10.10.21.14

t=0 0

上一个示例说明SIP规范化（在SIP中继的SIP配置文件下应用）可解决互操作性问题，并且SIP呼叫设置会在不出现任何问题的情况下进行。