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

RE: [reSIProcate] FW: DUM redirection bug


I think the absence of a Redirect Manager is indicating that you don’t want to handle redirections.  Therefore if there is no redirect manager then a 3xx response should be handled in exactly the same manner as any other error response.

 

Ie.  A Dialog and InviteSession is created for a very short period of time and onFailure and onTerminated are called.  The 3xx response code can be detected in the onFailure callback.

 


From: resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx [mailto:resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Micky Kaufmann
Sent: Tuesday, November 01, 2005 3:32 AM
To: resiprocate-devel@xxxxxxxxxxxxxxxxxxx
Subject: [reSIProcate] FW: DUM redirection bug

 

Hi All,

 

I think there's a bug in DUM:

 

If someone decides not to use a redirect manager - 3xx responses are not handled correctly!

ClientInviteSession::handleRedirect which calls onRedirected callback is called only if there's a redirect manager!

Moreover in case of a redirect message (with no redirect manager) an InviteSession is created.

 

In such a case no InviteSession should be created, the only thing to do is to destroy the DialogSet.

 

I think a fix for that should be:

 

1. Add a callback to DialogSetHandler: virtual void onRedirectNoRedirectManager (AppDialogSetHandle, const SipMessage& msg)=0;

2. Update DialogSet::dispatch function as follows:

.
.
.
   if (msg.isRequest())
   {
.
.
.
   }
   else // the message is a response
   {
.
.
.
      switch(mState)
      {
         case Initial:
.
.
            else if((code < 400) && (!mDum.mRedirectManager.get()))
            {
               mDum.mDialogSetHandler->onRedirectNoRedirectManager(mAppDialogSet->getHandle(), msg);
               mState = Destroying;
               mDum.destroy(this);
            }
.
.
.