1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). |
1 // Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). |
2 // All rights reserved. |
2 // All rights reserved. |
3 // This component and the accompanying materials are made available |
3 // This component and the accompanying materials are made available |
4 // under the terms of "Eclipse Public License v1.0" |
4 // under the terms of "Eclipse Public License v1.0" |
5 // which accompanies this distribution, and is available |
5 // which accompanies this distribution, and is available |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
48 namespace PDPDeftSCprDataClientStartActivity |
48 namespace PDPDeftSCprDataClientStartActivity |
49 { |
49 { |
50 typedef MeshMachine::TAcceptErrorState<CoreNetStates::TAwaitingDataClientStarted> TAwaitingDataClientStartedOrError; |
50 typedef MeshMachine::TAcceptErrorState<CoreNetStates::TAwaitingDataClientStarted> TAwaitingDataClientStartedOrError; |
51 |
51 |
52 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityStartDataClient, PDPDeftDataClientStart, TCFDataClient::TStart, PDPSCprStates::CStartActivity::NewL) |
52 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityStartDataClient, PDPDeftDataClientStart, TCFDataClient::TStart, PDPSCprStates::CStartActivity::NewL) |
53 FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingDataClientStart, PDPSCprStates::TNoTagOrAlreadyStarted) |
53 FIRST_NODEACTIVITY_ENTRY(CoreNetStates::TAwaitingDataClientStart, PDPSCprStates::TNoTagOrUserAuthenticateOrAlreadyStarted) |
54 LAST_NODEACTIVITY_ENTRY(CoreNetStates::KAlreadyStarted, PRStates::TSendDataClientStarted) |
54 LAST_NODEACTIVITY_ENTRY(CoreNetStates::KAlreadyStarted, PRStates::TSendDataClientStarted) |
55 |
55 |
|
56 NODEACTIVITY_ENTRY(PDPSCprStates::KUserAuthenticate, PDPSCprStates::TSendAuthenticate, PDPSCprStates::TAwaitingAuthenticateComplete, MeshMachine::TNoTagOrErrorTag) |
56 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TCreatePrimaryPDPCtx, PDPSCprStates::TAwaitingPrimaryPDPCtxCreated, PDPSCprStates::TNoTagOrSendErrorRecoveryRequestOrError) |
57 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TCreatePrimaryPDPCtx, PDPSCprStates::TAwaitingPrimaryPDPCtxCreated, PDPSCprStates::TNoTagOrSendErrorRecoveryRequestOrError) |
57 NODEACTIVITY_ENTRY(PDPSCprStates::KSendErrorRecoveryRequest, PDPSCprStates::TSendErrorRecoveryRequest, MeshMachine::TAwaitingErrorRecoveryResponseOrError, PDPSCprStates::TNoTagBackwardOrErrorTag) |
58 NODEACTIVITY_ENTRY(PDPSCprStates::KSendErrorRecoveryRequest, PDPSCprStates::TSendErrorRecoveryRequest, MeshMachine::TAwaitingErrorRecoveryResponseOrError, PDPSCprStates::TNoTagBackwardOrErrorTag) |
58 THROUGH_NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TFillInGrantedParamsAndImsExtParams, MeshMachine::TNoTag) |
59 THROUGH_NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TFillInGrantedParamsAndImsExtParams, MeshMachine::TNoTag) |
59 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TOverrideProvisionAndStartDataClient, TAwaitingDataClientStartedOrError, MeshMachine::TNoTagOrErrorTag) |
60 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TOverrideProvisionAndStartDataClient, TAwaitingDataClientStartedOrError, MeshMachine::TNoTagOrErrorTag) |
60 LAST_NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TSendDataClientStarted) |
61 LAST_NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::TSendDataClientStarted) |
69 NODEACTIVITY_END() |
70 NODEACTIVITY_END() |
70 } |
71 } |
71 |
72 |
72 namespace PDPSCprNetworkStatusEventActivity |
73 namespace PDPSCprNetworkStatusEventActivity |
73 { |
74 { |
74 DECLARE_DEFINE_NODEACTIVITY(ECFActivityNotification, subConnStatusEvent, TPDPFSMMessages::TPDPFSMMessage) |
75 DECLARE_DEFINE_NODEACTIVITY(ECFActivityNotification, subConnStatusEvent, TPDPMessages::TPDPFSMMessage) |
75 FIRST_NODEACTIVITY_ENTRY(PDPSCprStates::TAwaitingNetworkStatusEvent, PDPSCprStates::TNetworkStatusEventTypeTag) |
76 FIRST_NODEACTIVITY_ENTRY(PDPSCprStates::TAwaitingNetworkStatusEvent, PDPSCprStates::TNetworkStatusEventTypeTag) |
76 LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) |
77 LAST_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing) |
77 |
78 |
78 // Assume that anything other than EStatusUnattached means the network |
79 // Assume that anything other than EStatusUnattached means the network |
79 // is still up, so just ignore this event. |
80 // is still up, so just ignore this event. |
99 //[401TODO]: the swap only works for rawIp, doesn't for PPP. |
100 //[401TODO]: the swap only works for rawIp, doesn't for PPP. |
100 //[401TODO]: if we stick to the transpartent swap, we need to change the message |
101 //[401TODO]: if we stick to the transpartent swap, we need to change the message |
101 // this scpr sends to the flow. The flow responds with a full swap |
102 // this scpr sends to the flow. The flow responds with a full swap |
102 // to TRejoin, whereas TRejoin doesn't mean swap - suggesting to |
103 // to TRejoin, whereas TRejoin doesn't mean swap - suggesting to |
103 // introduce PDP level msg: TRejoinAndSwap. |
104 // introduce PDP level msg: TRejoinAndSwap. |
104 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityGoneDown, PDPDeftSCprGoneDown, TPDPFSMMessages::TPDPFSMMessage, PDPSCprStates::CPrimaryPDPGoneDownActivity::NewL) |
105 DECLARE_DEFINE_CUSTOM_NODEACTIVITY(ECFActivityGoneDown, PDPDeftSCprGoneDown, TPDPMessages::TPDPFSMMessage, PDPSCprStates::CPrimaryPDPGoneDownActivity::NewL) |
105 FIRST_NODEACTIVITY_ENTRY(PDPSCprStates::TAwaitingPDPContextGoneDown, MeshMachine::TActiveOrNoTag<ECFActivityStartDataClient>) |
106 FIRST_NODEACTIVITY_ENTRY(PDPSCprStates::TAwaitingPDPContextGoneDown, MeshMachine::TActiveOrNoTag<ECFActivityStartDataClient>) |
106 THROUGH_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, PDPSCprStates::CPrimaryPDPGoneDownActivity::TNoTagOrProviderStopped) |
107 THROUGH_NODEACTIVITY_ENTRY(KNoTag, MeshMachine::TDoNothing, PDPSCprStates::CPrimaryPDPGoneDownActivity::TNoTagOrProviderStopped) |
107 THROUGH_NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::CPrimaryPDPGoneDownActivity::TStoreOriginalDataClient, MeshMachine::TNoTag) |
108 THROUGH_NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::CPrimaryPDPGoneDownActivity::TStoreOriginalDataClient, MeshMachine::TNoTag) |
108 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::CPrimaryPDPGoneDownActivity::TRejoinDataClient, CoreNetStates::TAwaitingRejoinDataClientComplete, MeshMachine::TNoTag) |
109 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::CPrimaryPDPGoneDownActivity::TRejoinDataClient, CoreNetStates::TAwaitingRejoinDataClientComplete, MeshMachine::TNoTag) |
109 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::CPrimaryPDPGoneDownActivity::TApplyNewDefault, TAwaitingApplyResponseOrError, MeshMachine::TNoTag) |
110 NODEACTIVITY_ENTRY(KNoTag, PDPSCprStates::CPrimaryPDPGoneDownActivity::TApplyNewDefault, TAwaitingApplyResponseOrError, MeshMachine::TNoTag) |
155 // CPDPDefaultSubConnectionProvider methods |
156 // CPDPDefaultSubConnectionProvider methods |
156 // |
157 // |
157 //-========================================================= |
158 //-========================================================= |
158 |
159 |
159 CPDPDefaultSubConnectionProvider::CPDPDefaultSubConnectionProvider(ESock::CSubConnectionProviderFactoryBase& aFactory) |
160 CPDPDefaultSubConnectionProvider::CPDPDefaultSubConnectionProvider(ESock::CSubConnectionProviderFactoryBase& aFactory) |
160 : CPDPSubConnectionProvider(aFactory, PDPDefSCprActivities::activityMap::Self()) |
161 : CPDPSubConnectionProvider(aFactory, PDPDefSCprActivities::activityMap::Self()), |
|
162 iAuthDialog(NULL) |
161 { |
163 { |
162 LOG_NODE_CREATE1(KPDPSCprSubTag, CPDPDefaultSubConnectionProvider, " [factory=%08x]", &aFactory) |
164 LOG_NODE_CREATE1(KPDPSCprSubTag, CPDPDefaultSubConnectionProvider, " [factory=%08x]", &aFactory) |
163 __FLOG_OPEN(KCFNodeTag, KPDPSCprSubTag); |
165 __FLOG_OPEN(KCFNodeTag, KPDPSCprSubTag); |
164 } |
166 } |
165 |
167 |
166 CPDPDefaultSubConnectionProvider::~CPDPDefaultSubConnectionProvider() |
168 CPDPDefaultSubConnectionProvider::~CPDPDefaultSubConnectionProvider() |
167 { |
169 { |
168 LOG_NODE_DESTROY(KPDPSCprSubTag, CPDPDefaultSubConnectionProvider) |
170 LOG_NODE_DESTROY(KPDPSCprSubTag, CPDPDefaultSubConnectionProvider) |
169 __FLOG_CLOSE; |
171 __FLOG_CLOSE; |
|
172 delete iAuthDialog; |
170 } |
173 } |
171 |
174 |
172 CPDPDefaultSubConnectionProvider* CPDPDefaultSubConnectionProvider::NewL(CPDPSubConnectionProviderFactory& aFactory) |
175 CPDPDefaultSubConnectionProvider* CPDPDefaultSubConnectionProvider::NewL(CPDPSubConnectionProviderFactory& aFactory) |
173 /** |
176 /** |
174 Construct a new PDP SubConnection Provider Object |
177 Construct a new PDP SubConnection Provider Object |
192 |
195 |
193 void CPDPDefaultSubConnectionProvider::PdpFsmAllContextEvent(TInt aNotification, TInt /*aParam*/) |
196 void CPDPDefaultSubConnectionProvider::PdpFsmAllContextEvent(TInt aNotification, TInt /*aParam*/) |
194 { |
197 { |
195 if (aNotification == KNetworkStatusEvent) |
198 if (aNotification == KNetworkStatusEvent) |
196 { |
199 { |
197 TPDPFSMMessages::TPDPFSMMessage statusMsg(KNetworkStatusEvent, KErrNone); |
200 TPDPMessages::TPDPFSMMessage statusMsg(KNetworkStatusEvent, KErrNone); |
198 TRAP_IGNORE(ReceivedL(TNodeId(Id()), TNodeCtxId(0, Id()), statusMsg)); //TODO - use trap assert? |
201 TRAP_IGNORE(ReceivedL(TNodeId(Id()), TNodeCtxId(0, Id()), statusMsg)); //TODO - use trap assert? |
199 } |
202 } |
200 } |
203 } |
201 |
204 |
202 void CPDPDefaultSubConnectionProvider::LinkUp() |
205 void CPDPDefaultSubConnectionProvider::LinkUp() |
261 dc->PostMessage(Id(), TCFControlProvider::TIdle().CRef()); |
264 dc->PostMessage(Id(), TCFControlProvider::TIdle().CRef()); |
262 } |
265 } |
263 } |
266 } |
264 } |
267 } |
265 } |
268 } |
|
269 |
|
270 void CPDPDefaultSubConnectionProvider::AuthenticateL() |
|
271 { |
|
272 __ASSERT_DEBUG(iAuthDialog == NULL, User::Invariant()); |
|
273 |
|
274 //Update & send user name, password from commsdat; it is upto dialog server to decide which information to show to the user |
|
275 RPacketContext::TProtocolConfigOptionV2* configOption = ProtocolConfigOptionL(); |
|
276 |
|
277 iUsername.Copy(configOption->iAuthInfo.iUsername); |
|
278 iPassword.Copy(configOption->iAuthInfo.iPassword); |
|
279 |
|
280 __CFLOG_VAR((KPDPSCprTag, KPDPSCprSubTag, _L8("CPDPSubConnectionProvider [this=%08x]::AuthenticationCompleteL() KCDTIdWCDMAIfAuthName [%S] "), this, &iUsername)); |
|
281 __CFLOG_VAR((KPDPSCprTag, KPDPSCprSubTag, _L8("CPDPSubConnectionProvider [this=%08x]::AuthenticationCompleteL() KCDTIdWCDMAIfAuthName [%S] "), this, &iPassword)); |
|
282 |
|
283 iAuthDialog = CAuthenticationDialog::NewL(); |
|
284 iAuthDialog->Authenticate(*this, iUsername, iPassword); |
|
285 } |
|
286 |
|
287 void CPDPDefaultSubConnectionProvider::AuthenticationCompleteL(TInt aError) |
|
288 { |
|
289 //Update user name & password |
|
290 if (aError == KErrNone) |
|
291 { |
|
292 RPacketContext::TProtocolConfigOptionV2* configOption = ProtocolConfigOptionL(); |
|
293 |
|
294 configOption->iAuthInfo.iUsername.Copy(iUsername); |
|
295 configOption->iAuthInfo.iPassword.Copy(iPassword); |
|
296 |
|
297 __CFLOG_VAR((KPDPSCprTag, KPDPSCprSubTag, _L8("CPDPSubConnectionProvider [this=%08x]::AuthenticationCompleteL() KCDTIdWCDMAIfAuthName [%S] "), this, &configOption->iAuthInfo.iUsername)); |
|
298 __CFLOG_VAR((KPDPSCprTag, KPDPSCprSubTag, _L8("CPDPSubConnectionProvider [this=%08x]::AuthenticationCompleteL() KCDTIdWCDMAIfAuthName [%S] "), this, &configOption->iAuthInfo.iPassword)); |
|
299 } |
|
300 |
|
301 //Send AuthenticateComplete message |
|
302 RClientInterface::OpenPostMessageClose(Id(), Id(), |
|
303 TPDPMessages::TAuthenticateComplete(aError).CRef()); |
|
304 |
|
305 delete iAuthDialog; |
|
306 iAuthDialog = NULL; |
|
307 } |
|
308 |
|
309 RPacketContext::TProtocolConfigOptionV2* CPDPDefaultSubConnectionProvider::ProtocolConfigOptionL() |
|
310 /** |
|
311 * This function returns the pointer to TProtocolConfigOptionV2 parameter of ContextConfig. |
|
312 */ |
|
313 { |
|
314 CGPRSProvision* gprsProvision = const_cast<CGPRSProvision*>(static_cast<const CGPRSProvision*>( |
|
315 AccessPointConfig().FindExtension(STypeId::CreateSTypeId(CGPRSProvision::EUid,CGPRSProvision::ETypeId)))); |
|
316 |
|
317 if (gprsProvision == NULL) |
|
318 { |
|
319 User::Leave(KErrCorrupt); |
|
320 } |
|
321 |
|
322 RPacketContext::TProtocolConfigOptionV2* configOption=NULL; |
|
323 |
|
324 switch (gprsProvision->UmtsGprsRelease()) |
|
325 { |
|
326 case TPacketDataConfigBase::KConfigGPRS: |
|
327 { |
|
328 RPacketContext::TContextConfigGPRS& contextGPRS = gprsProvision->GetScratchContextAs<RPacketContext::TContextConfigGPRS>(); |
|
329 configOption = &contextGPRS.iProtocolConfigOption; |
|
330 } |
|
331 break; |
|
332 case TPacketDataConfigBase::KConfigRel99Rel4: |
|
333 { |
|
334 RPacketContext::TContextConfigR99_R4& contextUMTS = gprsProvision->GetScratchContextAs<RPacketContext::TContextConfigR99_R4>(); |
|
335 configOption = &contextUMTS.iProtocolConfigOption; |
|
336 } |
|
337 break; |
|
338 case TPacketDataConfigBase::KConfigRel5: |
|
339 { |
|
340 RPacketContext::TContextConfig_R5& contextR5 = gprsProvision->GetScratchContextAs<RPacketContext::TContextConfig_R5>(); |
|
341 configOption = &contextR5.iProtocolConfigOption; |
|
342 } |
|
343 break; |
|
344 default: |
|
345 User::Leave(KErrNotSupported); |
|
346 break; |
|
347 } |
|
348 return configOption; |
|
349 } |