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

[reSIProcate] exception when receiving 200 from re-invite request with modified to: tag


Exception occurs during following scenario:

 

DUM receives a call and establishes a session as the UAS.

 

DUM sends re-INVITE request

 

DUM receives 200 ok response with a different to: tag then the established session.

 

The dialogset is found, but dialogset.cxx tries to create a new dialog from this 200 and calls the following code:

 

Dialog.cxx, in Dialog constructor:

 

mLocalContact = creator->getLastRequest()->header(h_Contacts).front();

 

I believe that getLastRequest does not contain a contact because this call was established from an inbound session.

 

For now I just patched it this way, is there a better way?  If not I will commit this.

-------------------

BaseCreator* creator = mDialogSet.getCreator();

//assert(creator);// !jf! throw or something here

//assert(creator->getLastRequest()->exists(h_Contacts));

//assert(!creator->getLastRequest()->header(h_Contacts).empty());

if( NULL == creator )

{

ErrLog(<< "BaseCreator is null for DialogSet");

      ErrLog(<< response);

      throw Exception("BaseCreator is null for DialogSet", __FILE__, __LINE__);

}

                               

SharedPtr<SipMessage> lastRequest(creator->getLastRequest());

 

if( NULL == lastRequest ||

      !lastRequest->exists(h_Contacts) ||

      lastRequest->header(h_Contacts).empty())

{

      ErrLog(<< "No contact available for dialogset's last request");

      ErrLog(<< response);

      throw Exception("No contact available for dialogset's last request", __FILE__, __LINE__);

}

mLocalContact = creator->getLastRequest()->header(h_Contacts).front();

mRemoteTarget = contact;

----------------------

 

Thanks,

-justin