RE: [reSIProcate] Missed handling when caller hangup before receiving ANY response
- From: "Derek MacDonald" <derek@xxxxxxxx>
- Date: Thu, 16 Sep 2004 15:59:06 -0700
For case 1, mAppDialog is set to 0 in Dialog::Dialog. Are you allocating an
AppDialog as a stack variable?
As for the early destruction when the BYE is sent, I don't really have a
strong opinion on that. Right now the onTerminated call conveys how
the-Dialog ended; BYE-200 vs BYE-408.
--Derek
> -----Original Message-----
> From: resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx [mailto:resiprocate-
> devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of kaiduan xie
> Sent: Thursday, September 16, 2004 10:00 AM
> To: Scott Godin; resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> Subject: RE: [reSIProcate] Missed handling when caller hangup before
> receiving 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
> _______________________________________________
> resiprocate-devel mailing list
> resiprocate-devel@xxxxxxxxxxxxxxxxxxx
> https://list.sipfoundry.org/mailman/listinfo/resiprocate-devel