< Previous by Date Date Index Next by Date >
< Previous in Thread Thread Index  

RE: [reSIProcate] Handling unanswered INVITE requests


Thanks Derek - unanswered invites that are not cancelled now work as
expected!!

But there is still a problem in the cancel case.  If you cancel an
unanswered invite - when the 408 eventually comes up from the stack then
this code in DialogSet::dispatch:

...
if(mCancelled)
{
        dialog->cancel();
        return;
}
else
{
        DebugLog ( << "###  Calling CreateAppDialog ### " << msg);
....

ends up calling the Dialog destructor - which tries to delete mAppDialog -
but it has never been created (or initialized) and the code traps.

Any ideas on a fix?
- we could init mAppDialog to NULL - therefor the delete would be harmless
or 
- we could create an AppDialog first

Thanks,

Scott

-----Original Message-----
From: Derek MacDonald [mailto:derek@xxxxxxxx] 
Sent: Wednesday, September 08, 2004 1:46 PM
To: 'Scott Godin'
Subject: RE: [reSIProcate] Handling unanswered INVITE requests

This is the same problem Dom was describing; lack of to tags in responses
from the stack.  I have reciprocate bracnehd at the moment(but not DUM) so I
didn't notice this glitch.

Also, I going to talk with rjs about making dum more 2543 and erroneous tag
friendly; probably post on that sometime in the next 2 weeks.

--Derek

> -----Original Message-----
> From: Scott Godin [mailto:slgodin@xxxxxxxxxxxx]
> Sent: Wednesday, September 08, 2004 7:13 AM
> To: 'Derek@xxxxxxxx'
> Subject: RE: [reSIProcate] Handling unanswered INVITE requests
> 
> Derek,
> 
> Did you get a chance to check this out, or at least verify if this is a
> bug
> or not?
> 
> I fixed it by adding the following code to DialogSet::dispatch() - but I'm
> not sure if it is 100% correct:
> 
> ...
> switch(resonse.header(h_CSeq).method())
> {
>       case INVITE:
>       case SUBSCRIBE:
>       case BYE:
>       case ACK:
>               if(response.header(h_To).exists(p_tag))
>               {
>                       break;  // dialog creating/handled by dialog
>             }
>             else
>             {
>                       //throw away, informational status message
> eventually
> *** new               if(m_Cancelled)
> *** new               {
> *** new                       guard.destroy();
> *** new               }
>                       return;
>               }
> ...
> 
> It is easily reproducible by just initiating an INVITE to a non existing
> CONTACT and don't use an outbound proxy - then call cancel() on the
> dialogset without receiving any responses.  The 488 from the stack gets
> ignored by DUM.
> 
> Thanks,
> 
> Scott
> 
> 
> -----Original Message-----
> From: Scott Godin
> Sent: Wednesday, August 18, 2004 9:57 AM
> To: 'Derek@xxxxxxxx'
> Subject: RE: [reSIProcate] Handling unanswered INVITE requests
> 
> ...
> 
> "The AppDialogSet will always be destroyed when the DialogSet is
> destroyed,
> which may be 32 seconds after cancel was called."
> 
> Odd - my AppDialogSet is never getting destroyed - even after 32 seconds.
> As a result the
>  My flow is:
> myAppDialogSet = new MyAppDialogSet(*dum, NULL));
> dum->send(dum->makeInviteSession(.., myAppDialogSet));
> ...
> myAppDialogSet->cancel();
> 
> A log is attached (where cancel was never even called - but the log is
> very
> similar) - in the code it looks like DialogSet::dispatch doesn't handle
> the
> 488 INVITE response the stack generates, since it has no To tag - I could
> be
> wrong though.
> 
> I didn't plan on going to Sipit - it's in Taipei right?  Have you ever
> been?
> Is it worth while?
> 
> I love to have a quick chat with you sometime via the phone - just to
> quickly talk about the DUM layer and your plans and timelines.  If your OK
> with this my number is 1-800-410-1051 x127 (or just say Scott) - or send
> me
> your number.
> 
> Thanks again!
> 
> Scott
> 
> 
>