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

[reSIProcate] sip stack process CANCEL problem?


resiprocate-devel,你好 
  
When TU send an INVITE to external,then TU send CANCEL to external ,but 
TransationState not received 1xx,
the stack process the CANCEL,and return INVITE 487, delete the 
ClientTransaction,and ;
The stack don't terminateClientTransaction and create a TransactionTerminated 
Message to TU!
Is it a bug ?

The source Code in TransactionState.cxx:

               TransactionState* matchingInvite = 
controller.mClientTransactionMap.find(sip->getTransactionId()); 
               if (matchingInvite == 0) 
               { 
                  InfoLog (<< "No matching INVITE for incoming (from TU) CANCEL 
to uac"); 
                  TransactionState::sendToTU(tu, controller, 
Helper::makeResponse(*sip,481)); 
                  delete sip; 
               } 
               else if (matchingInvite->mState == Calling) // CANCEL before 1xx 
received 
               { 
                  WarningLog(<< "You can't CANCEL a request until a provisional 
has been received"); 
                  StackLog (<< *matchingInvite); 
                  StackLog (<< *sip); 

                  // if no INVITE had been sent out yet. -- i.e. dns result not 
                  // processed yet  

                  // The CANCEL was received before the INVITE was sent 
                  // This can happen in odd cases. Too common to assert. 
                  // Be graceful. 
                  TransactionState::sendToTU(tu, controller, 
Helper::makeResponse(*sip, 200)); 
                  
matchingInvite->sendToTU(Helper::makeResponse(*matchingInvite->mMsgToRetransmit,
 487)); 

                  delete matchingInvite; 
                  delete sip; 

               }
  
  
fancy_xiao,fancy_xiao@xxxxxxxxxxx 
2007-05-29