[reSIProcate] Dialog not found when 180 To field has no Tag
DUM’sters
Sorry if this has been covered before – I didn’t see it in the archives.
I have a Uac which is initiating calls with a Uas. The Uas doesn’t send
a Tag with the To field in the 180 response. The subsequent 200 (which
includes the Tag) fails to be found when looked up in the dialog map.
Do I need to use the early dialog mechanism or is this really an issue?
Thanks for your help!
Stephen -
Details -------------------
According to RFC – 3261 : 12.1.2 UAC Behavior pg 71:
“The local sequence number MUST be set to the value of the sequence
number in the CSeq header field of the request. The remote sequence
number MUST be empty (it is established when the remote UA sends a
request within the dialog). The call identifier component of the
dialog ID MUST be set to the value of the Call-ID in the request.
The local tag component of the dialog ID MUST be set to the tag in
the From field in the request, and the remote tag component of the
dialog ID MUST be set to the tag in the To field of the response. A
UAC MUST be prepared to receive a response without a tag in the To
field, in which case the tag is considered to have a value of null.
This is to maintain backwards compatibility with RFC 2543
<http://www.faqs.org/rfcs/rfc2543.html>, which
did not mandate To tags.”
Here is what I see in the logs
DialogId.cxx:50 | DialogId::DialogId:
8467be186c3de14a@xxxxxxxxxxxxxxxxxxxxxx
Dialog.cxx:198 | ************** Created Dialog as UAC **************
Dialog.cxx:199 | mRemoteNameAddr: <sip:UAC@xxxxxxxxxx:5060>
Dialog.cxx:200 | mLocalNameAddr: <sip:UAC@xxxxxxxxxxxx:12005>;tag=23482900
Dialog.cxx:201 | mLocalContact: <sip:UAC>
Dialog.cxx:202 | mRemoteTarget: <sip:MyName@xxxxxxxxxx:5060>
Dialog.cxx:207 | Dialog::Dialog 8467be186c3de14a@xxxxxxxxxxxxxxxxxxxxxx
DialogSet.cxx:600 | ### Calling CreateAppDialog ###:
SIP/2.0 180 Ringing
To: <sip:UAC@xxxxxxxxxx:5060>
From: <sip:UAC@xxxxxxxxxxxx:12005>;tag=23482900
Via: SIP/2.0/UDP
10.20.10.245:12005;branch=z9hG4bK-d87543-f16d4916bb41f15a-1--d87543-
Call-ID: 8467be186c3de14a@xxxxxxxxxxxx
CSeq: 1 INVITE
Contact: <sip:MyName@xxxxxxxxxx:5060>
Content-Length: 0
Later when the 200 is processed
SIP/2.0 200 OK
To: <sip:UAC@xxxxxxxxxx:5060>;tag=8d4ad903
From: <sip:UAC@xxxxxxxxxxxx:12005>;tag=23482900
Via: SIP/2.0/UDP
10.20.10.245:12005;branch=z9hG4bK-d87543-f16d4916bb41f15a-1--d87543-
Call-ID: 8467be186c3de14a@xxxxxxxxxxxx
CSeq: 1 INVITE
Contact: <sip:MyName@xxxxxxxxxx:5060>
Content-Type: application/sdp
Content-Length: 226
DialogUsageManager.cxx:1308 | Looking for dialogSet:
8467be186c3de14a@xxxxxxxxxxxxxxxxxxxxx in map:
DialogUsageManager.cxx:1309 | [8467be186c3de14a@xxxxxxxxxxxxxxxxxxxxx ->
00E66240]
DialogUsageManager.cxx:1210 | DialogUsageManager::processResponse:
SipResp: 200 tid=f16d4916bb41f15a cseq=INVITE
contact=MyName@xxxxxxxxxx:5060 / 1 from(wire)
DialogId.cxx:50 | DialogId::DialogId:
8467be186c3de14a@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
When findDialog is called with the msg it does not find the dialog that
was created from the 180 response. A short time later an assertion is
raised in Dialog::forked().
Assertion failed: msg.isResponse() &&
msg.header(h_StatusLine).statusCode() < 200, file .\Dialog.cxx, line 1050