datacommsserver/esockserver/test/providers/dummy/src/dummypr_connprov.cpp
branchRCL_3
changeset 18 9644881fedd0
parent 17 9ddb1d67ebaf
child 21 07656293a99c
equal deleted inserted replaced
17:9ddb1d67ebaf 18:9644881fedd0
    50 //We reserve space for two preallocated activities that may start concurrently on the CPR
    50 //We reserve space for two preallocated activities that may start concurrently on the CPR
    51 //node: destroy and data client stop.
    51 //node: destroy and data client stop.
    52 static const TUint KDefaultMaxPreallocatedActivityCount = 2;
    52 static const TUint KDefaultMaxPreallocatedActivityCount = 2;
    53 static const TUint KMaxPreallocatedActivitySize = sizeof(MeshMachine::CNodeRetryParallelActivity) + sizeof(MeshMachine::APreallocatedOriginators<4>);
    53 static const TUint KMaxPreallocatedActivitySize = sizeof(MeshMachine::CNodeRetryParallelActivity) + sizeof(MeshMachine::APreallocatedOriginators<4>);
    54 static const TUint KDummyCPRPreallocatedActivityBufferSize = KDefaultMaxPreallocatedActivityCount * KMaxPreallocatedActivitySize;
    54 static const TUint KDummyCPRPreallocatedActivityBufferSize = KDefaultMaxPreallocatedActivityCount * KMaxPreallocatedActivitySize;
    55 
    55 static const TUint KDestroyDelay = 3;
       
    56 static const TUint KMillion = 1000000;
    56 //-================================================
    57 //-================================================
    57 //
    58 //
    58 // States and Transitions
    59 // States and Transitions
    59 //
    60 //
    60 //-================================================
    61 //-================================================
       
    62 CDelayTimer* CDelayTimer::NewL( Messages::RNodeInterface* aSender, const Messages::TNodeId& aRecipient, const Messages::TNodeSignal::TMessageId& aMessageId )
       
    63     {
       
    64     CDelayTimer* timer = new(ELeave) CDelayTimer( aSender, aRecipient, aMessageId );
       
    65     CleanupStack::PushL( timer );
       
    66     timer->ConstructL();
       
    67     CleanupStack::Pop();
       
    68     return timer;
       
    69     }
       
    70 
       
    71 CDelayTimer::~CDelayTimer()
       
    72     { 
       
    73     Cancel();
       
    74     }
       
    75     
       
    76 CDelayTimer::CDelayTimer( Messages::RNodeInterface* aSender, const Messages::TNodeId& aRecipient, const Messages::TNodeSignal::TMessageId& aMessageId ) :
       
    77     CTimer( EPriorityStandard ),
       
    78     iSender(aSender),
       
    79     iRecipient(aRecipient),
       
    80     iMessageId(aMessageId)
       
    81     {
       
    82     CActiveScheduler::Add( this );
       
    83     }
       
    84     
       
    85 void CDelayTimer::ConstructL()
       
    86     {
       
    87     CTimer::ConstructL();
       
    88     }
       
    89     
       
    90 void CDelayTimer::RunL()
       
    91     {
       
    92     CDelayTimer::TDelayMessage msg(iMessageId);
       
    93     Messages::RClientInterface::OpenPostMessageClose(iSender->RecipientId() , iRecipient, msg );
       
    94     delete this;
       
    95     }
       
    96 
       
    97 void CDelayTimer::Start( TInt aIntervalInSecs )
       
    98     {
       
    99     After( TTimeIntervalMicroSeconds32( aIntervalInSecs * KMillion ) );
       
   100     }
       
   101 
       
   102 CDelayTimer::TDelayMessage::TDelayMessage()
       
   103     {
       
   104     }
       
   105 
       
   106 CDelayTimer::TDelayMessage::TDelayMessage(const TNodeSignal::TMessageId& aMessageId)
       
   107 :   TSignatureBase(aMessageId)
       
   108     {
       
   109     }
       
   110 
       
   111 
    61 namespace DummyCPRStates
   112 namespace DummyCPRStates
    62 {
   113 {
    63 DEFINE_SMELEMENT(TSetClientAsIncoming, NetStateMachine::MStateTransition, DummyCPRStates::TContext)
   114 DEFINE_SMELEMENT(TSetClientAsIncoming, NetStateMachine::MStateTransition, DummyCPRStates::TContext)
    64 void TSetClientAsIncoming::DoL()
   115 void TSetClientAsIncoming::DoL()
    65 	{
   116 	{
    84 	__ASSERT_DEBUG(commsBinderReq.iValue == TSubConnOpen::EWaitForIncoming, User::Panic(KSpecAssert_ESockTestdmyprcn, 1));
   135 	__ASSERT_DEBUG(commsBinderReq.iValue == TSubConnOpen::EWaitForIncoming, User::Panic(KSpecAssert_ESockTestdmyprcn, 1));
    85 	commsBinderReq.iValue = TSubConnOpen::ECreateNew;
   136 	commsBinderReq.iValue = TSubConnOpen::ECreateNew;
    86 	PRStates::TCreateDataClient createSCPR(iContext);
   137 	PRStates::TCreateDataClient createSCPR(iContext);
    87 	createSCPR.DoL();
   138 	createSCPR.DoL();
    88 	}
   139 	}
       
   140 
       
   141 DEFINE_SMELEMENT(TThreeSecDelayAndPostToSelf, NetStateMachine::MStateTransition, DummyCPRStates::TContext)
       
   142 void TThreeSecDelayAndPostToSelf::DoL()
       
   143     {
       
   144     CDelayTimer* delay = CDelayTimer::NewL(iContext.Node().ControlProvider(), iContext.NodeId(), iContext.iMessage.MessageId() );
       
   145     delay->Start(KDestroyDelay);
       
   146     }
    89 
   147 
    90 DEFINE_SMELEMENT(TAwaitingStart, NetStateMachine::MState, DummyCPRStates::TContext)
   148 DEFINE_SMELEMENT(TAwaitingStart, NetStateMachine::MState, DummyCPRStates::TContext)
    91 TBool TAwaitingStart::Accept()
   149 TBool TAwaitingStart::Accept()
    92 	{
   150 	{
    93 	const TLayerSelectionInfo* selectionInfo = static_cast<const TLayerSelectionInfo*>(
   151 	const TLayerSelectionInfo* selectionInfo = static_cast<const TLayerSelectionInfo*>(
    99     	{
   157     	{
   100     	return ETrue;
   158     	return ETrue;
   101     	}
   159     	}
   102     return EFalse;
   160     return EFalse;
   103 	}
   161 	}
       
   162 
       
   163 DEFINE_SMELEMENT(TAwaitingDestroy, NetStateMachine::MState, DummyCPRStates::TContext)
       
   164 TBool TAwaitingDestroy::Accept()
       
   165     {
       
   166     const TLayerSelectionInfo* selectionInfo = static_cast<const TLayerSelectionInfo*>(
       
   167         iContext.Node().AccessPointConfig().FindExtension(TLayerSelectionInfo::TypeId()));
       
   168     ASSERT(selectionInfo); // should always be there
       
   169 
       
   170     if (iContext.iMessage.IsMessage<TEChild::TDestroy>() && 
       
   171             TCprConfigModifier::Is(selectionInfo->CprConfig(), TCprConfigModifier::ECPRWaitOnThreeSecDestroy)
       
   172             && iContext.iNode.CountActivities(ECFActivityDummyCprDestroy) == 0 ) // only accept the first destroy which will subsequently be reposted to self after 3 second
       
   173         {
       
   174         static_cast<ESock::CMMCommsProviderBase&>(iContext.iNode).MarkMeForDeletion();
       
   175         return ETrue;
       
   176         }
       
   177     return EFalse;
       
   178     }
       
   179 
   104 }
   180 }
   105 
   181 
   106 //-================================================
   182 //-================================================
   107 //
   183 //
   108 // Activities
   184 // Activities
   136 	LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TRaiseError<KErrAbort>)
   212 	LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TRaiseError<KErrAbort>)
   137 NODEACTIVITY_END()
   213 NODEACTIVITY_END()
   138 }
   214 }
   139 
   215 
   140 // Activity Map For test-code ridden cpr
   216 // Activity Map For test-code ridden cpr
       
   217 namespace DummyCprDestroyActivity
       
   218 {
       
   219 DECLARE_DEFINE_NODEACTIVITY(ECFActivityDummyCprDestroy, DummyCprDestroy, TEChild::TDestroy)
       
   220     FIRST_NODEACTIVITY_ENTRY(DummyCPRStates::TAwaitingDestroy, MeshMachine::TNoTag)
       
   221     NODEACTIVITY_ENTRY(KNoTag, DummyCPRStates::TThreeSecDelayAndPostToSelf, MeshMachine::TAwaitingMessageState<Messages::TEChild::TLeft>, MeshMachine::TTag<PRStates::KContinue>)
       
   222     LAST_NODEACTIVITY_ENTRY(PRStates::KContinue, MeshMachine::TDoNothing)
       
   223 NODEACTIVITY_END()
       
   224 }
       
   225 
       
   226 // Activity Map
   141 namespace DummyCPRStates
   227 namespace DummyCPRStates
   142 {
   228 {
   143 DECLARE_DEFINE_ACTIVITY_MAP(stateMap)
   229 DECLARE_DEFINE_ACTIVITY_MAP(stateMap)
   144    ACTIVITY_MAP_ENTRY(DummyCprBinderRequestActivity, DummyCprBinderRequest)
   230    ACTIVITY_MAP_ENTRY(DummyCprBinderRequestActivity, DummyCprBinderRequest)
   145    ACTIVITY_MAP_ENTRY(DummyCprStartActivity, DummyCPrStart)
   231    ACTIVITY_MAP_ENTRY(DummyCprStartActivity, DummyCPrStart)
       
   232    ACTIVITY_MAP_ENTRY(DummyCprDestroyActivity, DummyCprDestroy)
   146 ACTIVITY_MAP_END_BASE(MobilityCprActivities, mobilityCprActivities)
   233 ACTIVITY_MAP_END_BASE(MobilityCprActivities, mobilityCprActivities)
   147 }
   234 }
       
   235 
   148 
   236 
   149 // Activity Map For vanilla cpr
   237 // Activity Map For vanilla cpr
   150 namespace VanillaDummyCPRStates
   238 namespace VanillaDummyCPRStates
   151 {
   239 {
   152 DECLARE_DEFINE_ACTIVITY_MAP(stateMap)
   240 DECLARE_DEFINE_ACTIVITY_MAP(stateMap)