RE: [reSIProcate] Missed handling when caller hangup before recei ving ANY response
Scott,
Actually there are two cases:
case 1) after hangup, SIP messages are received from
the network. In this case, the created DialogSet,
Dialog, InvitationSessionCreator will be freed in
Dialog->cancel(). But there is still one small bug, in
Dialog::~Dialog()
Dialog::~Dialog()
{
...
delete mAppDialog;
...
}
If mAppDialog is not allocated from the heap, this
will crash the program. So I suggest to add mAppDialog
= NULL in the Dialog::Dialog().
I did have a case which resulted in this crash.
case 2) after hangup, no SIP message is received from
the network. In this case, the INVITE transaction will
time out after 32 seconds and send 408 to TU, i.e,
DUM.
Why we need to wait 32 seconds to release the created
DialogSet, InvitationSessionCreator? So I sugges to
add guard.destroy() in DialogSet::cancel().
kaiduan
--- Scott Godin <slgodin@xxxxxxxxxxxx> wrote:
> In the scenario you described the AppDialogSet
> should get destroyed by DUM
> after 64T1 expires (~32 seconds after the Invite).
> So I don't think your
> change is needed.
>
> Check out:
>
http://list.sipfoundry.org/archive/resiprocate-devel/msg01297.html
>
>
> -----Original Message-----
> From: kaiduan xie [mailto:kaiduanx@xxxxxxxx]
> Sent: Thursday, September 16, 2004 12:55 AM
> To: resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> Subject: [reSIProcate] Missed handling when caller
> hangup before receiving
> ANY response
>
> Hi, all,
>
> In the DialogSet::cancel(), the handling when caller
> hangup before receiving ANY response, including 100
> is
> missed. Applicaiton call AppDialogSet::cancel() to
> hangup.
>
> void
> DialogSet::cancel()
> {
> Destroyer::Guard guard(mDestroyer);
> mCancelled = true;
> if (mDialogs.empty())
> {
> if (mReceivedProvisional && getCreator())
> {
> //unify makeCancel w/ Dialog makeCancel,
> verify both
> //exception to cancel UAS DialogSet?
> auto_ptr<SipMessage>
>
cancel(Helper::makeCancel(getCreator()->getLastRequest()));
>
> mDum.send(*cancel);
> guard.destroy();
> return;
> }
> else
> {
> // xkd-2004-9-15 to handle the case the
> user
> hangup before receiving ANY response, including 100.
> guard.destroy();
> ^^^^^^^^^^^^^^^
> return;
> }
> }
> ....
> }
>
> I simulated this case by commenting out
> mReceivedProvisional = true;
> in DialogSet::dispatch()(line 337)
> and test with Free World Dialup and Jasomi's
> outbound
> proxy.
>
> kaiduan
>
>
>
______________________________________________________________________
>
> Post your free ad now! http://personals.yahoo.ca
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
>
https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel
>
______________________________________________________________________
Post your free ad now! http://personals.yahoo.ca