--- 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<CS60MobilityActivity&>(*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