SIP客户端在取消时响应481

SIP客户端在取消时响应481,sip,voip,pjsip,linphone-sdk,Sip,Voip,Pjsip,Linphone Sdk,我正在尝试为移动设备编写SIP客户端。我对android使用PJSIP,对iOS使用Linphone。有时,客户机响应481请求合法的取消 我阅读了RFC3261第9.1节,试图了解客户机与对话框不匹配的原因。但在我看来,请求URI是匹配的,调用ID头、包含标记的To头和Cseq的数字部分也是匹配的 INVITE sip:#######@127.0.0.0 SIP/2.0 Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-197747523

我正在尝试为移动设备编写SIP客户端。我对android使用PJSIP,对iOS使用Linphone。有时,客户机响应481请求合法的取消

我阅读了RFC3261第9.1节,试图了解客户机与对话框不匹配的原因。但在我看来,请求URI是匹配的,调用ID头、包含标记的To头和Cseq的数字部分也是匹配的

INVITE sip:#######@127.0.0.0 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-197747523180-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>
Max-Forwards: 68
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204936 INVITE
Contact: <sip:##########@127.0.0.1>
User-Agent: Server UAS
Allow: ACK,BYE,CANCEL,INVITE,REGISTER,UPDATE,MESSAGE,INFO,OPTIONS,SUBSCRIBE,NOTIFY,REFER,COMET,PUBLISH,PING,DO
Allow-Events: presence,refer,telephone-event,keep-alive,dialog,message-summary
Supported: privacy,replaces
Accept: application/sdp,application/dtmf-relay,audio/telephone-event,message/sipfrag,text/plain,text/html
Content-Disposition: session;handling=required
Content-Type: application/sdp
Content-Length: 521

v=0
o=root 1954582096 1954582096 IN IP4 127.0.0.2
s=Sonus_UAC
c=IN IP4 127.0.0.1
t=0 0
m=audio 10852 RTP/AVP 0 9 8 18 10 3 111 5 7 110 97 101
a=rtpmap:0 PCMU/8000
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:10 L16/8000
a=rtpmap:3 GSM/8000
a=rtpmap:111 G726-32/8000
a=rtpmap:5 DVI4/8000
a=rtpmap:7 LPC/8000
a=rtpmap:110 speex/8000
a=rtpmap:97 iLBC/8000
a=fmtp:97 mode=30
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv

SIP/2.0 100 Trying
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-197747523180-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: sip:#######@127.0.0.0
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204936 INVITE

SIP/2.0 180 Ringing
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-197747523180-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>;tag=43ye8Yn
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204936 INVITE
User-Agent: belle-sip/1.6.3
Supported: replaces, outbound

CANCEL sip:#######@127.0.0.0 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-171352412518-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>
Max-Forwards: 68
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204936 CANCEL
User-Agent: Server UAS
Warning: 399 127.0.0.0 "Cancel received (0x15) (4007)"
M-Stat: s:0 r:0 l:0 es:0 er:0 el:0
Content-Length: 0

BYE sip:#######@127.0.0.0 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-151544386511-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>;tag=43ye8Yn
Max-Forwards: 68
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204937 BYE
User-Agent: Server UAS
Warning: 399 127.0.0.0 "Cancel received (0x15) (4007)"
M-Stat: s:0 r:0 l:0 es:0 er:0 el:0
Content-Length: 0

SIP/2.0 481 Call/transaction does not exist
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-171352412518-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>;tag=K4PcWbb
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204936 CANCEL

SIP/2.0 501 Not implemented
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-151544386511-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>;tag=43ye8Yn
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204937 BYE

CANCEL sip:#######@127.0.0.0 SIP/2.0
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-171352412518-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>
Max-Forwards: 68
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204937 CANCEL
User-Agent: Server UAS
Warning: 399 127.0.0.0 "Cancel received (0x15) (4007)"
M-Stat: s:0 r:0 l:0 es:0 er:0 el:0
Content-Length: 0

SIP/2.0 481 Call/transaction does not exist
Via: SIP/2.0/UDP 127.0.0.1:5060;rport;branch=z9hG4bK-171352412518-702327557205
From: "WIRELESS CALLER" <sip:##########@my.sipserver.com>;tag=a410144978468667
To: <sip:#######@127.0.0.0>;tag=azviy
Call-ID: 0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq: 204937 CANCEL
邀请sip:127.0.0.0 sip/2.0
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-197747523180-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:
最大前锋数:68
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204936邀请
联系人:
用户代理:服务器UAS
允许:确认、再见、取消、邀请、注册、更新、消息、信息、选项、订阅、通知、参考、COMET、发布、PING、DO
允许事件:存在、引用、电话事件、保持活动、对话框、消息摘要
支持:隐私,替换
接受:应用程序/sdp、应用程序/dtmf中继、音频/电话事件、消息/sipfrag、文本/普通、文本/html
内容配置:会话;处理=必需
内容类型:应用程序/sdp
内容长度:521
v=0
o=IP4 127.0.0.2中的根1954582096 1954582096
s=Sonus\U UAC
c=在IP4 127.0.0.1中
t=0
m=音频10852 RTP/AVP 0 9 8 18 10 3 111 5 7 110 97 101
a=rtpmap:0 PCMU/8000
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=fmtp:18附录B=no
a=rtpmap:10 L16/8000
a=rtpmap:3 GSM/8000
a=rtpmap:111 G726-32/8000
a=rtpmap:5 DVI4/8000
a=rtpmap:7 LPC/8000
a=rtpmap:110 speex/8000
a=rtpmap:97 iLBC/8000
a=fmtp:97模式=30
a=rtpmap:101电话事件/8000
a=fmtp:101 0-16
a=时间:20
a=sendrecv
SIP/2.0 100
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-197747523180-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:sip:@127.0.0.0
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204936邀请
SIP/2.0 180振铃
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-197747523180-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:;tag=43ye8Yn
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204936邀请
用户代理:belle sip/1.6.3
支持:替换、出站
取消sip:127.0.0.0 sip/2.0
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-171352412518-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:
最大前锋数:68
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204936取消
用户代理:服务器UAS
警告:399 127.0.0.0“接收到取消(0x15)(4007)”
M-Stat:s:0r:0l:0es:0er:0el:0
内容长度:0
再见sip:127.0.0.0 sip/2.0
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-151544386511-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:;tag=43ye8Yn
最大前锋数:68
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204937再见
用户代理:服务器UAS
警告:399 127.0.0.0“接收到取消(0x15)(4007)”
M-Stat:s:0r:0l:0es:0er:0el:0
内容长度:0
SIP/2.0 481呼叫/事务不存在
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-171352412518-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:;标签=K4PcWbb
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204936取消
SIP/2.0 501未实施
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-151544386511-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:;tag=43ye8Yn
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204937再见
取消sip:127.0.0.0 sip/2.0
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-171352412518-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:
最大前锋数:68
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204937取消
用户代理:服务器UAS
警告:399 127.0.0.0“接收到取消(0x15)(4007)”
M-Stat:s:0r:0l:0es:0er:0el:0
内容长度:0
SIP/2.0 481呼叫/事务不存在
Via:SIP/2.0/UDP 127.0.0.1:5060;rport;分支机构=z9hG4bK-171352412518-702327557205
来自:“无线呼叫方”;标签=a410144978468667
致:;tag=azviy
呼叫ID:0ce8e8201a70540029d0ec3402005633@127.0.0.2:5060-b4-3551-277
CSeq:204937取消

出于隐私原因,我已删除了识别详细信息。

取消请求还有一个额外要求(RFC3261第9.1章):

客户端构造的取消必须只有一个Via头 字段值与正在处理的请求中的top Via值匹配 取消。对这些标题字段使用相同的值允许 要与其取消的请求匹配的取消

当UAS收到取消请求时,它必须找到相应的INVITE服务器事务。RFC3261第9.2章:

TU通过采用 取消请求,然后假设请求方法为 除“取消”或“确认”和“应用事务匹配”之外的任何操作 第17.2.3节的程序。匹配的事务是 取消


匹配条件之一是CANCEL请求顶部Via头中的branch参数:它必须与创建服务器事务的INVITE请求中的参数相同。由于INVITE和CANCEL请求中的分支参数不同,UAS无法找到服务器事务并取消INVITE。

我实际上检查了分支,但没有意识到中间部分不匹配。