diff -r 307788aac0a8 -r 8248b03a2669 sipproviderplugins/sipprovider/sipstatemachine/src/transitionengine.cpp --- a/sipproviderplugins/sipprovider/sipstatemachine/src/transitionengine.cpp Tue Feb 02 01:03:15 2010 +0200 +++ b/sipproviderplugins/sipprovider/sipstatemachine/src/transitionengine.cpp Fri Apr 16 15:18:54 2010 +0300 @@ -52,10 +52,8 @@ __FLOG_1(_L("CSIPTransitionEngine %08x:\tInstantiating CSIPProfileRegistry - may leave"), this); iProfileRegistry = CSIPProfileRegistry::NewL(iSIP, *this); - CleanupStack::PushL(iProfileRegistry); __FLOG_1(_L("CSIPTransitionEngine %08x:\tInstantiating CSIPHttpDigest - may leave"), this); iDigest = CSIPHttpDigest::NewL(iSIP, *this ); - CleanupStack::PushL(iDigest); __FLOG_1(_L("CSIPTransitionEngine %08x:\tInstantiating CSIPConnection - may leave"), this); iConnection = CSIPConnection::NewL(iSIP, iIapId, *this ); @@ -66,7 +64,6 @@ } __FLOG_1(_L("CSIPTransitionEngine %08x:\tConstructL successful"), this); - CleanupStack::Pop(2); } CSIPTransitionEngine::CSIPTransitionEngine(CSIP& aSip, TInt aIapId) @@ -148,51 +145,11 @@ */ { __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequest() <>"),this); - CleanupStack::PushL(aTransaction); //we're take over the ownership. - - RStringF method = aTransaction->RequestElements()->Method(); - if(method == SIPStrings::StringF(SipStrConsts::EInvite)) + TRAPD(err,IncomingRequestHandlerL(aTransaction)); + if(err != KErrNone) { - __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequest() <>"),this); - TSipMsgBundle msgBundle; - // Create a dialog Association and set server transaction - CSIPInviteDialogAssoc* dialogassoc = CSIPInviteDialogAssoc::NewL(*aTransaction); - CleanupStack::PushL(dialogassoc); - msgBundle.iRequest = TSipHLConsts::ERequestInvite; - msgBundle.iDialog = dialogassoc; - msgBundle.iServTransaction = aTransaction; - // Look For the state machine which is responsible for handling - // this particular request - CSipStateMachine* smPtr = FindSMForIncomingCall(); - if(smPtr) - { - __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequest() <>"),this); - smPtr->IncomingRequestOutsideDialog(msgBundle); - CleanupStack::Pop(dialogassoc); - CleanupStack::Pop(aTransaction); - } - else - {// return NotFound - __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequest() <>"),this); - __FLOG_0(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequest() <>")); - CSIPResponseElements *ResElem = CSIPResponseElements::NewLC( - 404, SIPStrings::StringF(SipStrConsts::EPhraseNotFound)); - aTransaction->SendResponseL(ResElem); - CleanupStack::Pop(ResElem); - CleanupStack::PopAndDestroy(aTransaction); - CleanupStack::PopAndDestroy(dialogassoc); - } + return; } - else - { // bad request , not supported here - __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequest() <>"),this); - __FLOG_0(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequest() <>")); - CSIPResponseElements *ResElem = CSIPResponseElements::NewLC( - 400, SIPStrings::StringF(SipStrConsts::EPhraseBadRequest)); - aTransaction->SendResponseL(ResElem); - CleanupStack::Pop(ResElem); - CleanupStack::PopAndDestroy(aTransaction); - } } void CSIPTransitionEngine::IncomingRequest( CSIPServerTransaction* aTransaction, CSIPDialog& aDialog ) @@ -1090,3 +1047,53 @@ } return EFalse; } + +void CSIPTransitionEngine::IncomingRequestHandlerL(CSIPServerTransaction* aTransaction) +{ + __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequestL() <>"),this); + CleanupStack::PushL(aTransaction); //we're take over the ownership. + + RStringF method = aTransaction->RequestElements()->Method(); + if(method == SIPStrings::StringF(SipStrConsts::EInvite)) + { + __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequestL() <>"),this); + TSipMsgBundle msgBundle; + // Create a dialog Association and set server transaction + CSIPInviteDialogAssoc* dialogassoc = CSIPInviteDialogAssoc::NewL(*aTransaction); + CleanupStack::PushL(dialogassoc); + msgBundle.iRequest = TSipHLConsts::ERequestInvite; + msgBundle.iDialog = dialogassoc; + msgBundle.iServTransaction = aTransaction; + // Look For the state machine which is responsible for handling + // this particular request + CSipStateMachine* smPtr = FindSMForIncomingCall(); + if(smPtr) + { + __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequestL() <>"),this); + smPtr->IncomingRequestOutsideDialog(msgBundle); + CleanupStack::Pop(dialogassoc); + CleanupStack::Pop(aTransaction); + } + else + {// return NotFound + __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequestL() <>"),this); + __FLOG_0(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequestL() <>")); + CSIPResponseElements *ResElem = CSIPResponseElements::NewLC( + 404, SIPStrings::StringF(SipStrConsts::EPhraseNotFound)); + aTransaction->SendResponseL(ResElem); + CleanupStack::Pop(ResElem); + CleanupStack::PopAndDestroy(aTransaction); + CleanupStack::PopAndDestroy(dialogassoc); + } + } + else + { // bad request , not supported here + __FLOG_1(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequestL() <>"),this); + __FLOG_0(_L("[TransitionEngine]: CSIPTransitionEngine[%x]::IncomingRequestL() <>")); + CSIPResponseElements *ResElem = CSIPResponseElements::NewLC( + 400, SIPStrings::StringF(SipStrConsts::EPhraseBadRequest)); + aTransaction->SendResponseL(ResElem); + CleanupStack::Pop(ResElem); + CleanupStack::PopAndDestroy(aTransaction); + } +}