datacommsserver/esockserver/CoreProviders/src/coremcpractivities.cpp
branchRCL_3
changeset 19 0b0e9fce0b58
parent 2 dee179edb159
child 48 07656293a99c
equal deleted inserted replaced
14:8b5d60ce1e94 19:0b0e9fce0b58
   144 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityNoBearer, MCprNoBearer, TCFControlProvider::TNoBearer, PRActivities::CNoBearer::NewL)
   144 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityNoBearer, MCprNoBearer, TCFControlProvider::TNoBearer, PRActivities::CNoBearer::NewL)
   145 	FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingNoBearer, CNoBearer::TNoTagOrBearerPresentBlockedByNoBearer)
   145 	FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingNoBearer, CNoBearer::TNoTagOrBearerPresentBlockedByNoBearer)
   146 	NODEACTIVITY_ENTRY(KNoTag, MCprStates::TSelectNextLayer, MCprStates::TAwaitingSelectNextLayerCompleted, CoreNetStates::TNoTagOrBearerPresent)
   146 	NODEACTIVITY_ENTRY(KNoTag, MCprStates::TSelectNextLayer, MCprStates::TAwaitingSelectNextLayerCompleted, CoreNetStates::TNoTagOrBearerPresent)
   147 
   147 
   148 	//Special for the Meta Plane (don't just copy & paste)
   148 	//Special for the Meta Plane (don't just copy & paste)
   149 	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TStartServiceProvider, CoreNetStates::TAwaitingStarted, TTag<CoreNetStates::KBearerPresent>)
   149 //	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TStartServiceProvider, CoreNetStates::TAwaitingStarted, TTag<CoreNetStates::KBearerPresent>)
   150 	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TRequestCommsBinderRetry, CoreNetStates::TAwaitingBinderResponse, TTag<CoreNetStates::KBearerPresent>)
   150 	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TRequestCommsBinderRetry, CoreNetStates::TAwaitingBinderResponse, TTag<CoreNetStates::KBearerPresent>)
   151 	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TSendBindTo, CoreNetStates::TAwaitingBindToComplete, TTag<CoreNetStates::KBearerPresent>)
   151 	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TSendBindTo, CoreNetStates::TAwaitingBindToComplete, TTag<CoreNetStates::KBearerPresent>)
   152 	THROUGH_NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreActivities::ABindingActivity::TSendBindToComplete, MeshMachine::TNoTag)
   152 	THROUGH_NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreActivities::ABindingActivity::TSendBindToComplete, MeshMachine::TNoTag)
   153 
   153 
   154 	LAST_NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendBearer)
   154 	LAST_NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendBearer)
   161 //Error Recovery Activities need to handle their own errors (generated as well as returned).
   161 //Error Recovery Activities need to handle their own errors (generated as well as returned).
   162 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityReConnect, MCprReConnect, TCFMcpr::TReConnect, CReConnectActivity::NewL)
   162 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityReConnect, MCprReConnect, TCFMcpr::TReConnect, CReConnectActivity::NewL)
   163 	FIRST_NODEACTIVITY_ENTRY(MCprStates::TAwaitingReConnectRequest, MeshMachine::TNoTag)
   163 	FIRST_NODEACTIVITY_ENTRY(MCprStates::TAwaitingReConnectRequest, MeshMachine::TNoTag)
   164 	THROUGH_NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TProcessReConnectRequest, MeshMachine::TNoTag)
   164 	THROUGH_NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TProcessReConnectRequest, MeshMachine::TNoTag)
   165 
   165 
   166 	//Start reconnection by stopping the old MCpr
       
   167 	NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TStopStartedServiceProvider, CoreNetStates::TAwaitingStopped, MeshMachine::TNoTag)
       
   168 	NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TStartNextServiceProvider, CoreNetStates::TAwaitingStarted, MeshMachine::TNoTag)
       
   169 
       
   170 	//Build lower layer
   166 	//Build lower layer
   171 	NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TBuildLowerLayer, CoreNetStates::TAwaitingBindToComplete, MeshMachine::TNoTag)
   167 	NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TBuildLowerLayer, CoreNetStates::TAwaitingBindToComplete, MeshMachine::TNoTag)
   172 
   168 
   173 	//Respond
   169 	//Respond
   174 	LAST_NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TSendReConnectResponse)
   170 	LAST_NODEACTIVITY_ENTRY(KNoTag, CReConnectActivity::TSendReConnectResponse)
   198 	THROUGH_NODEACTIVITY_ENTRY(KNoTag, CCommsBinderActivity::TProcessDataClientCreation, TTag<CoreStates::KUseExisting>)
   194 	THROUGH_NODEACTIVITY_ENTRY(KNoTag, CCommsBinderActivity::TProcessDataClientCreation, TTag<CoreStates::KUseExisting>)
   199 
   195 
   200 	NODEACTIVITY_ENTRY(CoreStates::KUseExisting, CCommsBinderActivity::TSendBinderResponse, CCommsBinderActivity::TAwaitingBindToComplete, MeshMachine::TNoTagOrErrorTag)
   196 	NODEACTIVITY_ENTRY(CoreStates::KUseExisting, CCommsBinderActivity::TSendBinderResponse, CCommsBinderActivity::TAwaitingBindToComplete, MeshMachine::TNoTagOrErrorTag)
   201     LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing)
   197     LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing)
   202 	LAST_NODEACTIVITY_ENTRY(KErrorTag, MeshMachine::TClearError)
   198 	LAST_NODEACTIVITY_ENTRY(KErrorTag, MeshMachine::TClearError)
   203 NODEACTIVITY_END()
       
   204 }
       
   205 
       
   206 namespace MCprStartActivity
       
   207 {
       
   208 //Semantics of start on the meta plane differ from the one on connection plane.
       
   209 //Meta provider is started with the first requesting client and stopped with the last one.
       
   210 //Since in our reference MCprs we do not do anything on start or stop (except keeping the
       
   211 //sequences right for other activities) we are just responding back with the proper message.
       
   212 DECLARE_DEFINE_NODEACTIVITY(ECFActivityStart, MCprStart, TCFServiceProvider::TStart)
       
   213 	NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendStarted, CoreNetStates::TAwaitingStart, MeshMachine::TNoTag)
       
   214 NODEACTIVITY_END()
       
   215 }
       
   216 
       
   217 namespace MCprStopActivity
       
   218 {
       
   219 //Semantics of start on the meta plane differ from the one on connection plane.
       
   220 //Meta provider is started with the first requesting client and stopped with the last one.
       
   221 //Since in our reference MCprs we do not do anything on start or stop (except keeping the
       
   222 //sequences right for other activities) we are just responding back with the proper message.
       
   223 DECLARE_DEFINE_NODEACTIVITY(ECFActivityStop, MCprStop, TCFServiceProvider::TStop)
       
   224 	NODEACTIVITY_ENTRY(KNoTag, PRStates::TSendStopped, CoreNetStates::TAwaitingStop, MeshMachine::TNoTag)
       
   225 NODEACTIVITY_END()
   199 NODEACTIVITY_END()
   226 }
   200 }
   227 
   201 
   228 namespace MCprReportProviderStatusActivity
   202 namespace MCprReportProviderStatusActivity
   229 {
   203 {
   270 	FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingDataClientGoneDown, MeshMachine::TNoTag)
   244 	FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingDataClientGoneDown, MeshMachine::TNoTag)
   271 	LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing)
   245 	LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing)
   272 NODEACTIVITY_END()
   246 NODEACTIVITY_END()
   273 }
   247 }
   274 
   248 
   275 namespace MCprDataClientStopActivity
   249 namespace MCprStartActivity
   276 {
   250 {
   277 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityStopDataClient, MCprDataClientStop, TCFDataClient::TStop, MeshMachine::CNodeRetryActivity::NewL)
   251 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityStart, MCprStart, TCFServiceProvider::TStart, PRActivities::CStartActivity::NewL)
   278 	FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingDataClientStop, MeshMachine::TNoTag)
   252     FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingStart, CoreNetStates::TNoTagOrBearerPresentBlockedByStop)
   279 	THROUGH_NODEACTIVITY_ENTRY(KNoTag, PRStates::TProcessDataClientStop, CoreNetStates::TNoTagOrDataClientsToStopBlockedByStarting)
   253 	NODEACTIVITY_ENTRY(KNoTag, MCprStates::TSelectNextLayer, MCprStates::TAwaitingSelectNextLayerCompleted, CoreNetStates::TNoTagOrBearerPresent)
   280 
   254 	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TBindSelfToPresentBearer, CoreNetStates::TAwaitingBindToComplete, TTag<CoreNetStates::KBearerPresent>)
   281 	NODEACTIVITY_ENTRY(CoreNetStates::KDataClientsToStop, CoreNetStates::TStopDataClients, CoreNetStates::TAwaitingDataClientsStopped, MeshMachine::TNoTag)
   255 
   282 	LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TClearError)
   256 	//Start the service provider, use the default cancellation.
       
   257 	//Forward TCancel to the service provider, wait for TStarted or TError (via the Error Activity)
       
   258 	//When TStarted arrives after TCancel the activity will move to the nearest KErrorTag
       
   259 	NODEACTIVITY_ENTRY(CoreNetStates::KBearerPresent, CoreNetStates::TStartServiceProviderRetry, CoreNetStates::TAwaitingStarted, MeshMachine::TNoTagOrErrorTag)
       
   260 	LAST_NODEACTIVITY_ENTRY(KErrorTag, MeshMachine::TDoNothing)
       
   261 	//Start data clients, use the default cancellation.
       
   262 	//Forward TCancel to the self, wait for TCFDataClient::TStarted or TError (via the Error Activity)
       
   263 	//When TCFDataClient::TStarted arrives after TCancel the activity will move to the nearest KErrorTag
       
   264 	NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TStartSelf, CoreNetStates::TAwaitingDataClientStarted, MeshMachine::TNoTagOrErrorTag)
       
   265 	NODEACTIVITY_ENTRY(KErrorTag, CoreNetStates::TStopSelf, CoreNetStates::TAwaitingDataClientStopped, MeshMachine::TErrorTag)
       
   266 	LAST_NODEACTIVITY_ENTRY(KErrorTag, MeshMachine::TDoNothing)
       
   267 	LAST_NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendStarted)
       
   268 NODEACTIVITY_END()
       
   269 }
       
   270 
       
   271 namespace MCprStopActivity
       
   272 {
       
   273 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityStop, MCprStop, TCFServiceProvider::TStop, MeshMachine::CNodeRetryActivity::NewL)
       
   274 	FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingStop, CoreNetStates::TActiveOrNoTagBlockedByBindTo)
       
   275 	THROUGH_NODEACTIVITY_ENTRY(KActiveTag, CoreNetStates::TCancelDataClientStart, MeshMachine::TNoTag)
       
   276 	NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TStopSelf, CoreNetStates::TAwaitingDataClientStopped, CoreNetStates::TNoTagOrNoBearer)
       
   277 	NODEACTIVITY_ENTRY(KNoTag, CoreNetStates::TSendStop, CoreNetStates::TAwaitingStopped, TTag<CoreNetStates::KNoBearer>)
       
   278 	LAST_NODEACTIVITY_ENTRY(CoreNetStates::KNoBearer, PRStates::TSendStoppedAndGoneDown)
   283 NODEACTIVITY_END()
   279 NODEACTIVITY_END()
   284 }
   280 }
   285 
   281 
   286 namespace MCprActivities
   282 namespace MCprActivities
   287 {
   283 {
   291 DEFINE_EXPORT_ACTIVITY_MAP(coreMCprActivitiesSuper)
   287 DEFINE_EXPORT_ACTIVITY_MAP(coreMCprActivitiesSuper)
   292 	ACTIVITY_MAP_ENTRY(MCprDestroyActivity, MCprDestroy)
   288 	ACTIVITY_MAP_ENTRY(MCprDestroyActivity, MCprDestroy)
   293 	ACTIVITY_MAP_ENTRY(MCprSimpleSelectActivitySuper, MCprSimpleSelect)
   289 	ACTIVITY_MAP_ENTRY(MCprSimpleSelectActivitySuper, MCprSimpleSelect)
   294 	ACTIVITY_MAP_ENTRY(MCprNoBearerActivity, MCprNoBearer)
   290 	ACTIVITY_MAP_ENTRY(MCprNoBearerActivity, MCprNoBearer)
   295 	ACTIVITY_MAP_ENTRY(MCprReConnectActivity, MCprReConnect)
   291 	ACTIVITY_MAP_ENTRY(MCprReConnectActivity, MCprReConnect)
   296 	ACTIVITY_MAP_ENTRY(MCprStopActivity, MCprStop)
       
   297 	ACTIVITY_MAP_ENTRY(MCprAvailabilityNotificationActivity, MCprAvailability)
   292 	ACTIVITY_MAP_ENTRY(MCprAvailabilityNotificationActivity, MCprAvailability)
   298 	ACTIVITY_MAP_ENTRY(MCprBinderRequestActivity, MCprBinderRequest)
   293 	ACTIVITY_MAP_ENTRY(MCprBinderRequestActivity, MCprBinderRequest)
   299 	ACTIVITY_MAP_ENTRY(MCprStartActivity, MCprStart)
       
   300 	ACTIVITY_MAP_ENTRY(MCprReportProviderStatusActivity, MCprReportProviderStatus)
   294 	ACTIVITY_MAP_ENTRY(MCprReportProviderStatusActivity, MCprReportProviderStatus)
   301 	ACTIVITY_MAP_ENTRY(MCprDataClientJoinActivity, MCprDataClientJoin)
   295 	ACTIVITY_MAP_ENTRY(MCprDataClientJoinActivity, MCprDataClientJoin)
   302 	ACTIVITY_MAP_ENTRY(MCprControlClientJoinActivity, MCprControlClientJoin)
   296 	ACTIVITY_MAP_ENTRY(MCprControlClientJoinActivity, MCprControlClientJoin)
   303 	ACTIVITY_MAP_ENTRY(MCprErrorRecoveryDefaultActivity, DefaultErrorRecovery)
   297 	ACTIVITY_MAP_ENTRY(MCprErrorRecoveryDefaultActivity, DefaultErrorRecovery)
   304 	ACTIVITY_MAP_ENTRY(MCprDataClientGoneDownActivity, MCprDataClientGoneDown)
   298 	ACTIVITY_MAP_ENTRY(MCprDataClientGoneDownActivity, MCprDataClientGoneDown)
   305 	ACTIVITY_MAP_ENTRY(MCprDataClientStopActivity, MCprDataClientStop)
   299 	ACTIVITY_MAP_ENTRY(MCprStopActivity, MCprStop)
       
   300 	ACTIVITY_MAP_ENTRY(MCprStartActivity, MCprStart)
   306 ACTIVITY_MAP_END_BASE(PRActivities, coreActivitiesMCpr)
   301 ACTIVITY_MAP_END_BASE(PRActivities, coreActivitiesMCpr)
   307 
   302 
   308 //This activiy map supports legacy selection and the additional activity
   303 //This activiy map supports legacy selection and the additional activity
   309 //is that support. It should be used where tier managers need to support
   304 //is that support. It should be used where tier managers need to support
   310 //selection message TSelectNextLayer
   305 //selection message TSelectNextLayer
   792 	activity.iStoppingSP = iContext.Node().FindClientL(msg.iNodeId1);
   787 	activity.iStoppingSP = iContext.Node().FindClientL(msg.iNodeId1);
   793 	__ASSERT_DEBUG(activity.iStoppingSP->Type()&TCFClientType::EServProvider, User::Panic(KSpecAssert_ESockCoreProvcprac, 21));
   788 	__ASSERT_DEBUG(activity.iStoppingSP->Type()&TCFClientType::EServProvider, User::Panic(KSpecAssert_ESockCoreProvcprac, 21));
   794 
   789 
   795 	activity.iStartingSP = iContext.Node().FindClientL(msg.iNodeId2);
   790 	activity.iStartingSP = iContext.Node().FindClientL(msg.iNodeId2);
   796 	__ASSERT_DEBUG(activity.iStartingSP->Type()&TCFClientType::EServProvider, User::Panic(KSpecAssert_ESockCoreProvcprac, 22));
   791 	__ASSERT_DEBUG(activity.iStartingSP->Type()&TCFClientType::EServProvider, User::Panic(KSpecAssert_ESockCoreProvcprac, 22));
   797 	}
       
   798 
       
   799 DEFINE_SMELEMENT(CReConnectActivity::TStopStartedServiceProvider, NetStateMachine::MStateTransition, CReConnectActivity::TContext)
       
   800 void CReConnectActivity::TStopStartedServiceProvider::DoL()
       
   801 	{
       
   802 	__ASSERT_DEBUG(iContext.iNodeActivity, CoreMCprPanic(KPanicNoActivity));
       
   803 	CReConnectActivity& activity = static_cast<CReConnectActivity&>(*iContext.iNodeActivity);
       
   804 
       
   805 	__ASSERT_DEBUG(activity.iStoppingSP, User::Panic(KSpecAssert_ESockCoreProvcprac, 23));
       
   806 	activity.PostRequestTo(*activity.iStoppingSP, TCFServiceProvider::TStop(0).CRef());
       
   807 	}
       
   808 
       
   809 DEFINE_SMELEMENT(CReConnectActivity::TStartNextServiceProvider, NetStateMachine::MStateTransition, CReConnectActivity::TContext)
       
   810 void CReConnectActivity::TStartNextServiceProvider::DoL()
       
   811 	{
       
   812 	__ASSERT_DEBUG(iContext.iNodeActivity, CoreMCprPanic(KPanicNoActivity));
       
   813 	CReConnectActivity& activity = static_cast<CReConnectActivity&>(*iContext.iNodeActivity);
       
   814 	__ASSERT_DEBUG(activity.iStartingSP, User::Panic(KSpecAssert_ESockCoreProvcprac, 24));
       
   815 
       
   816 	//Start the service provider
       
   817 	activity.PostRequestTo(*activity.iStartingSP, TCFServiceProvider::TStart().CRef());
       
   818 	}
   792 	}
   819 
   793 
   820 DEFINE_SMELEMENT(CReConnectActivity::TBuildLowerLayer, NetStateMachine::MStateTransition, CReConnectActivity::TContext)
   794 DEFINE_SMELEMENT(CReConnectActivity::TBuildLowerLayer, NetStateMachine::MStateTransition, CReConnectActivity::TContext)
   821 void CReConnectActivity::TBuildLowerLayer::DoL()
   795 void CReConnectActivity::TBuildLowerLayer::DoL()
   822 	{
   796 	{