--- a/telephonyprotocols/umtsgprsscpr/spudtel/src/eteldriverstrategies.cpp Wed Aug 18 10:57:47 2010 +0300
+++ /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 <e32def.h>
-
-#include "ceteldrivercontext.h"
-#include "eteldriverstrategies.h"
-#include "spudteldebuglogger.h"
-#include "pdpfsmnmspace.h"
-
-#include <pcktcs.h>
-
-
-//
-// 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;
- }
- }