diff -r 9ddb1d67ebaf -r 9644881fedd0 datacommsserver/esockserver/test/providers/dummy/src/dummypr_connprov.cpp --- a/datacommsserver/esockserver/test/providers/dummy/src/dummypr_connprov.cpp Tue May 11 17:20:19 2010 +0300 +++ b/datacommsserver/esockserver/test/providers/dummy/src/dummypr_connprov.cpp Tue May 25 14:00:39 2010 +0300 @@ -52,12 +52,63 @@ static const TUint KDefaultMaxPreallocatedActivityCount = 2; static const TUint KMaxPreallocatedActivitySize = sizeof(MeshMachine::CNodeRetryParallelActivity) + sizeof(MeshMachine::APreallocatedOriginators<4>); static const TUint KDummyCPRPreallocatedActivityBufferSize = KDefaultMaxPreallocatedActivityCount * KMaxPreallocatedActivitySize; - +static const TUint KDestroyDelay = 3; +static const TUint KMillion = 1000000; //-================================================ // // States and Transitions // //-================================================ +CDelayTimer* CDelayTimer::NewL( Messages::RNodeInterface* aSender, const Messages::TNodeId& aRecipient, const Messages::TNodeSignal::TMessageId& aMessageId ) + { + CDelayTimer* timer = new(ELeave) CDelayTimer( aSender, aRecipient, aMessageId ); + CleanupStack::PushL( timer ); + timer->ConstructL(); + CleanupStack::Pop(); + return timer; + } + +CDelayTimer::~CDelayTimer() + { + Cancel(); + } + +CDelayTimer::CDelayTimer( Messages::RNodeInterface* aSender, const Messages::TNodeId& aRecipient, const Messages::TNodeSignal::TMessageId& aMessageId ) : + CTimer( EPriorityStandard ), + iSender(aSender), + iRecipient(aRecipient), + iMessageId(aMessageId) + { + CActiveScheduler::Add( this ); + } + +void CDelayTimer::ConstructL() + { + CTimer::ConstructL(); + } + +void CDelayTimer::RunL() + { + CDelayTimer::TDelayMessage msg(iMessageId); + Messages::RClientInterface::OpenPostMessageClose(iSender->RecipientId() , iRecipient, msg ); + delete this; + } + +void CDelayTimer::Start( TInt aIntervalInSecs ) + { + After( TTimeIntervalMicroSeconds32( aIntervalInSecs * KMillion ) ); + } + +CDelayTimer::TDelayMessage::TDelayMessage() + { + } + +CDelayTimer::TDelayMessage::TDelayMessage(const TNodeSignal::TMessageId& aMessageId) +: TSignatureBase(aMessageId) + { + } + + namespace DummyCPRStates { DEFINE_SMELEMENT(TSetClientAsIncoming, NetStateMachine::MStateTransition, DummyCPRStates::TContext) @@ -87,6 +138,13 @@ createSCPR.DoL(); } +DEFINE_SMELEMENT(TThreeSecDelayAndPostToSelf, NetStateMachine::MStateTransition, DummyCPRStates::TContext) +void TThreeSecDelayAndPostToSelf::DoL() + { + CDelayTimer* delay = CDelayTimer::NewL(iContext.Node().ControlProvider(), iContext.NodeId(), iContext.iMessage.MessageId() ); + delay->Start(KDestroyDelay); + } + DEFINE_SMELEMENT(TAwaitingStart, NetStateMachine::MState, DummyCPRStates::TContext) TBool TAwaitingStart::Accept() { @@ -101,6 +159,24 @@ } return EFalse; } + +DEFINE_SMELEMENT(TAwaitingDestroy, NetStateMachine::MState, DummyCPRStates::TContext) +TBool TAwaitingDestroy::Accept() + { + const TLayerSelectionInfo* selectionInfo = static_cast( + iContext.Node().AccessPointConfig().FindExtension(TLayerSelectionInfo::TypeId())); + ASSERT(selectionInfo); // should always be there + + if (iContext.iMessage.IsMessage() && + TCprConfigModifier::Is(selectionInfo->CprConfig(), TCprConfigModifier::ECPRWaitOnThreeSecDestroy) + && iContext.iNode.CountActivities(ECFActivityDummyCprDestroy) == 0 ) // only accept the first destroy which will subsequently be reposted to self after 3 second + { + static_cast(iContext.iNode).MarkMeForDeletion(); + return ETrue; + } + return EFalse; + } + } //-================================================ @@ -138,14 +214,26 @@ } // Activity Map For test-code ridden cpr +namespace DummyCprDestroyActivity +{ +DECLARE_DEFINE_NODEACTIVITY(ECFActivityDummyCprDestroy, DummyCprDestroy, TEChild::TDestroy) + FIRST_NODEACTIVITY_ENTRY(DummyCPRStates::TAwaitingDestroy, MeshMachine::TNoTag) + NODEACTIVITY_ENTRY(KNoTag, DummyCPRStates::TThreeSecDelayAndPostToSelf, MeshMachine::TAwaitingMessageState, MeshMachine::TTag) + LAST_NODEACTIVITY_ENTRY(PRStates::KContinue, MeshMachine::TDoNothing) +NODEACTIVITY_END() +} + +// Activity Map namespace DummyCPRStates { DECLARE_DEFINE_ACTIVITY_MAP(stateMap) ACTIVITY_MAP_ENTRY(DummyCprBinderRequestActivity, DummyCprBinderRequest) ACTIVITY_MAP_ENTRY(DummyCprStartActivity, DummyCPrStart) + ACTIVITY_MAP_ENTRY(DummyCprDestroyActivity, DummyCprDestroy) ACTIVITY_MAP_END_BASE(MobilityCprActivities, mobilityCprActivities) } + // Activity Map For vanilla cpr namespace VanillaDummyCPRStates {