diff -r ea6e024ea6f9 -r 68f0c7cd80ec bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp --- a/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp Fri Mar 12 15:44:18 2010 +0200 +++ b/bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp Mon Mar 15 12:42:11 2010 +0200 @@ -194,12 +194,29 @@ { S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel::TransitionTag() TMPMPreferredCarrierAvailableMsg",(TInt*)&iContext.Node()) return S60MCprStates::KInformMigrationAvailable | NetStateMachine::EBackward; - } + } // else cancel return KCancelTag | NetStateMachine::EForward; } - + // ----------------------------------------------------------------------------- + // S60MCprMobilityActivity::TInformMigrationCompletedOrError::TransitionTag + // ----------------------------------------------------------------------------- + // + DEFINE_SMELEMENT( TInformMigrationCompletedOrError, NetStateMachine::MStateFork, TContext ) + TBool TInformMigrationCompletedOrError::TransitionTag() + { + // Error notification falls into the error -case. + if ( iContext.iNodeActivity->Error() ) + { + return MeshMachine::KErrorTag | NetStateMachine::EForward; + } + else + { + return S60MCprStates::KInformMigrationCompleted; + } + } + // ----------------------------------------------------------------------------- // S60MCprMobilityActivity::TStartMobilityHandshakeBackwardsOrError::TransitionTag // ----------------------------------------------------------------------------- @@ -488,7 +505,7 @@ TClientType(TCFClientType::EData, TCFClientType::ELeaving)); iContext.iNodeActivity->PostRequestTo(*dc, TCFDataClient::TStop(iContext.iNodeActivity->Error()).CRef()); } - + // ----------------------------------------------------------------------------- // CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept // ----------------------------------------------------------------------------- @@ -666,29 +683,40 @@ return MeshMachine::KCancelTag | NetStateMachine::EForward; } -/* else - { - S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedMigrationOrCancel::TransitionTag() Generating ApplicationIgnoredTheCarrier", (TInt*)&iContext.Node() ); - - // Need to put MPM in consistent state and continue. - CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node(); - CS60MobilityActivity& activity = static_cast(*iContext.iNodeActivity); - TRAP_IGNORE( node.Policy()->ApplicationIgnoredTheCarrierL( activity.iPreferredAPId ) ); - - if ( iContext.iNodeActivity->Error() == KErrNone ) - { - ASSERT(EFalse); // should not happend - iContext.iNodeActivity->SetError( KErrGeneral ); // doesn't have effect if already set. - return MeshMachine::KErrorTag | NetStateMachine::EForward; - } - - return MeshMachine::KErrorTag | NetStateMachine::EForward; - }*/ S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrApplicationRejectedMigrationOrCancel::TransitionTag() KErrorTag ESock_IP Panic",(TInt*)&iContext.Node()) ASSERT(EFalse); // error, IPCPR should not send TError in this case. return MeshMachine::KErrorTag | NetStateMachine::EForward; } + // ----------------------------------------------------------------------------- + // CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::DoL + // ----------------------------------------------------------------------------- + // + DEFINE_SMELEMENT( CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag, + NetStateMachine::MStateFork, CS60MobilityActivity::TContext ) + TInt CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::TransitionTag() + { + CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node(); + RMetaServiceProviderInterface* sp = (RMetaServiceProviderInterface*)node.ServiceProvider(); + + if ( iContext.iNodeActivity->Error() ) + { + S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KErrorTag",(TInt*)&iContext.Node()) + return MeshMachine::KErrorTag | NetStateMachine::EForward; + } + // Check whether we're bound to a provider for the given IAP ID already + else if (sp && sp->ProviderInfo().APId() == node.PolicyPrefs().IapId()) + { + // Restart the whole layer + S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() Re-establishment",(TInt*)&iContext.Node()); + return S60MCprStates::KRequestReConnectToCurrentSP | NetStateMachine::EForward; + } + else + { + S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KNoTag",(TInt*)&iContext.Node()) + return MeshMachine::KNoTag | NetStateMachine::EForward; + } + } // ----------------------------------------------------------------------------- // CS60MobilityActivity::ClearHandshakingFlag