| < Previous by Date | Date Index | Next by Date > | 
| < Previous in Thread | Thread Index | Next in Thread > | 
| 
 That is pretty odd behaviour by the far end.  Mid-dialog forking is not allowed (3261 sec 14.1).  If we detect a 200 with a different to tag and the dialogset is a UAS dialogset (ie. no base creator) - then we should either: 
1.  Ack the 200 and then send a bye.    or 
2.  Just ignore the 200 - don't proceed to create a dialog for it - but log an error. 
I'm leaning towards 2. 
Scott From: resiprocate-devel-bounces@xxxxxxxxxxxxxxxxxxxx on behalf of Justin Matthews Sent: Sat 12/9/2006 5:26 PM To: resiprocate-devel@xxxxxxxxxxxxxxxxxxx Subject: [reSIProcate] exception when receiving 200 from re-invite requestwith 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 
  |