telephonyprotocols/pdplayer/src/PDPDeftSCPR.cpp
branchRCL_3
changeset 21 2492a6e4aed7
parent 0 3553901f7fa8
child 24 6638e7f4bd8f
child 27 4284d6390a82
child 44 8b72faa1200f
equal deleted inserted replaced
17:3f227a47ad75 21:2492a6e4aed7
     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     }