bearermanagement/S60MCPR/src/s60mcprmobilityactivity.cpp
changeset 18 fcbbe021d614
parent 2 086aae6fc07e
child 23 7ec726f93df1
equal deleted inserted replaced
4:77415202bfc8 18:fcbbe021d614
   192             }
   192             }
   193         if ( iContext.iMessage.IsMessage<TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg>() )
   193         if ( iContext.iMessage.IsMessage<TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg>() )
   194             {
   194             {
   195             S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel::TransitionTag() TMPMPreferredCarrierAvailableMsg",(TInt*)&iContext.Node())    
   195             S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrInformMigrationAvailableBackwardsOrErrorOrCancel::TransitionTag() TMPMPreferredCarrierAvailableMsg",(TInt*)&iContext.Node())    
   196             return S60MCprStates::KInformMigrationAvailable | NetStateMachine::EBackward;
   196             return S60MCprStates::KInformMigrationAvailable | NetStateMachine::EBackward;
   197             }
   197             }            
   198         // else cancel
   198         // else cancel
   199         return KCancelTag | NetStateMachine::EForward;
   199         return KCancelTag | NetStateMachine::EForward;
   200         }
   200         }
   201 
   201 
   202 
   202     // -----------------------------------------------------------------------------
       
   203     // S60MCprMobilityActivity::TInformMigrationCompletedOrError::TransitionTag
       
   204     // -----------------------------------------------------------------------------
       
   205     //
       
   206     DEFINE_SMELEMENT( TInformMigrationCompletedOrError, NetStateMachine::MStateFork, TContext )
       
   207     TBool TInformMigrationCompletedOrError::TransitionTag()
       
   208         {    
       
   209         // Error notification falls into the error -case.
       
   210         if ( iContext.iNodeActivity->Error() ) 
       
   211             {   
       
   212             return MeshMachine::KErrorTag | NetStateMachine::EForward;
       
   213             }
       
   214         else
       
   215             {
       
   216             return S60MCprStates::KInformMigrationCompleted;
       
   217             }
       
   218         }
       
   219         
   203     // -----------------------------------------------------------------------------
   220     // -----------------------------------------------------------------------------
   204     // S60MCprMobilityActivity::TStartMobilityHandshakeBackwardsOrError::TransitionTag
   221     // S60MCprMobilityActivity::TStartMobilityHandshakeBackwardsOrError::TransitionTag
   205     // -----------------------------------------------------------------------------
   222     // -----------------------------------------------------------------------------
   206     //
   223     //
   207     DEFINE_SMELEMENT( TStartMobilityHandshakeBackwardsOrError, NetStateMachine::MStateFork, TContext )
   224     DEFINE_SMELEMENT( TStartMobilityHandshakeBackwardsOrError, NetStateMachine::MStateFork, TContext )
   219 
   236 
   220     // -----------------------------------------------------------------------------
   237     // -----------------------------------------------------------------------------
   221     // S60MCprMobilityActivity::TInformMigrationAvailableOrCancelTag::TransitionTag
   238     // S60MCprMobilityActivity::TInformMigrationAvailableOrCancelTag::TransitionTag
   222     // -----------------------------------------------------------------------------
   239     // -----------------------------------------------------------------------------
   223     //
   240     //
   224     DEFINE_SMELEMENT( TInformMigrationAvailableOrCancelTag, NetStateMachine::MStateFork, TContext )
   241     DEFINE_SMELEMENT( TInformMigrationAvailableOrErrorOrCancelTag, NetStateMachine::MStateFork, TContext )
   225     TBool TInformMigrationAvailableOrCancelTag::TransitionTag()
   242     TBool TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag()
   226         {
   243         {        
   227         if ( iContext.iMessage.IsMessage<TEBase::TCancel>() )
   244         if ( iContext.iNodeActivity->Error() )
   228             {
   245             {
   229             S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrCancelTag::TransitionTag() KCancelTag",(TInt*)&iContext.Node())
   246             S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KErrorTag",(TInt*)&iContext.Node())
       
   247             return MeshMachine::KErrorTag | NetStateMachine::EForward;
       
   248             }
       
   249 
       
   250         else if ( iContext.iMessage.IsMessage<TEBase::TCancel>() )
       
   251             {
       
   252             S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KCancelTag",(TInt*)&iContext.Node())
   230             return KCancelTag | NetStateMachine::EForward;
   253             return KCancelTag | NetStateMachine::EForward;
   231             }
   254             }
   232         else if ( iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>() )
   255         else if ( iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>() )
   233             {
   256             {
   234             S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrCancelTag::TransitionTag() KSendInitialApplicationReject",
   257             S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KSendInitialApplicationReject",
   235                     (TInt*)&iContext.Node())
   258                     (TInt*)&iContext.Node())
   236             return S60MCprStates::KSendInitialApplicationReject | NetStateMachine::EForward;
   259             return S60MCprStates::KSendInitialApplicationReject | NetStateMachine::EForward;
   237             }
   260             }
   238         else
   261         else
   239             {
   262             {
   240             S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrCancelTag::TransitionTag() KInformMigrationAvailable",(TInt*)&iContext.Node())
   263             S60MCPRLOGSTRING1("S60MCPR<%x>::TInformMigrationAvailableOrErrorOrCancelTag::TransitionTag() KInformMigrationAvailable",(TInt*)&iContext.Node())
   241             return S60MCprStates::KInformMigrationAvailable | NetStateMachine::EForward;
   264             return S60MCprStates::KInformMigrationAvailable | NetStateMachine::EForward;
   242             }
   265             }
   243         }
   266         }
   244 
   267 
   245 
   268 
   339 
   362 
   340         //Inform the CPR that a potential migration is available. We only support a single data client
   363         //Inform the CPR that a potential migration is available. We only support a single data client
   341         //in this implementation.
   364         //in this implementation.
   342         __ASSERT_DEBUG(activity.iPreferredAPId, User::Panic(KS60MCprPanic, KPanicNoServiceProvider));
   365         __ASSERT_DEBUG(activity.iPreferredAPId, User::Panic(KS60MCprPanic, KPanicNoServiceProvider));
   343 
   366 
   344         //Compute all this here to keep EvaluatePreference() as fast as possible
       
   345         activity.iCurrent = static_cast<RMetaServiceProviderInterface*>(
       
   346                 iContext.Node().GetFirstClient<TDefaultClientMatchPolicy>(
       
   347                         TClientType( TCFClientType::EServProvider, TCFClientType::EStarted )));
       
   348 
       
   349         __ASSERT_DEBUG(activity.iCurrent, User::Panic(KS60MCprPanic, KPanicNoServiceProvider));
       
   350 /*  Not valid ASSERT
       
   351         __ASSERT_DEBUG(activity.iCurrent->ProviderInfo().APId() == activity.iCurrentAssumedAPId, 
       
   352                        User::Panic(KS60MCprPanic, KPanicInConsistentMCPRState));
       
   353 */
       
   354         // Activity received the necessary information from the policy server earlier 
   367         // Activity received the necessary information from the policy server earlier 
   355         // and now holds that information which we'll send to IPCPR.
   368         // and now holds that information which we'll send to IPCPR.
   356         TCFMobilityControlClient::TMigrationNotification msg( activity.iCurrentAssumedAPId,
   369         TCFMobilityControlClient::TMigrationNotification msg( activity.iCurrentAssumedAPId,
   357                                                               //activity.iCurrent->ProviderInfo().APId(),
   370                                                               //activity.iCurrent->ProviderInfo().APId(),
   358                                                               activity.iPreferredAPId,
   371                                                               activity.iPreferredAPId,
   496 
   509 
   497 		RNodeInterface* dc = iContext.Node().GetFirstClient<TDefaultClientMatchPolicy>(TClientType(TCFClientType::EData),
   510 		RNodeInterface* dc = iContext.Node().GetFirstClient<TDefaultClientMatchPolicy>(TClientType(TCFClientType::EData),
   498 			TClientType(TCFClientType::EData, TCFClientType::ELeaving));
   511 			TClientType(TCFClientType::EData, TCFClientType::ELeaving));
   499 		iContext.iNodeActivity->PostRequestTo(*dc, TCFDataClient::TStop(iContext.iNodeActivity->Error()).CRef());
   512 		iContext.iNodeActivity->PostRequestTo(*dc, TCFDataClient::TStop(iContext.iNodeActivity->Error()).CRef());
   500 		}
   513 		}
   501 	
   514     
   502     // -----------------------------------------------------------------------------
   515     // -----------------------------------------------------------------------------
   503     // CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejected::Accept
   516     // CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept
   504     // -----------------------------------------------------------------------------
   517     // -----------------------------------------------------------------------------
   505     //
   518     //
   506     DEFINE_SMELEMENT( CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejected, 
   519     DEFINE_SMELEMENT( CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification, 
   507                       NetStateMachine::MState, TContext )
   520                       NetStateMachine::MState, TContext )
   508     TBool CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejected::Accept()
   521     TBool CS60MobilityActivity::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept()
   509         {
   522         {
   510         TBool result( EFalse );
   523         TBool result( EFalse );
   511         
   524         
   512         if ( iContext.iMessage.IsMessage<TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg>() )
   525         if ( iContext.iMessage.IsMessage<TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg>() )
   513             {
   526             {
   516             TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg* msg = 
   529             TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg* msg = 
   517                 message_cast<TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg>( &iContext.iMessage );
   530                 message_cast<TCFS60MCPRMessage::TMPMPreferredCarrierAvailableMsg>( &iContext.iMessage );
   518 
   531 
   519             TMpmNotificationPrefIAPAvailable* notif = (TMpmNotificationPrefIAPAvailable*)msg->iPtr;
   532             TMpmNotificationPrefIAPAvailable* notif = (TMpmNotificationPrefIAPAvailable*)msg->iPtr;
   520 
   533 
   521             S60MCPRLOGSTRING4("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejected::Accept() TMPMPreferredCarrierAvailableMsg %d -> %d upgrade=%d",
   534             S60MCPRLOGSTRING4("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TMPMPreferredCarrierAvailableMsg %d -> %d upgrade=%d",
   522                        (TInt*)&iContext.Node(), notif->iOldIapId, notif->iNewIapId, notif->iIsUpgrade)
   535                        (TInt*)&iContext.Node(), notif->iOldIapId, notif->iNewIapId, notif->iIsUpgrade)
   523             // notif must be there.
   536             // notif must be there.
   524             ASSERT(notif);
   537             ASSERT(notif);
   525             
   538             
   526             // Message received ok, clear the pending preferred IAP.
   539             // Message received ok, clear the pending preferred IAP.
   536             
   549             
   537             result = ETrue;
   550             result = ETrue;
   538             }
   551             }
   539         else if ( iContext.iMessage.IsMessage<TEBase::TCancel>() )
   552         else if ( iContext.iMessage.IsMessage<TEBase::TCancel>() )
   540             {
   553             {
   541             S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejected::Accept() TCancel", 
   554             S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TCancel", 
   542                     (TInt*)&iContext.Node())
   555                     (TInt*)&iContext.Node())
   543             
   556             
   544             result = ETrue;
   557             result = ETrue;
   545             }
   558             }
   546         else if ( iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>() )
   559         else if ( iContext.iMessage.IsMessage<TCFMobilityProvider::TMigrationRejected>() )
   547             {
   560             {
   548             S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejected::Accept() TMigrationRejected", 
   561             S60MCPRLOGSTRING1("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TMigrationRejected", 
   549                     (TInt*)&iContext.Node())
   562                     (TInt*)&iContext.Node())
   550             
   563             
       
   564             result = ETrue;
       
   565             }
       
   566         else if ( iContext.iMessage.IsMessage<TCFS60MCPRMessage::TMPMErrorNotificationMsg>() )
       
   567             {
       
   568             CS60MobilityActivity& activity = static_cast<CS60MobilityActivity&>(*iContext.iNodeActivity);
       
   569             TCFS60MCPRMessage::TMPMErrorNotificationMsg* msg = 
       
   570                 message_cast<TCFS60MCPRMessage::TMPMErrorNotificationMsg>( &iContext.iMessage );
       
   571             S60MCPRLOGSTRING2("S60MCPR<%x>::TAwaitingPreferredCarrierOrCancelOrRejectedOrErrorNotification::Accept() TMPMErrorNotificationMsg %d",(TInt*)&iContext.Node(),msg->iValue)
       
   572             ASSERT( msg->iValue != KErrNone );
       
   573             activity.SetError( msg->iValue );
   551             result = ETrue;
   574             result = ETrue;
   552             }
   575             }
   553 
   576 
   554         return result;
   577         return result;
   555         }
   578         }
   664             CS60MobilityActivity& activity = static_cast<CS60MobilityActivity&>(*iContext.iNodeActivity);
   687             CS60MobilityActivity& activity = static_cast<CS60MobilityActivity&>(*iContext.iNodeActivity);
   665             TRAP_IGNORE( node.Policy()->ApplicationIgnoredTheCarrierL( activity.iPreferredAPId ) );
   688             TRAP_IGNORE( node.Policy()->ApplicationIgnoredTheCarrierL( activity.iPreferredAPId ) );
   666 
   689 
   667             return MeshMachine::KCancelTag | NetStateMachine::EForward;
   690             return MeshMachine::KCancelTag | NetStateMachine::EForward;
   668             }
   691             }
   669 /*        else
       
   670             {
       
   671             S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrErrorTagOrApplicationRejectedMigrationOrCancel::TransitionTag() Generating ApplicationIgnoredTheCarrier", (TInt*)&iContext.Node() );
       
   672 
       
   673             // Need to put MPM in consistent state and continue.
       
   674             CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node();
       
   675             CS60MobilityActivity& activity = static_cast<CS60MobilityActivity&>(*iContext.iNodeActivity);
       
   676             TRAP_IGNORE( node.Policy()->ApplicationIgnoredTheCarrierL( activity.iPreferredAPId ) );
       
   677             
       
   678             if ( iContext.iNodeActivity->Error() == KErrNone )
       
   679                 {
       
   680                 ASSERT(EFalse); // should not happend
       
   681                 iContext.iNodeActivity->SetError( KErrGeneral ); // doesn't have effect if already set.
       
   682                 return MeshMachine::KErrorTag | NetStateMachine::EForward;
       
   683                 }
       
   684             
       
   685             return MeshMachine::KErrorTag | NetStateMachine::EForward;
       
   686             }*/
       
   687         S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrApplicationRejectedMigrationOrCancel::TransitionTag() KErrorTag ESock_IP Panic",(TInt*)&iContext.Node())
   692         S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrApplicationRejectedMigrationOrCancel::TransitionTag() KErrorTag ESock_IP Panic",(TInt*)&iContext.Node())
   688         ASSERT(EFalse); // error, IPCPR should not send TError in this case.
   693         ASSERT(EFalse); // error, IPCPR should not send TError in this case.
   689         return MeshMachine::KErrorTag | NetStateMachine::EForward;
   694         return MeshMachine::KErrorTag | NetStateMachine::EForward;
   690         }
   695         }
   691 
   696 
       
   697     // -----------------------------------------------------------------------------
       
   698     // CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::DoL
       
   699     // -----------------------------------------------------------------------------
       
   700     //
       
   701     DEFINE_SMELEMENT( CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag, 
       
   702                       NetStateMachine::MStateFork, CS60MobilityActivity::TContext )
       
   703     TInt CS60MobilityActivity::TNoTagOrRequestReConnectToCurrentSPOrErrorTag::TransitionTag()
       
   704         {
       
   705         CS60MetaConnectionProvider& node = (CS60MetaConnectionProvider&)iContext.Node();
       
   706         RMetaServiceProviderInterface* sp = (RMetaServiceProviderInterface*)node.ServiceProvider();
       
   707 
       
   708         if ( iContext.iNodeActivity->Error() )
       
   709             {
       
   710             S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KErrorTag",(TInt*)&iContext.Node())
       
   711             return MeshMachine::KErrorTag | NetStateMachine::EForward;
       
   712             }
       
   713             // Check whether we're bound to a provider for the given IAP ID already
       
   714         else if (sp && sp->ProviderInfo().APId() == node.PolicyPrefs().IapId())
       
   715             {
       
   716             // Restart the whole layer
       
   717             S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() Re-establishment",(TInt*)&iContext.Node());
       
   718             return S60MCprStates::KRequestReConnectToCurrentSP | NetStateMachine::EForward;
       
   719             }
       
   720         else
       
   721             {
       
   722             S60MCPRLOGSTRING1("S60MCPR<%x>::TNoTagOrBearerPresentOrError::TransitionTag() KNoTag",(TInt*)&iContext.Node())
       
   723             return MeshMachine::KNoTag | NetStateMachine::EForward;
       
   724             }
       
   725         }    
   692     
   726     
   693     // -----------------------------------------------------------------------------
   727     // -----------------------------------------------------------------------------
   694     // CS60MobilityActivity::ClearHandshakingFlag
   728     // CS60MobilityActivity::ClearHandshakingFlag
   695     // -----------------------------------------------------------------------------
   729     // -----------------------------------------------------------------------------
   696     //
   730     //