diff -r ac20d6a0a19d -r b982c3e940f3 telephonyprotocols/umtsgprsscpr/spudtel/src/eteldriverstrategies.cpp --- a/telephonyprotocols/umtsgprsscpr/spudtel/src/eteldriverstrategies.cpp Mon Aug 09 17:43:08 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1364 +0,0 @@ -// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). -// All rights reserved. -// This component and the accompanying materials are made available -// under the terms of "Eclipse Public License v1.0" -// which accompanies this distribution, and is available -// at the URL "http://www.eclipse.org/legal/epl-v10.html". -// -// Initial Contributors: -// Nokia Corporation - initial contribution. -// -// Contributors: -// -// Description: -// A collection of etel driver strategies -// -// - -/** - @file - @internalComponent -*/ - -#include - -#include "ceteldrivercontext.h" -#include "eteldriverstrategies.h" -#include "spudteldebuglogger.h" -#include "pdpfsmnmspace.h" - -#include - - -// -// TOpenStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TOpenStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TOpenStrategy::Next()"); - - TInt err = KErrNone; - - switch(aContext.StrategyStep()) - { - case EStartStep: - { - aContext.Phone().Initialise (*aStatus); - aContext.SetStrategyStep(EInitPhoneStep); - break; - } - - case EInitPhoneStep: - { - aContext.SetStrategyStep(EFinishStep); - break; - } - - default: - // incorrect step - SPUDTEL_ERROR_LOG0(_L("Incorrect step")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - - } // switch - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TOpenStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus) - { - if(aCompletionStatus == KErrNone) - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPhoneOpened")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPhoneOpened); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPhoneOpenedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPhoneOpenedFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TOpenStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - switch(aContext.StrategyStep()) - { - case EInitPhoneStep: - { - SPUDTEL_INFO_LOG(_L("Cancel Phone::InitialiseCancel")); - aContext.Phone().InitialiseCancel(); - break; - } - - default: - // there're NO outstanding async requests - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case in TOpenStrategy::CancelAsyncRequest")); - ASSERT(EFalse); - break; - } - } - - -// -// TContextDeleteStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TContextDeleteStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TContextDeleteStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus)"); - - TInt err = KErrNone; - - // steps: - // -- cancel notifications - // -- deactivate context - // -- close QoS - // -- close context - // -- delete context - switch(aContext.StrategyStep()) - { - case EStartStep: - { - // cancel associated notifications - // -- StatusChangeNotifier - // -- QoSChangeNotifier - // -- ConfigChangeNotifier - - if (aContext.PacketContext().SubSessionHandle()) - { - aContext.PacketContext().Deactivate(*aStatus); - aContext.SetStrategyStep (EDeactivateStep); - } - else - { - aContext.SetStrategyStep(EDeactivateStep); - User::RequestComplete(aStatus, err); - } - break; - } - - case EDeactivateStep: - { - if (aContext.PacketQoS().SubSessionHandle()) - { - aContext.QoSChangeNotifierCancel(); - aContext.PacketQoS().Close(); - } - - if (aContext.PacketContext().SubSessionHandle()) - { - aContext.PdpConfigChangeNotifierCancel(); - aContext.PdpStatusChangeNotifierCancel(); - aContext.PacketContext().Delete(*aStatus); - aContext.SetStrategyStep(EDeleteContextStep); - } - else - { - // jump to next step - aContext.SetStrategyStep(EDeleteContextStep); - User::RequestComplete( aStatus, err); - } - break; - } - - - case EDeleteContextStep: - { - aContext.PacketContext().Close(); - // clear the name - aContext.Name().Zero(); - aContext.SetStrategyStep (EFinishStep); - break; - } - - default: - // incorrect step - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - - } // switch - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TContextDeleteStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus) - { - aContext.PdpFsmInterface().Set(aContext.Id(), RPacketContext::EStatusDeleted); - - if(aCompletionStatus == KErrNone) - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EContextDeleted")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EContextDeleted); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EContextDeletedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EContextDeletedFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TContextDeleteStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - SPUDTEL_FNLOG("TContextDeleteStrategy::CancelAsyncRequest()"); - - // When there is no sub-session, the strategy will not call DeactivateContext, but will be in the EDeactivateStep state - // In this case we don't want to cancel the deactivate request - if (aContext.iStatus != KRequestPending) - { - return; - } - - switch(aContext.StrategyStep()) - { - case EDeactivateStep: - { - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketContextDeactivate")); - aContext.PacketContext().CancelAsyncRequest(EPacketContextDeactivate); - break; - } - - case EDeleteContextStep: - { - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketContextDelete")); - aContext.PacketContext().CancelAsyncRequest(EPacketContextDelete); - break; - } - - default: - // there're NO outstanding async requests - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - break; - } - } - - -// -// TCreate1ryPdpContextStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TCreate1ryPdpContextStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TCreate1ryPdpContextStrategy::Next()"); - - TInt err = KErrNone; - - // possible steps: - // -- open new context - // -- open new QoS - // -- initialise context - switch(aContext.StrategyStep()) - { - case EStartStep: - { - err = aContext.PacketContext().OpenNewContext (aContext.PacketService(), aContext.Name()); - if (err) - { - SPUDTEL_ERROR_LOG(_L("PacketContextOpenNewContext returned %d"), err); - break; - } - - // get packet config from fsm - aContext.PdpFsmInterface().Get (aContext.Id(), aContext.ContextConfigGPRS()); - // async set config - aContext.PacketContext().SetConfig (*aStatus, aContext.ContextConfigGPRSPckg()); - // set next step - aContext.SetStrategyStep (ESetConfigStep); - break; - } - - case ESetConfigStep: - { - // QoS name is not used anywhere - TName newName; - err = aContext.PacketQoS().OpenNewQoS (aContext.PacketContext(), newName); - if (err) - { - SPUDTEL_ERROR_LOG(_L("PacketQoS OpenNewQoS returned %d"), err); - break; - } - -#ifdef SYMBIAN_NETWORKING_UMTSR5 - RPacketQoS::TQoSR5Requested r5; - aContext.PdpFsmInterface().Get (aContext.Id(), r5); - aContext.QosRequested() = r5; -#else - RPacketQoS::TQoSR99_R4Requested r4; - aContext.PdpFsmInterface().Get (aContext.Id(), r4); - aContext.QosRequested() = r4; -#endif -// SYMBIAN_NETWORKING_UMTSR5 - - -#ifdef _DEBUG - aContext.DumpReqProfileParameters (); -#endif - aContext.PacketQoS().SetProfileParameters (*aStatus, aContext.QosRequestedPckg()); - aContext.SetStrategyStep (ESetProfileParamsStep); - break; - } - - case ESetProfileParamsStep: - { - aContext.SetStrategyStep (EFinishStep); - break; - } - - default: - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TCreate1ryPdpContextStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus) -{ - if(aCompletionStatus == KErrNone) - { - // start notifications in case of normal creation of a context - // -- StatusChangeNotifier - // -- QoSChangeNotifier - // -- ConfigChangeNotifier - aContext.StartNotifications(); - - SPUDTEL_INFO_LOG(_L("Notifying FSM: E1ryPdpContextCreated")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::E1ryPdpContextCreated); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: E1ryPdpContextCreatedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::E1ryPdpContextCreatedFailed, aCompletionStatus.Int()); - } -} - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TCreate1ryPdpContextStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - SPUDTEL_FNLOG("TCreate1ryPdpContextStrategy::CancelAsyncRequest()"); - - switch(aContext.StrategyStep()) - { - case ESetConfigStep: - { - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketContextSetConfig")); - aContext.PacketContext().CancelAsyncRequest(EPacketContextSetConfig); - break; - } - - case ESetProfileParamsStep: - { - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketQoSSetProfileParams")); - aContext.PacketQoS().CancelAsyncRequest(EPacketQoSSetProfileParams); - break; - } - - default: - // there're NO outstanding async requests - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - break; - } - } - - -// -// TCreate2ryPdpContextStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TCreate2ryPdpContextStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TCreate2ryPdpContextStrategy::Next()"); - - TInt err = KErrNone; - - // possible steps: - // -- open new secondary context - // -- open new QoS - // -- initialise context - switch(aContext.StrategyStep()) - { - case EStartStep: - { - const TName& existingContextName = aContext.ExistingContextName(); - aContext.PacketContext().OpenNewSecondaryContext(aContext.PacketService(), existingContextName, aContext.Name()); - - // QoS name is not used anywhere - TName newName; - err = aContext.PacketQoS().OpenNewQoS (aContext.PacketContext(), newName); - if (err) - { - SPUDTEL_ERROR_LOG(_L("PacketQoS OpenNewQoS returned %d"), err); - break; - } - - aContext.SetStrategyStep (EFinishStep); - break; - } - - default: - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TCreate2ryPdpContextStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus ) -{ - if(aCompletionStatus == KErrNone) - { - // start notifications in case of normal creation of a context - // -- StatusChangeNotifier - // -- QoSChangeNotifier - // -- ConfigChangeNotifier - aContext.StartNotifications(); - - SPUDTEL_INFO_LOG(_L("Notifying FSM: E2ryPdpContextCreated")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::E2ryPdpContextCreated); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: E2ryPdpContextCreatedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::E2ryPdpContextCreatedFailed, aCompletionStatus.Int()); - } -} - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TCreate2ryPdpContextStrategy::CancelAsyncRequest(CEtelDriverContext& /*aContext*/) - { - SPUDTEL_FNLOG("TCreate2ryPdpContextStrategy::CancelAsyncRequest()"); - SPUDTEL_ERROR_LOG0(_L("ERROR: No outstanding requests")); - } - - -// -// TSetQoSStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TSetQoSStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TSetQoSStrategy::Next()"); - - TInt err = KErrNone; - - // possible steps: - // -- set QoS profile parameters - switch(aContext.StrategyStep()) - { - case EStartStep: - { -#ifdef SYMBIAN_NETWORKING_UMTSR5 - RPacketQoS::TQoSR5Requested req; -#else - RPacketQoS::TQoSR99_R4Requested req; -#endif -// SYMBIAN_NETWORKING_UMTSR5 - - aContext.PdpFsmInterface().Get (aContext.Id(), req); - aContext.QosRequested() = req; - - -#ifdef _DEBUG - aContext.DumpReqProfileParameters (); -#endif - aContext.PacketQoS().SetProfileParameters (*aStatus, aContext.QosRequestedPckg()); - aContext.SetStrategyStep (ESetProfileParamsStep); - break; - } - - case ESetProfileParamsStep: - { - aContext.SetStrategyStep (EFinishStep); - break; - } - - default: - { - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -FSM completion notification -and setting QoSR99_R4Negotiated in spud FSM -*/ -void TSetQoSStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus ) - { - if(aCompletionStatus == KErrNone) - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EQoSSet")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EQoSSet); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EQoSSetFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EQoSSetFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TSetQoSStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - switch(aContext.StrategyStep()) - { - case ESetProfileParamsStep: - { - aContext.PacketQoS().CancelAsyncRequest(EPacketQoSSetProfileParams); - SPUDTEL_INFO_LOG(_L("Cancel PacketQoS::EPacketQoSSetProfileParams")); - break; - } - - default: - // there're NO outstanding async requests - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case in TSetQoSStrategy::CancelAsyncRequest")); - ASSERT(EFalse); - break; - } - } - - -// -// TSetTftStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TSetTftStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TSetTftStrategy::Next()"); - - TInt err = KErrNone; - - // possible steps: - // -- add filters - switch(aContext.StrategyStep()) - { - case EStartStep: - { - aContext.PdpFsmInterface().Get (aContext.Id(), aContext.TftOperationCode()); - switch(aContext.TftOperationCode()) - { - case KAddFilters: - aContext.PdpFsmInterface().Get (aContext.Id(), aContext.TftInfo()); - SPUDTELVERBOSE_INFO_LOG1(_L("TftOperationCode - Add Filters"), aContext.TftInfo().FilterCount()); - // Set strategy assumes that TFT has to be created on a first place - SPUDTELVERBOSE_INFO_LOG(_L("Creating TFT...")); - aContext.PacketContext().CreateNewTFT(*aStatus, aContext.TftInfo().FilterCount()); - aContext.SetStrategyStep (ECreateNewTFTStep); - break; - - case KRemoveFilters: - err = KErrNotSupported; - SPUDTEL_ERROR_LOG(_L("TftOperationCode - Remove is not supported in a Set strategy, return %d"), err); - break; - - case KDeleteTFT: - err = KErrNotSupported; - SPUDTEL_ERROR_LOG(_L("TftOperationCode - Delete is not supported in a Set strategy, return %d"), err); - break; - - default: - // wrong case - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - break; - } - - case ECreateNewTFTStep: - { - TInt err1st = aContext.FirstFilterV2(); - if(err1st == KErrNone) - { - aContext.PacketContext().AddPacketFilter( *aStatus, aContext.FilterV2Pckg()); - aContext.SetStrategyStep (EAddTftStep); - } - else // done - { - // internal check - ASSERT((aContext.TftRequested() <= aContext.TftInfo().FilterCount())); - aContext.SetStrategyStep (EFinishStep); - } - - break; - } - - case EAddTftStep: - { - TInt errV2 = aContext.NextFilterV2(); - if(errV2 == KErrNone) - { - aContext.PacketContext().AddPacketFilter( *aStatus, aContext.FilterV2Pckg()); - aContext.SetStrategyStep (EAddTftStep); - } - else // done - { - // internal check - ASSERT((aContext.TftRequested() <= aContext.TftInfo().FilterCount())); - aContext.SetStrategyStep (EFinishStep); - } - - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TSetTftStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus ) - { - if(aCompletionStatus == KErrNone) - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: ETftSet")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::ETftSet); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: ETftSetFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::ETftSetFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TSetTftStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - switch(aContext.StrategyStep()) - { - case ECreateNewTFTStep: - { - aContext.PacketQoS().CancelAsyncRequest(EPacketContextCreateNewTFT); - SPUDTEL_INFO_LOG(_L("Cancel PacketQoS::EPacketContextCreateNewTFT")); - break; - } - - case EAddTftStep: - { - aContext.PacketQoS().CancelAsyncRequest(EPacketContextAddPacketFilter); - SPUDTEL_INFO_LOG(_L("Cancel PacketQoS::EPacketContextAddPacketFilter")); - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case in TSetTftStrategy::CancelAsyncRequest")); - ASSERT(EFalse); - break; - } - } - - -// -// TChangeTftStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TChangeTftStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TChangeTftStrategy::Next()"); - - TInt err = KErrNone; - - // special case. - if(EStartStep == aContext.StrategyStep()) - { - aContext.PdpFsmInterface().Get (aContext.Id(), aContext.TftOperationCode()); - switch(aContext.TftOperationCode()) - { - case KAddFilters: - aContext.PdpFsmInterface().Get (aContext.Id(), aContext.TftInfo()); - SPUDTELVERBOSE_INFO_LOG1(_L("TftOperationCode - Add Filters"), aContext.TftInfo().FilterCount()); - aContext.SetStrategyStep (EAddFirstTftStep); - break; - - case KRemoveFilters: - aContext.PdpFsmInterface().Get (aContext.Id(), aContext.TftInfo()); - SPUDTELVERBOSE_INFO_LOG1(_L("TftOperationCode - Remove %d Filters"), aContext.TftInfo().FilterCount()); - aContext.SetStrategyStep (ERemoveFirstTftStep); - break; - - case KDeleteTFT: - SPUDTELVERBOSE_INFO_LOG(_L("TftOperationCode - Delete TFT")); - // delete old TFT - aContext.PacketContext().DeleteTFT(*aStatus); - aContext.SetStrategyStep (EDeleteTftStep); - // DeleteTFT() ia an async operation => return - return; - - default: - // wrong case - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - } - - // possible steps: - // -- delete TFT - // -- add filters - // -- remove filters - if(!err) - { - switch(aContext.StrategyStep()) - { - case EDeleteTftStep: - { - aContext.SetStrategyStep (EChangeTftFinished); - User::RequestComplete( aStatus, KErrNone); - break; - } - - case EAddFirstTftStep: - { - TInt errV2 = aContext.FirstFilterV2(); - if(errV2 == KErrNone) - { - aContext.PacketContext().AddPacketFilter( *aStatus, aContext.FilterV2Pckg()); - aContext.SetStrategyStep (EAddTftStep); - } - else // done - { - aContext.SetStrategyStep (EChangeTftFinished); - User::RequestComplete( aStatus, KErrNone); - } - - break; - } - - case EAddTftStep: - { - TInt errV2 = aContext.NextFilterV2(); - if(errV2 == KErrNone) - { - aContext.PacketContext().AddPacketFilter( *aStatus, aContext.FilterV2Pckg()); - aContext.SetStrategyStep (EAddTftStep); - } - else // done - { - aContext.SetStrategyStep (EChangeTftFinished); - User::RequestComplete( aStatus, KErrNone); - } - - break; - } - - case ERemoveFirstTftStep: - { - TInt errV2 = aContext.FirstFilterV2(); - if(errV2 == KErrNone) - { - aContext.PacketContext().RemovePacketFilter( *aStatus, aContext.FilterV2().iId); - aContext.SetStrategyStep (ERemoveTftStep); - } - else // done - { - aContext.SetStrategyStep (EChangeTftFinished); - User::RequestComplete( aStatus, KErrNone); - } - - break; - } - - case ERemoveTftStep: - { - TInt errV2 = aContext.NextFilterV2(); - if(errV2 == KErrNone) - { - aContext.PacketContext().RemovePacketFilter( *aStatus, aContext.FilterV2().iId); - aContext.SetStrategyStep (ERemoveTftStep); - } - else // done - { - aContext.SetStrategyStep (EChangeTftFinished); - User::RequestComplete( aStatus, KErrNone); - } - - break; - } - - case EChangeTftFinished: - { - aContext.SetStrategyStep (EFinishStep); - } - break; - - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TChangeTftStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus ) - { - if(aCompletionStatus == KErrNone) - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: ETftChanged")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::ETftChanged); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: ETftChangedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::ETftChangedFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TChangeTftStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - switch(aContext.StrategyStep()) - { - case EDeleteTftStep: - { - SPUDTEL_INFO_LOG(_L("Cancel PacketQoS::EPacketContextDeleteTFTCancel")); - aContext.PacketQoS().CancelAsyncRequest(EPacketContextDeleteTFTCancel); - break; - } - - case ERemoveTftStep: - { - SPUDTEL_INFO_LOG(_L("Cancel PacketQoS::EPacketContextRemovePacketFilterCancel")); - aContext.PacketQoS().CancelAsyncRequest(EPacketContextRemovePacketFilterCancel); - break; - } - - case EAddTftStep: - { - SPUDTEL_INFO_LOG(_L("Cancel PacketQoS::EPacketContextAddPacketFilter")); - aContext.PacketQoS().CancelAsyncRequest(EPacketContextAddPacketFilterCancel); - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case in TChangeTftStrategy::CancelAsyncRequest")); - ASSERT(EFalse); - break; - } - } - - -// -// TActivatePdpStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TActivatePdpStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TActivatePdpStrategy::Next()"); - - TInt err = KErrNone; - - switch(aContext.StrategyStep()) - { - case EStartStep: - { - aContext.PacketContext().Activate(*aStatus); - aContext.SetStrategyStep (EActivateStep); - break; - } - - case EActivateStep: - { - aContext.PdpFsmInterface().Get (aContext.Id(), aContext.ContextConfigGPRS()); - aContext.PacketContext().GetConfig (*aStatus, aContext.ContextConfigGPRSPckg()); - aContext.SetStrategyStep (EGetConfigStep); - break; - } - - case EGetConfigStep: - { - aContext.PdpFsmInterface().Set (aContext.Id(), aContext.ContextConfigGPRS()); - aContext.PacketContext().InitialiseContext(*aStatus, aContext.DataChannelV2Pckg()); - aContext.SetStrategyStep (EInitialiseContextStep); - break; - } - - case EInitialiseContextStep: - { - if (KPrimaryContextId == aContext.Id()) - { - aContext.PacketQoS().GetProfileParameters (*aStatus, aContext.QosNegotiatedPckg()); -#ifdef _DEBUG - aContext.DumpNegProfileParameters (); -#endif - aContext.SetStrategyStep (EGetProfileParamsStep); - } - else - { - aContext.SetStrategyStep (EFinishStep); - } - break; - } - - case EGetProfileParamsStep: - { - aContext.SetStrategyStep (EFinishStep); - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TActivatePdpStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus ) - { - if(aCompletionStatus == KErrNone) - { - SPUDTELVERBOSE_INFO_LOG(_L("FSM set: DataChannelV2")); - aContext.PdpFsmInterface().Set(aContext.Id(), aContext.DataChannelV2()); - -#ifdef SYMBIAN_NETWORKING_UMTSR5 - SPUDTELVERBOSE_INFO_LOG(_L("FSM set: QoSR5Negotiated")); - aContext.PdpFsmInterface().Set(aContext.Id(), aContext.QosNegotiated().NegotiatedQoSR5()); - -#else - SPUDTELVERBOSE_INFO_LOG(_L("FSM set: QoSR99_R4Negotiated")); - aContext.PdpFsmInterface().Set(aContext.Id(), aContext.QosNegotiated().NegotiatedQoSR99_R4()); -#endif -// SYMBIAN_NETWORKING_UMTSR5 - - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPdpActivated")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPdpActivated); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPdpActivatedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPdpActivatedFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TActivatePdpStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - switch(aContext.StrategyStep()) - { - case EActivateStep: - { - aContext.PacketContext().CancelAsyncRequest(EPacketContextActivate); - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketContextActivate")); - break; - } - - case EGetConfigStep: - { - aContext.PacketContext().CancelAsyncRequest(EGetConfigStep); - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EGetConfigStep")); - break; - } - - case EInitialiseContextStep: - { - aContext.PacketContext().CancelAsyncRequest(EPacketContextInitialiseContext); - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketContextInitialiseContext")); - break; - } - - case EGetProfileParamsStep: - { - if(KPrimaryContextId == aContext.Id()) - { - aContext.PacketContext().CancelAsyncRequest(EPacketQoSGetProfileParams); - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketQoSGetProfileParams")); - break; - } - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case in TActivatePdpStrategy::CancelAsyncRequest")); - ASSERT(EFalse); - break; - } - } - -// -// TGetNegQoSStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TGetNegQoSStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TGetNegQoSStrategy::Next()"); - - TInt err = KErrNone; - - switch(aContext.StrategyStep()) - { - case EStartStep: - { - aContext.PacketQoS().GetProfileParameters (*aStatus, aContext.QosNegotiatedPckg()); -#ifdef _DEBUG - aContext.DumpNegProfileParameters (); -#endif - aContext.SetStrategyStep (EGetProfileParamsStep); - break; - } - - case EGetProfileParamsStep: - { - aContext.SetStrategyStep (EFinishStep); - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TGetNegQoSStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus ) - { - if(aCompletionStatus == KErrNone) - { -#ifdef SYMBIAN_NETWORKING_UMTSR5 - SPUDTELVERBOSE_INFO_LOG(_L("FSM set: QoSR5Negotiated")); - aContext.PdpFsmInterface().Set(aContext.Id(), aContext.QosNegotiated().NegotiatedQoSR5()); - -#else -// !SYMBIAN_NETWORKING_UMTSR5 - - SPUDTELVERBOSE_INFO_LOG(_L("FSM set: QoSR99_R4Negotiated")); - aContext.PdpFsmInterface().Set(aContext.Id(), aContext.QosNegotiated().NegotiatedQoSR99_R4()); -#endif -// SYMBIAN_NETWORKING_UMTSR5 - - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPdpNegQoSRetrieved")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPdpNegQoSRetrieved); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPdpNegQoSRetrievedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPdpNegQoSRetrievedFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TGetNegQoSStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - switch(aContext.StrategyStep()) - { - case EGetProfileParamsStep: - { - aContext.PacketContext().CancelAsyncRequest(EPacketQoSGetProfileParams); - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketQoSGetProfileParams")); - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case in TGetNegQoSStrategy::CancelAsyncRequest")); - ASSERT(EFalse); - break; - } - } - - -// -// TModifyActiveStrategy -// -/** Executes next asynchronous step in a strategy. - -@param aContext - pdp context -@param aStatus - request status of this step -*/ -void TModifyActiveStrategy::Next(CEtelDriverContext& aContext, TRequestStatus* aStatus) - { - SPUDTEL_FNLOG("TModifyActiveStrategy::Next()"); - - TInt err = KErrNone; - - switch(aContext.StrategyStep()) - { - case EStartStep: - { - aContext.PacketContext().ModifyActiveContext(*aStatus); - aContext.SetStrategyStep (EModifyActiveStep); - break; - } - - case EModifyActiveStep: - { - aContext.PacketQoS().GetProfileParameters (*aStatus, aContext.QosNegotiatedPckg()); -#ifdef _DEBUG - aContext.DumpNegProfileParameters (); -#endif - aContext.SetStrategyStep (EGetProfileParamsStep); - break; - } - - case EGetProfileParamsStep: - { - aContext.SetStrategyStep (EFinishStep); - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case")); - ASSERT(EFalse); - err = KErrNotSupported; - break; - } - - if(err || (EFinishStep == aContext.StrategyStep())) - { - User::RequestComplete( aStatus, err); - } - - } - - -/** -Notifies SPUD FSM about execution results. - -@param aContext - pdp context -@param aCompletionStatus - completion request status -*/ -void TModifyActiveStrategy::NotifyFsm(CEtelDriverContext& aContext, TRequestStatus& aCompletionStatus ) - { - if(aCompletionStatus == KErrNone) - { -#ifdef SYMBIAN_NETWORKING_UMTSR5 - SPUDTELVERBOSE_INFO_LOG(_L("FSM set: QoSR5Negotiated")); - aContext.PdpFsmInterface().Set(aContext.Id(), aContext.QosNegotiated().NegotiatedQoSR5()); - -#else - SPUDTELVERBOSE_INFO_LOG(_L("FSM set: QoSR99_R4Negotiated")); - aContext.PdpFsmInterface().Set(aContext.Id(), aContext.QosNegotiated().NegotiatedQoSR99_R4()); -#endif -// SYMBIAN_NETWORKING_UMTSR5 - - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPdpContextModified")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPdpContextModified); - } - else - { - SPUDTEL_INFO_LOG(_L("Notifying FSM: EPdpContextModifiedFailed")); - aContext.PdpFsmInterface().Input(aContext.Id(), PdpFsm::EPdpContextModifiedFailed, aCompletionStatus.Int()); - } - } - -/** Cancels last asynchronous request to eTel - -@param aContext - pdp context -*/ -void TModifyActiveStrategy::CancelAsyncRequest(CEtelDriverContext& aContext) - { - switch(aContext.StrategyStep()) - { - case EModifyActiveStep: - { - aContext.PacketContext().CancelAsyncRequest(EPacketContextModifyActiveContext); - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketContextModifyActiveContext")); - break; - } - - case EGetProfileParamsStep: - { - aContext.PacketContext().CancelAsyncRequest(EPacketQoSGetProfileParams); - SPUDTEL_INFO_LOG(_L("Cancel PacketContext::EPacketQoSGetProfileParams")); - break; - } - - default: - // unexpected - SPUDTEL_ERROR_LOG0(_L("ERROR: Incorrect case in TModifyActiveStrategy::CancelAsyncRequest")); - ASSERT(EFalse); - break; - } - }