[reSIProcate] terminating a non-responsive or misbehavingdialog/dialogset in DUM
Byron Campen
bcampen at estacado.net
Thu Sep 6 10:10:35 CDT 2007
We should not be basing ACK retransmission on CSeq, that's just
silly (ACK retransmission is a transaction-layer mechanism, even if
it's handled by the TU). I think InviteSession::AckMap should use
transaction-id as its key. Any objections?
Best regards,
Byron Campen
> The 200Ok with the invalid cseq is causing the stack to consider the
> transaction finished, but DUM thinks it's a 200 for the re-invite
> and still
> waits for the 200 to the re-invite. I've tested this and confirmed
> the
> problem under a long-running bulk call test.
>
> Thanks,
>
> -justin
>
> -----Original Message-----
> From: Scott Godin [mailto:slgodin at icescape.com]
> Sent: Thursday, September 06, 2007 10:15 AM
> To: Justin Matthews; resiprocate-devel at list.resiprocate.org
> Subject: RE: [reSIProcate] terminating a non-responsive or
> misbehavingdialog/dialogset in DUM
>
> The 408 you receive from the re-Invite should be received in the
> Waiting
> To Terminate state. This should then cause a BYE to be sent, and the
> dialog destroyed properly. I don't think calling end() twice
> should be
> required.
>
> void
> InviteSession::dispatchWaitingToTerminate(const SipMessage& msg)
> {
> if (msg.isResponse() &&
> msg.header(h_CSeq).method() == INVITE)
> {
> if(msg.header(h_StatusLine).statusCode() / 200 == 1) // Note:
> stack ACK's non-2xx final responses only
> {
> // !jf! Need to include the answer here.
> sendAck();
> }
> sendBye();
> transition(Terminated);
> mDum.mInviteSessionHandler->onTerminated(getSessionHandle(),
> InviteSessionHandler::Ended);
> }
> }
>
> Scott
>
>> -----Original Message-----
>> From: resiprocate-devel-bounces at list.resiprocate.org
>> [mailto:resiprocate-devel-bounces at list.resiprocate.org] On Behalf Of
>> Justin Matthews
>> Sent: Wednesday, September 05, 2007 11:04 AM
>> To: resiprocate-devel at list.resiprocate.org
>> Subject: [reSIProcate] terminating a non-responsive or
>> misbehavingdialog/dialogset in DUM
>>
>> Hi,
>>
>> A UA is sending an invalid cseq number in a 200Ok response to a re-
>> INVITE.
>> DUM is consuming this response as a 200OK to the initial INVITE and
>> ACK'ing
>> the 200. When trying to end the dialogset & dialog, the
>> invitesession
>> state
>> gets stuck in WaitingToTerminate because the 200 is never received:
>>
>> Bad UA resip/dum
>> 1) reINVITE (cseq=2) <-
>> 2) 200 (cseq = 1)->
>> 3) ACK <-
>>
>> There is code in invitesession::end() where if the state is
>> WaitingToTerminate, the invitesession will send a BYE and transition
> to
>> Terminated (note there is a comment from Scott <slg> about why that
>> code is
>> there). This is good because if Bad UA doesn't respond, then a
>> 408 is
>> expected from the stack and this will destroy the
>> invitesession/dialog/dialogset.
>>
>> So to destroy my session I can call end once and then have some
> timeout
>> value occur and if the session is not terminated, call end again and
> it
>> is
>> then guaranteed to be terminated.?
>>
>> Questions/Comments:
>>
>> 1) Would it be bad if this type of functionality is exposed to the
>> dialogset
>> (dialogset::end) as well (calling end twice)
>> 2) Are there any other scenarios similar to this one that anyone can
>> think
>> of that would not be solved by calling end twice?
>> 3) Is this problem really just the only known exception that will
> cause
>> a
>> session to stay active and can be solved in another way?
>>
>> Thanks!
>>
>> -justin
>>
>> _______________________________________________
>> resiprocate-devel mailing list
>> resiprocate-devel at list.resiprocate.org
>> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
>
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel at list.resiprocate.org
> https://list.resiprocate.org/mailman/listinfo/resiprocate-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2423 bytes
Desc: not available
URL: <http://list.resiprocate.org/pipermail/resiprocate-devel/attachments/20070906/b767d198/attachment.bin>
More information about the resiprocate-devel
mailing list