bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp
branchRCL_3
changeset 13 68f0c7cd80ec
parent 12 ea6e024ea6f9
child 15 4dc3bb0099b0
--- 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