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