25 #include <comms-infras/coremcprstates.h> |
25 #include <comms-infras/coremcprstates.h> |
26 #include <comms-infras/coremcpractivities.h> |
26 #include <comms-infras/coremcpractivities.h> |
27 #include <elements/nm_messages_errorrecovery.h> |
27 #include <elements/nm_messages_errorrecovery.h> |
28 #include <comms-infras/mobilitymcpractivities.h> |
28 #include <comms-infras/mobilitymcpractivities.h> |
29 #include "dummypr_metaconnprov.h" |
29 #include "dummypr_metaconnprov.h" |
|
30 #include "dummypr_connprov.h" |
30 #include "dummypr_mcprpubsubsubscriber.h" |
31 #include "dummypr_mcprpubsubsubscriber.h" |
31 |
32 |
32 #ifdef _DEBUG |
33 #ifdef _DEBUG |
33 #define KDummyMCprTag KESockMetaConnectionTag |
34 #define KDummyMCprTag KESockMetaConnectionTag |
34 _LIT8(KDummyMCprSubTag, "dummymcpr"); |
35 _LIT8(KDummyMCprSubTag, "dummymcpr"); |
40 using namespace Messages; |
41 using namespace Messages; |
41 using namespace MeshMachine; |
42 using namespace MeshMachine; |
42 |
43 |
43 |
44 |
44 |
45 |
|
46 DEFINE_SMELEMENT(CDummyMCPRControlClientJoinActivity::TAddControlClient, NetStateMachine::MStateTransition, TContext) |
|
47 void CDummyMCPRControlClientJoinActivity::TAddControlClient::DoL() |
|
48 { |
|
49 TCFPeer::TJoinRequest& msg = message_cast<TCFPeer::TJoinRequest>(iContext.iMessage); |
|
50 |
|
51 // Client type could be Messages::TClientType::EWorker (Selection Request) |
|
52 // or ESock::TCFClientType::ECtrl, possibly others but not ESock::TCFClientType::EData |
|
53 // which is handled by another activity |
|
54 ASSERT(msg.iClientType.Type() != (TUint32)TCFClientType::EData); |
|
55 |
|
56 iContext.Activity()->ReplaceOriginator( |
|
57 *iContext.Node().AddClientL(msg.iNodeId, TClientType(TCFClientType::ECtrl))); |
|
58 } |
|
59 |
|
60 |
|
61 DEFINE_SMELEMENT(CDummyMCPRControlClientJoinActivity::TSendJoinComplete, NetStateMachine::MStateTransition, TContext) |
|
62 void CDummyMCPRControlClientJoinActivity::TSendJoinComplete::DoL() |
|
63 { |
|
64 ASSERT(iContext.iNodeActivity); |
|
65 |
|
66 iContext.iNodeActivity->PostToOriginators(TCFPeer::TJoinComplete().CRef()); |
|
67 } |
|
68 |
|
69 |
|
70 MeshMachine::CNodeActivityBase* CDummyMCPRControlClientJoinActivity::NewL( const MeshMachine::TNodeActivity& aActivitySig, MeshMachine::AMMNodeBase& aNode ) |
|
71 { |
|
72 TUint c = GetNextActivityCountL(aActivitySig,aNode); |
|
73 return new(ELeave)CDummyMCPRControlClientJoinActivity(aActivitySig, aNode, c); |
|
74 } |
|
75 |
|
76 void CDummyMCPRControlClientJoinActivity::ReplaceOriginator(RNodeInterface& aOriginator) |
|
77 { |
|
78 iOriginators.Remove(0); |
|
79 TInt err = KErrNone; |
|
80 TRAP(err, iOriginators.AppendL(XNodePeerId(aOriginator.RecipientId(), &aOriginator))); |
|
81 ASSERT(err == KErrNone); //This test code is a wee bit lame. If executed in OOM, it may not work. |
|
82 } |
|
83 |
|
84 namespace DummyMCPRControlClientJoinActivity |
|
85 { |
|
86 //DummyMCPRControlClientJoin is a special version of the core MCPR join activity that will artificially yield some time (50ms) to schedule the |
|
87 //test app. This is done to test RConnection::Stop injections at various RConnection::Start stages. Production MCPRs yield a lot reading database or |
|
88 //consulting other external entities, so the test MCPR must try to be representative. |
|
89 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityClientJoin, DummyMCPRControlClientJoin, TCFServiceProvider::TJoinRequest, CDummyMCPRControlClientJoinActivity::NewL) |
|
90 FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingControlClientJoin, MeshMachine::TNoTag) |
|
91 THROUGH_NODEACTIVITY_ENTRY(KNoTag, CDummyMCPRControlClientJoinActivity::TAddControlClient, MeshMachine::TNoTag) |
|
92 NODEACTIVITY_ENTRY(KNoTag, CDelayTimer::TSetTimerMs<50>, CDelayTimer::TAwaitingTimerExpired, MeshMachine::TNoTag) |
|
93 THROUGH_NODEACTIVITY_ENTRY(KNoTag, MCprStates::TDecrementBlockingDestroy, MeshMachine::TNoTag) |
|
94 LAST_NODEACTIVITY_ENTRY(KNoTag, CDummyMCPRControlClientJoinActivity::TSendJoinComplete) |
|
95 NODEACTIVITY_END() |
|
96 } |
|
97 |
|
98 |
|
99 namespace DummyMCPRActivities |
|
100 { |
|
101 DECLARE_DEFINE_ACTIVITY_MAP(stateMap) |
|
102 ACTIVITY_MAP_ENTRY(DummyMCPRControlClientJoinActivity, DummyMCPRControlClientJoin) |
|
103 ACTIVITY_MAP_END_BASE(MobilityMCprActivities, mobilityMCprActivities) |
|
104 } |
|
105 |
45 CDummyMetaConnectionProvider* CDummyMetaConnectionProvider::NewL(CMetaConnectionProviderFactoryBase& aFactory, |
106 CDummyMetaConnectionProvider* CDummyMetaConnectionProvider::NewL(CMetaConnectionProviderFactoryBase& aFactory, |
46 const TProviderInfo& aProviderInfo) |
107 const TProviderInfo& aProviderInfo) |
47 { |
108 { |
48 CDummyMetaConnectionProvider* self = new (ELeave) CDummyMetaConnectionProvider(aFactory,aProviderInfo,MobilityMCprActivities::mobilityMCprActivities::Self()); |
109 CDummyMetaConnectionProvider* self = new (ELeave) CDummyMetaConnectionProvider(aFactory,aProviderInfo,DummyMCPRActivities::stateMap::Self()); |
49 CleanupStack::PushL(self); |
110 CleanupStack::PushL(self); |
50 self->ConstructL(); |
111 self->ConstructL(); |
51 CleanupStack::Pop(self); |
112 CleanupStack::Pop(self); |
52 return self; |
113 return self; |
53 } |
114 } |