--- a/datacommsserver/esockserver/core_states/ss_corepractivities.cpp Mon Mar 15 12:45:15 2010 +0200
+++ b/datacommsserver/esockserver/core_states/ss_corepractivities.cpp Wed Mar 31 23:27:09 2010 +0300
@@ -583,6 +583,15 @@
return;
}
+ //Determine who TErrorRecoveryRequest should be sent to.
+ //If there is no ControlProvider we send a RecoveryRequest to ourselves to recover from the error,
+ //otherwise we sned the RecoveryRequest up to our ControlProvider.
+ //MCPrs typically put all of the error recovery function in a single error recovery activity therefore
+ //it makes sense even for MCPrs to send TErrorRecoveryRequest to their error recovery function. By
+ //posting a TErrorRecoveryRequest sub-classes of the MCPrs get a chance to override the default error
+ //recovery.
+ RNodeInterface* errorRecoverer = iContext.Node().ControlProvider() ? iContext.Node().ControlProvider() : &iContext.Node().SelfInterface();
+
__ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KCorePrPanic, KPanicNoActivity));
CoreActivities::CErrorActivity& activity = static_cast<CoreActivities::CErrorActivity&>(*iContext.iNodeActivity);
__ASSERT_DEBUG(activity.iErroredActivityId==MeshMachine::KActivityNull, User::Panic(KSpecAssert_ESockCrStaCPRAC, 4));
@@ -597,7 +606,7 @@
TEErrorRecovery::TErrorRecoveryRequest msg(ctx);
activity.PostRequestTo(
- *iContext.Node().ControlProvider(),//ControlProvider() verified above
+ *errorRecoverer,//ControlProvider() verified above
TCFSafeMessage::TRequestCarrierEast<TEErrorRecovery::TErrorRecoveryRequest>(msg).CRef()
);
@@ -978,6 +987,8 @@
ACTIVITY_MAP_ENTRY(PRClientLeaveActivity, PRClientLeave)
ACTIVITY_MAP_ENTRY(PRForwardStateChangeActivity, PRForwardStateChange)
ACTIVITY_MAP_ENTRY(PRBindToActivity, PRBindTo)
+ ACTIVITY_MAP_ENTRY(PRDataClientStartActivity, PRDataClientStart)
+ ACTIVITY_MAP_ENTRY(PRDataClientStopActivity, PRDataClientStop)
ACTIVITY_MAP_ENTRY(PRDestroyOrphansActivity, PRDestroyOrphans)
ACTIVITY_MAP_END_BASE(CoreActivities,coreActivitiesAll)
@@ -987,8 +998,6 @@
ACTIVITY_MAP_ENTRY(PRProvisionActivity, PrProvision)
ACTIVITY_MAP_ENTRY(PRStartActivity, PRStart)
ACTIVITY_MAP_ENTRY(PRStopActivity, PRStop)
- ACTIVITY_MAP_ENTRY(PRDataClientStartActivity, PRDataClientStart)
- ACTIVITY_MAP_ENTRY(PRDataClientStopActivity, PRDataClientStop)
ACTIVITY_MAP_ENTRY(PRDataClientIdleActivity, PRDataClientIdle)
ACTIVITY_MAP_ENTRY(PRDataClientActiveActivity, PRDataClientActive)
ACTIVITY_MAP_ENTRY(PRDestroyActivity, PRDestroy)
@@ -1007,8 +1016,6 @@
ACTIVITY_MAP_ENTRY(PRProvisionActivity, PrProvision)
ACTIVITY_MAP_ENTRY(PRStartActivity, PRStart)
ACTIVITY_MAP_ENTRY(PRStopActivity, PRStop)
- ACTIVITY_MAP_ENTRY(PRDataClientStartActivity, PRDataClientStart)
- ACTIVITY_MAP_ENTRY(PRDataClientStopActivity, PRDataClientStop)
ACTIVITY_MAP_ENTRY(PRDataClientIdleActivity, PRDataClientIdle)
ACTIVITY_MAP_ENTRY(PRDataClientActiveActivity, PRDataClientActive)
ACTIVITY_MAP_ENTRY(PRDestroyActivity, PRDestroy)
@@ -2036,7 +2043,7 @@
CMMCommsProviderBase& node(static_cast<CMMCommsProviderBase&>(iNode));
const TProviderInfoExt* providerInfoExt = static_cast<const TProviderInfoExt*>(node.AccessPointConfig().FindExtension(
STypeId::CreateSTypeId(TProviderInfoExt::EUid, TProviderInfoExt::ETypeId)));
-
+
__ASSERT_DEBUG(providerInfoExt, User::Panic(KSpecAssert_ESockCrStaCPRAC, 40));
if (Error() != KErrNone)
@@ -2044,11 +2051,11 @@
CNodeActivityBase* stopActivity = iNode.FindActivityById(ECFActivityStop);
// If the Stop activity is running we skip sending the GoneDown message. This is because the Stop
- // activity will send GoneDown too.
+ // activity will send GoneDown too.
if (!stopActivity)
{
TCFControlClient::TGoneDown goneDown(Error(), providerInfoExt->iProviderInfo.APId());
-
+
TClientIter<TDefaultClientMatchPolicy> iter = iNode.GetClientIter<TDefaultClientMatchPolicy>(
TClientType(TCFClientType::ECtrl), TClientType(0, TCFClientType::ELeaving));
RNodeInterface* ctrlClient = NULL;
@@ -2060,7 +2067,7 @@
{
continue; // ControlClient is a Start originator
}
-
+
TNodeCtxId ctxId(ActivityId(), iNode.Id());
ctrlClient->PostMessage(ctxId, goneDown.CRef());
}
@@ -2204,6 +2211,3 @@
}
return CoreNetStates::KProviderStopped;
}
-
-
-