diff -r 8ab6687fb94c -r 3adadc800673 telephonyprotocols/umtsgprsscpr/src/PdpFsmRequest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/telephonyprotocols/umtsgprsscpr/src/PdpFsmRequest.cpp Fri Jun 11 14:49:29 2010 +0300 @@ -0,0 +1,334 @@ +// Copyright (c) 2005-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: +// The implementation file for the PDP Context control requests. +// +// + +/** + @file + @internalComponent +*/ + + +#include "PdpFsmRequest.h" + + +//-========================================================= +// +//CModifyActivePDPCtx +// +//-========================================================= +CModifyActivePDPCtx::CModifyActivePDPCtx(CUmtsGprsSubConnProvd& aProvider, MPdpFsmRequestOwner& aOwner) +:CPdpFsmRequestBase(aProvider, aOwner) +{ +} + +CModifyActivePDPCtx::~CModifyActivePDPCtx() +{ +} + + +TInt CModifyActivePDPCtx::Start() +{ + // Store the Context Id in order to check replies later + iContextId = iProvider.GetContextId(); + return iProvider.GetPdpFsmInterface().Input(iContextId, SpudMan::EContextModifyActive); +} + +/** +@param aEvent The event Id +@param aParam Data relavent to the event. Usually a system-wide error code +@return ETrue if the event was consumed, EFalse if it was of no interest and should +be passed on to SpudMan for processing. +*/ +TBool CModifyActivePDPCtx::PdpFsmEvent(TContextId aContextId, TInt aEvent, TInt aParam) +{ + if (aContextId == iContextId && aEvent == KContextModifyActiveEvent) + { + iOwner.Done(aParam, *this); + return ETrue; + } + + return EFalse; +} + + + +#ifdef SYMBIAN_NETWORKING_UMTSR5 +//-========================================================= +// +//CModifyR5QoS +// +//-========================================================= +CModifyR5QoS::CModifyR5QoS(CUmtsGprsSubConnProvd& aProvider, MPdpFsmRequestOwner& aOwner, RPacketQoS::TQoSR5Requested& aParams) +:CPdpFsmRequestBase(aProvider, aOwner), + iModifyActive(NULL), + i5(aParams) +{ +} + +CModifyR5QoS::~CModifyR5QoS() +{ + ASSERT(iModifyActive == NULL || iContextId == 0); + //If we assert here is is becuase Start has been called (allocated iContextId), but Done has not been called (cleans iModifyActive) + delete iModifyActive; +} + +void CModifyR5QoS::GrantedSetupL() + { + CSubConGenEventParamsGranted* event = CSubConGenEventParamsGranted::NewL(); + CleanupStack::PushL (TCleanupItem(SubconEventCleanupFunction, event)); + event->SetFamily (KSubConQoSFamily); + RPacketQoS::TQoSR5Negotiated negotiatedQoS; + iProvider.GetPdpFsmInterface().Get(iProvider.GetContextId(), negotiatedQoS); + iProvider.MapQosEtelToGrantedParamsL(&negotiatedQoS, *event); + iProvider.NotifyClientEvent (*event); + CleanupStack::Pop(); + delete event; + + } + +void CModifyR5QoS::RejectedSetupL(TInt aResult) + { + CSubConGenEventParamsRejected* event = CSubConGenEventParamsRejected::NewL(); + CleanupStack::PushL (TCleanupItem(SubconEventCleanupFunction, event)); + event->SetFamilyId (KSubConQoSFamily); + event->SetError (aResult); + iProvider.NotifyClientEvent (*event); + CleanupStack::Pop(); + delete event; + } + +void CModifyR5QoS::Done( TInt aResult, CPdpFsmRequestBase& aThis ) +{ + __ASSERT_ALWAYS(iModifyActive == &aThis, User::Invariant()); + + if ( aResult == KErrNone ) + { + // QoS Modification complete with success. + __FLOG_1(_L("CModifyR5QoS [this=%08x]:\tDone(): QoS Params Granted"), this); + TRAP_IGNORE(GrantedSetupL()); + } + else + { + //QoS Modification complete with failure. + __FLOG_2(_L("CModifyR5QoS [this=%08x]:\tDone(): QoS Params Rejected [aResult=%d]"), this, aResult); + TRAP_IGNORE(RejectedSetupL(aResult)); + } + + + delete iModifyActive; + iModifyActive = NULL; + iOwner.Done(aResult, *this); +} + + +TInt CModifyR5QoS::Start() +{ + // Store the Context Id in order to check replies later + iContextId = iProvider.GetContextId(); + + TInt result; + result = iProvider.GetPdpFsmInterface().Set(iContextId, i5); + if (result == KErrNone) + { + result = iProvider.GetPdpFsmInterface().Input(iContextId, SpudMan::EContextQoSSet); + } + + return result; +} + + +TBool CModifyR5QoS::PdpFsmEvent(TContextId aContextId, TInt aEvent, TInt aParam) +{ + if (aContextId != iContextId) + { + return EFalse; + } + + TBool handled(EFalse); + if (aEvent == KContextQoSSetEvent) + { + if (aParam == KErrNone) + { + iModifyActive->Start(); + } + else + { + //QoS Modification complete with failure. + __FLOG_2(_L("CModifyR5QoS [this=%08x]:\tPdpFsmEvent(): QoS Params Rejected [aParam=%d]"), this, aParam); + + Done(aParam, *iModifyActive); + } + handled = ETrue; + } + else + { + handled = iModifyActive->PdpFsmEvent(aContextId, aEvent, aParam); + } + + return handled; +} + + +void CModifyR5QoS::ConstructL() +{ + iModifyActive = new(ELeave)CModifyActivePDPCtx(iProvider, *this); +} + + +CModifyR5QoS* CModifyR5QoS::NewL(CUmtsGprsSubConnProvd& aProvider, MPdpFsmRequestOwner& aOwner, RPacketQoS::TQoSR5Requested& aParams) +{ + CModifyR5QoS* request = new(ELeave) CModifyR5QoS(aProvider, aOwner, aParams); + CleanupStack::PushL(request); + request->ConstructL(); + CleanupStack::Pop(request); + return request; +} + + +#else +// !SYMBIAN_NETWORKING_UMTSR5 + +//-========================================================= +// +//CModifyR4QoS +// +//-========================================================= +CModifyR4QoS::CModifyR4QoS(CUmtsGprsSubConnProvd& aProvider, MPdpFsmRequestOwner& aOwner, RPacketQoS::TQoSR99_R4Requested aParams) +:CPdpFsmRequestBase(aProvider, aOwner), + iModifyActive(NULL), + i99(aParams) +{ +} + +CModifyR4QoS::~CModifyR4QoS() +{ + ASSERT(iModifyActive == NULL || iContextId == 0); + //If we assert here is is becuase Start has been called (allocated iContextId), but Done has not been called (cleans iModifyActive) + delete iModifyActive; + +} + +void CModifyR4QoS::GrantedSetupL() + { + CSubConGenEventParamsGranted* event = CSubConGenEventParamsGranted::NewL(); + CleanupStack::PushL (TCleanupItem(SubconEventCleanupFunction, event)); + event->SetFamily (KSubConQoSFamily); + RPacketQoS::TQoSR99_R4Negotiated negotiatedQoS; + iProvider.GetPdpFsmInterface().Get(iProvider.GetContextId(), negotiatedQoS); + iProvider.MapQosEtelToGrantedParamsL(&negotiatedQoS, *event); + iProvider.NotifyClientEvent (*event); + CleanupStack::Pop(); + delete event; + } + +void CModifyR4QoS::RejectedSetupL(TInt aResult) + { + CSubConGenEventParamsRejected* event = CSubConGenEventParamsRejected::NewL(); + CleanupStack::PushL (TCleanupItem(SubconEventCleanupFunction, event)); + event->SetFamilyId (KSubConQoSFamily); + event->SetError (aResult); + iProvider.NotifyClientEvent (*event); + CleanupStack::Pop(); + delete event; + } + +void CModifyR4QoS::Done( TInt aResult, CPdpFsmRequestBase& aThis ) +{ + + __ASSERT_ALWAYS(iModifyActive == &aThis, User::Invariant()); + if ( aResult == KErrNone ) + { + // QoS Modification complete with success. + __FLOG_1(_L("CModifyR4QoS [this=%08x]:\tDone(): QoS Params Granted"), this); + TRAP_IGNORE(GrantedSetupL()); + } + else + { + //QoS Modification complete with failure. + __FLOG_2(_L("CModifyR4QoS [this=%08x]:\tDone(): QoS Params Rejected [aResult=%d]"), this, aResult); + TRAP_IGNORE(RejectedSetupL(aResult)); + } + delete iModifyActive; + iModifyActive = NULL; + iOwner.Done(aResult, *this); +} + + +TInt CModifyR4QoS::Start() +{ + // Store the Context Id in order to check replies later + iContextId = iProvider.GetContextId(); + + TInt result; + result = iProvider.GetPdpFsmInterface().Set(iContextId, i99); + if (result == KErrNone) + { + result = iProvider.GetPdpFsmInterface().Input(iContextId, SpudMan::EContextQoSSet); + } + + return result; +} + +TBool CModifyR4QoS::PdpFsmEvent(TContextId aContextId, TInt aEvent, TInt aParam) +{ + if (aContextId != iContextId) + { + return EFalse; + } + + TBool handled(EFalse); + if (aEvent == KContextQoSSetEvent) + { + if (aParam == KErrNone) + { + iModifyActive->Start(); + } + else + { + //QoS Modification complete with failure. + __FLOG_2(_L("CModifyR4QoS [this=%08x]:\tPdpFsmEvent(): QoS Params Rejected [aParam=%d]"), this, aParam); + Done(aParam, *iModifyActive); + } + handled = ETrue; + } + else + { + handled = iModifyActive->PdpFsmEvent(aContextId, aEvent, aParam); + } + + return handled; +} + + +void CModifyR4QoS::ConstructL() +{ + iModifyActive = new(ELeave)CModifyActivePDPCtx(iProvider, *this); +} + +CModifyR4QoS* CModifyR4QoS::NewL(CUmtsGprsSubConnProvd& aProvider, MPdpFsmRequestOwner& aOwner, RPacketQoS::TQoSR99_R4Requested aParams) +{ + CModifyR4QoS* request = new(ELeave) CModifyR4QoS(aProvider, aOwner, aParams); + CleanupStack::PushL(request); + request->ConstructL(); + CleanupStack::Pop(request); + return request; +} + + + +#endif +// SYMBIAN_NETWORKING_UMTSR5 +