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 // |