156 // Cleanup |
156 // Cleanup |
157 CleanupStack::Pop(&bundle); |
157 CleanupStack::Pop(&bundle); |
158 CleanupStack::Pop(params); |
158 CleanupStack::Pop(params); |
159 } |
159 } |
160 |
160 |
|
161 DEFINE_SMELEMENT(FlowRequestActivities::CFlowRequestActivity::TSendBindToComplete, NetStateMachine::MStateTransition, TContext) |
|
162 void FlowRequestActivities::CFlowRequestActivity::TSendBindToComplete::DoL() |
|
163 { |
|
164 __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KCFlowRequestPanic, KPanicNoActivity)); |
|
165 CFlowRequestActivity& activity = static_cast<CFlowRequestActivity&>(*iContext.iNodeActivity); |
|
166 __ASSERT_DEBUG(!activity.iBindToSender.IsNull(), User::Panic(KSpecAssert_ESockSSockFlwRqS, 2)); |
|
167 RClientInterface::OpenPostMessageClose(iContext.Node().Id(), activity.iBindToSender, TCFDataClient::TBindToComplete().CRef()); |
|
168 activity.iBindToSender.SetNull(); |
|
169 } |
|
170 |
|
171 DEFINE_SMELEMENT(FlowRequestActivities::CFlowRequestActivity::TAwaitingBindTo, NetStateMachine::MState, TContext) |
|
172 TBool FlowRequestActivities::CFlowRequestActivity::TAwaitingBindTo::Accept() |
|
173 { |
|
174 TBool accept(EFalse); |
|
175 if(iContext.iMessage.IsMessage<TCFDataClient::TBindTo>()) |
|
176 { |
|
177 // store the node to which we send the response later on. |
|
178 __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KCFlowRequestPanic, KPanicNoActivity)); |
|
179 CFlowRequestActivity& activity = static_cast<CFlowRequestActivity&>(*iContext.iNodeActivity); |
|
180 __ASSERT_DEBUG(activity.iBindToSender.IsNull(), User::Panic(KSpecAssert_ESockSSockFlwRqS, 3)); |
|
181 activity.iBindToSender = iContext.iSender; |
|
182 accept = ETrue; |
|
183 } |
|
184 |
|
185 return accept; |
|
186 } |
161 |
187 |
162 DEFINE_SMELEMENT(FlowRequestStates::TSendNoBearer, NetStateMachine::MStateTransition, FlowRequestStates::TContext) |
188 DEFINE_SMELEMENT(FlowRequestStates::TSendNoBearer, NetStateMachine::MStateTransition, FlowRequestStates::TContext) |
163 void FlowRequestStates::TSendNoBearer::DoL() |
189 void FlowRequestStates::TSendNoBearer::DoL() |
164 { |
190 { |
165 // Make sure we are being executed in the context of a node that has an activity running |
191 // Make sure we are being executed in the context of a node that has an activity running |
253 //Join the service provider |
279 //Join the service provider |
254 iContext.iNodeActivity->PostRequestTo(*scpr, TCFServiceProvider::TJoinRequest(iContext.NodeId(), TClientType(TCFClientType::ECtrl)).CRef()); |
280 iContext.iNodeActivity->PostRequestTo(*scpr, TCFServiceProvider::TJoinRequest(iContext.NodeId(), TClientType(TCFClientType::ECtrl)).CRef()); |
255 } |
281 } |
256 |
282 |
257 |
283 |
|
284 |
|
285 DEFINE_SMELEMENT(FlowRequestStates::TSendClientLeavingAndRemoveControlProvider, NetStateMachine::MStateTransition, FlowRequestStates::TContext) |
|
286 void FlowRequestStates::TSendClientLeavingAndRemoveControlProvider::DoL() |
|
287 { |
|
288 TClientIter<TDefaultClientMatchPolicy> iter = iContext.Node().GetClientIter<TDefaultClientMatchPolicy>(TClientType(TCFClientType::ECtrlProvider)); |
|
289 RNodeInterface* cl = iter[0]; |
|
290 //It is perfectly possible that there is no Control Provider at all. |
|
291 if (cl) |
|
292 { |
|
293 __ASSERT_DEBUG(iContext.iNodeActivity, User::Panic(KCFlowRequestPanic, KPanicNoActivity)); |
|
294 cl->PostMessage(TNodeCtxId(iContext.ActivityId(), iContext.NodeId()), TEChild::TLeft().CRef()); |
|
295 iContext.Node().RemoveClient(cl->RecipientId(),iContext); |
|
296 __ASSERT_DEBUG(iter[1] == NULL, User::Panic(KCFlowRequestPanic, KPanicNoControlProvider)); //But it is not possible to have two Control Providers! |
|
297 } |
|
298 } |