--- a/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketcontextgsmwcdmaext.cpp Mon May 03 13:37:20 2010 +0300
+++ b/telephonyserverplugins/common_tsy/commontsy/src/mmpacket/cmmpacketcontextgsmwcdmaext.cpp Thu May 06 15:10:38 2010 +0100
@@ -1,1797 +1,1797 @@
-// Copyright (c) 2006-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:
-//
-
-
-
-// INCLUDES
-#include <in_sock.h>
-#include "cmmpacketcontextgsmwcdmaext.h"
-#include "Cmmpacketcontexttsy.h"
-#include "Cmmpacketcontextlist.h"
-#include "cmmpacketservicegsmwcdmaext.h"
-#include "CMmCommonStaticUtility.h"
-#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
-#include <ctsy/pluginapi/cmmdatapackage.h>
-
-
-// ======== MEMBER FUNCTIONS ========
-
-CMmPacketContextGsmWcdmaExt* CMmPacketContextGsmWcdmaExt::NewL(
- CMmPacketContextTsy* const aMmPacketContextTsy,
- CMmPacketServiceTsy* const aMmPacketServiceTsy )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::NewL." );
-
- CMmPacketContextGsmWcdmaExt* packetContextGsmWcdmaExt =
- new ( ELeave ) CMmPacketContextGsmWcdmaExt();
-
- CleanupStack::PushL( packetContextGsmWcdmaExt );
-
- packetContextGsmWcdmaExt->iMmPacketContextTsy = aMmPacketContextTsy;
- packetContextGsmWcdmaExt->iMmPacketServiceTsy = aMmPacketServiceTsy;
- packetContextGsmWcdmaExt->ConstructL();
-
- CleanupStack::Pop();
-
- return packetContextGsmWcdmaExt;
- }
-
-CMmPacketContextGsmWcdmaExt::CMmPacketContextGsmWcdmaExt()
- {
- }
-
-void CMmPacketContextGsmWcdmaExt::ConstructL()
- {
- InitInternalAttributesL();
- }
-
-CMmPacketContextGsmWcdmaExt::~CMmPacketContextGsmWcdmaExt()
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::~CMmPacketContextGsmWcdmaExt." );
-
- TInfoName contextName;
- if( iMmPacketContextTsy )
- {
- contextName = iMmPacketContextTsy->ContextName();
- }
- if ( contextName.Compare( KNullDesC ) != 0 )
- {
- CMmDataPackage data;
- data.PackData( &contextName );
-
- if( iMmPacketServiceTsy )
- {
- TRAP_IGNORE( iMmPacketServiceTsy->MessageManager()->
- HandleRequestL( EPacketContextDelete, &data ) );
- }
-
- }
-
- // Notify status change
- // This is needed to inform Service that context is no longer active
- if( iMmPacketContextTsy )
- {
- iMmPacketContextTsy->CompleteNotifyStatusChange(
- RPacketContext::EStatusDeleted );
- }
-
- // Release memory used for dynamic data members
- delete iTempConfig;
- delete iConfig;
- delete iFilterArray;
- delete iFilterTemporaryArray;
- delete iTempMediaAuthorizationArray;
- }
-
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::InitInternalAttributesL
-// Initialises miscellaneous internal attributes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::InitInternalAttributesL()
- {
- // Network initiated context indication.
- //iContextType = EFalse;
-
- iIsActivateAllowed = EFalse;
- iIsInitialiseAllowed = ETrue;
- iConnectionSpeed = 0;
-
- iTempConfig = NULL;
-
- iNotifyConfig = RPacketContext::TContextConfigGPRS();
-
- iFilterArray = new ( ELeave ) CArrayFixFlat
- <RPacketContext::TPacketFilterV2>( 1 );
-
- iFilterTemporaryArray = NULL;
-
- iTempMediaAuthorizationArray = NULL;
-
- for ( TInt i = 0 ; KMaxNumberOfTftFilters > i; i++ )
- {
- // cell is set 0xFF because of internal check(s)
- iFilterIdTemporaryArray[i] = 0xFF;
- }
-
- TInfoName hostCidName = iMmPacketContextTsy->HostCID();
-
- iConfig = new ( ELeave ) RPacketContext::TContextConfigGPRS();
-
- if( 0 < hostCidName.Length() )
- {
- CMmPacketContextTsy* iPrimaryContextObject = iMmPacketServiceTsy->
- PacketContextList()->PacketContextByName( &hostCidName );
-
- if ( NULL != iPrimaryContextObject )
- {
- *iConfig = *( iPrimaryContextObject->
- PacketContextGsmWcdmaExt()->ContextConfig() );
- }
- }
-
- iPrevFilterStatus = EAddPacketFilterStatusUnknown;
- iFilterStatus = EAddPacketFilterStatusUnknown;
- isAddMediaAuthorizationCalledFirstTime = EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::InitialiseContextL
-// This function starts context initialisation.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::InitialiseContextL(RPacketContext::TDataChannelV2* aDataChannel)
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::InitialiseContextL." );
-
- TInt ret( KErrArgument );
-
- if ( iIsInitialiseAllowed )
- {
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- TInfoName hostCidName = iMmPacketContextTsy->HostCID();
- CMmDataPackage dataPackage;
- dataPackage.PackData( &contextName, &hostCidName );
-
- iDataChannel = aDataChannel;
-
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextInitialiseContext, &dataPackage );
-
- if(ret == KErrNone)
- {
- iIsInitialiseAllowed = EFalse;
- }
- }
- return ret;
- }
-
-#ifndef USING_CTSY_DISPATCHER
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteInitialiseContextL
-// This function starts context initialisation.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteInitialiseContext(const TInt aResult) // Result
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteInitialiseContext." );
-
- if ( KErrNone == aResult )
- {
- iMmPacketContextTsy->CompleteNotifyStatusChange(RPacketContext::EStatusInactive );
-
- if(iDataChannel != NULL)
- {
- iDataChannel->iChannelId.Copy(iMmPacketContextTsy->ContextName());
- iDataChannel->iPort.Copy(iMmPacketContextTsy->ContextName());
- iDataChannel = NULL;
- }
-
- iIsActivateAllowed = ETrue;
- // Set Dynamic Caps
- iMmPacketServiceTsy->ActivePacketServiceExtension()->
- SetDynamicCapsFlag( RPacketService::KCapsActivate, ETrue );
- }
- else
- {
- iIsInitialiseAllowed = ETrue;
- }
- iMmPacketContextTsy->CompleteInitialiseContext( aResult );
-
- }
-#endif //USING_CTSY_DISPATCHER
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::ActivateL
-// This function starts the context activation.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::ActivateL()
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::ActivateL " );
-
- TInt ret( KErrArgument );
-
- if ( iIsActivateAllowed )
- {
-
- TInfoName hostCidRef = iMmPacketContextTsy->HostCID();
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- // Primary context activation
- CMmDataPackage data;
- data.PackData( &contextName );
- //This is primary context activation and host context's length is
- //hence zero
- if ( 0 == hostCidRef.Length() )
- {
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextActivate, &data );
- }
- // Secondary context activation
- else
- {
- TBool qosExtensionId( EFalse );
- CMmPacketQoSTsy* qosProfile = iMmPacketContextTsy->PacketQoSTsy();
-
- if ( NULL != qosProfile )
- {
- qosExtensionId = qosProfile->PacketQoSGsmWcdmaExt()->
- ProfileAsked();
- }
-
- // Check that secondary context have qos and at least one filter
- if ( qosExtensionId && 0 != iFilterArray->Count() )
- {
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextActivate, &data );
- }
- }
-
- if ( KErrNone == ret )
- {
- iIsActivateAllowed = EFalse;
- }
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteActivate
-// Completes the activate request. Indicates DOS TSY has started activation.
-// Activation to network may take minutes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteActivate(
- CMmDataPackage* aDataPackage,
- TInt aResult )
- {
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivate. Status: %d",
- aResult );
-
- if ( KErrNone == aResult )
- {
- //Unpack to TPacketDataConfigBase first, determine the Extension ID and
- //then cast to the appropriate structure before extracting all the necessary
- //data
- TPacketDataConfigBase* config = NULL;
- //DOS layer brings also name in packet due routing in manager.
- TInfoName* null;
- aDataPackage->UnPackData( &null, &config );
- null = NULL;
-
- RPacketContext::TGSNAddress accessPointName = iConfig->iAccessPointName;
-
- if ( TPacketDataConfigBase::KConfigGPRS == config->ExtensionId() )
- {
- iConfig->iPdpType = static_cast<RPacketContext::TContextConfigGPRS*>(config)->
- iPdpType;
- accessPointName = static_cast<RPacketContext::TContextConfigGPRS*>(config)->
- iAccessPointName;
- }
-
- if ( TPacketDataConfigBase::KConfigRel99Rel4 == config->ExtensionId() ||
- TPacketDataConfigBase::KConfigRel5 == config->ExtensionId())
- {
- iConfig->iPdpType = static_cast<RPacketContext::TContextConfigR99_R4*>(config)->
- iPdpType;
- accessPointName = static_cast<RPacketContext::TContextConfigR99_R4*>(config)->
- iAccessPointName;
- }
-
- TInt temp = accessPointName.Length();
- if ( !temp )
- {
- iConfig->iAccessPointName = accessPointName;
- // Notify config changed
- }
- CompleteNotifyConfigChanged();
-
- // Notify status change
- iMmPacketContextTsy->CompleteNotifyStatusChange(
- RPacketContext::EStatusActivating );
- }
- else
- {
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivate. ErrorCause: %d",
- aResult );
- // Re-activation is allowed because activation has not succeeded
- iIsActivateAllowed = ETrue;
- }
-
- // Set Dynamic Caps
- iMmPacketServiceTsy->ActivePacketServiceExtension()->SetDynamicCapsFlag(
- RPacketService::KCapsActivate, iIsActivateAllowed );
-
- // Complete Activate
- iMmPacketContextTsy->CompleteActivate( aResult );
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2L
-// Final completion for the context activation. Context is activated to
-// network.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2(
- CMmDataPackage* aDataPackage, const TInt aResult )
- {
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2. Status: %d", aResult );
-
- if ( KErrNone == aResult )
- {
- //Unpack to TPacketDataConfigBase first, determine the Extension ID and
- //then cast to the appropriate structure before extracting all the necessary
- //data
- TPacketDataConfigBase* aConfig = NULL;
- TInfoName* name = NULL;
- aDataPackage->UnPackData( &name, &aConfig );
-
- if( NULL != aConfig )
- {
- if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
- {
- RPacketContext::TContextConfigGPRS* configGPRS =
- static_cast<RPacketContext::TContextConfigGPRS*>(aConfig);
-
- iConfig->iPdpAddress = configGPRS->iPdpAddress;
- iConfig->iAccessPointName = configGPRS->iAccessPointName;
- iConfig->iProtocolConfigOption.iDnsAddresses.iPrimaryDns = configGPRS->
- iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
- iConfig->iProtocolConfigOption.iDnsAddresses.iSecondaryDns = configGPRS->
- iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
- iConfig->iPdpCompression = configGPRS->iPdpCompression;
- iConfig->iProtocolConfigOption.iMiscBuffer =
- configGPRS->iProtocolConfigOption.iMiscBuffer;
- }
-
- if ( TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() ||
- TPacketDataConfigBase::KConfigRel5 == aConfig->ExtensionId())
- {
- RPacketContext::TContextConfigR99_R4* configR99_R4 =
- static_cast<RPacketContext::TContextConfigR99_R4*>(aConfig);
-
- iConfig->iPdpAddress = configR99_R4->iPdpAddress;
- iConfig->iAccessPointName = configR99_R4->iAccessPointName;
- iConfig->iProtocolConfigOption.iDnsAddresses.iPrimaryDns = configR99_R4->
- iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
- iConfig->iProtocolConfigOption.iDnsAddresses.iSecondaryDns = configR99_R4->
- iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
- iConfig->iPdpCompression = 0;
- iConfig->iProtocolConfigOption.iMiscBuffer =
- configR99_R4->iProtocolConfigOption.iMiscBuffer;
- }
- }
-
- // Complete notifies
- CompleteNotifyConfigChanged();
- iMmPacketContextTsy->CompleteNotifyStatusChange(
- RPacketContext::EStatusActive );
- }
-
- else
- {
- // Reactivation is allowed because activation has not succeeded
- iIsActivateAllowed = ETrue;
-
- // Set Dynamics Caps
- iMmPacketServiceTsy->ActivePacketServiceExtension()->
- SetDynamicCapsFlag( RPacketService::KCapsActivate, ETrue );
- }
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::Deactivate
-// This function deactivates the context
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::DeactivateL()
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::DeactivateL." );
-
- TInt ret( KErrArgument );
- //zero length
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- if ( contextName.Compare( KNullDesC ) != 0 )
- {
- CMmDataPackage data;
- data.PackData( &contextName );
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextDeactivate, &data );
-
- if ( KErrNone == ret )
- {
- iContextStatusBeforeDeactivation =
- iMmPacketContextTsy->ContextStatus();
- }
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteDeactivateL
-// Completes the deactivate request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteDeactivate(
- const TInt aResult )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteDeactivate." );
-
- if ( KErrNone == aResult )
- {
-
- // Notify status change
- iMmPacketContextTsy->CompleteNotifyStatusChange(
- RPacketContext::EStatusInactive );
- }
- else
- {
- // Notify status change
- iMmPacketContextTsy->CompleteNotifyStatusChange(
- iContextStatusBeforeDeactivation );
- }
-
- iMmPacketContextTsy->CompleteDeactivate( aResult );
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::DeleteL
-// This function starts deletion.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::DeleteL()
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::DeleteL." );
-
- TInt ret( KErrNotReady );
-
- if ( RPacketContext::EStatusUnknown !=
- iMmPacketContextTsy->ContextStatus() )
- {
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- CMmDataPackage data;
- data.PackData( &contextName );
-
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextDelete, &data );
-
- }
-
- return ret;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteDelete
-// Completes the delete request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteDelete(
- TInt const aResult )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteDelete." );
-
- if( KErrNone == aResult )
- {
- iContextStatusBeforeDeactivation = RPacketContext::EStatusDeleted;
-
- // Notify status change
- iMmPacketContextTsy->CompleteNotifyStatusChange(
- RPacketContext::EStatusDeleted );
-
-
- if ( !iMmPacketContextTsy->IsDialUpContext( NULL ) )
- {
- // Release memory used for context configuration info
- delete iConfig;
- iConfig = NULL;
- }
- }
-
- iMmPacketContextTsy->CompleteDelete( aResult );
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::GetConfig
-// Retrieves the current context configuration to the client.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::GetConfig(
- TPacketDataConfigBase* const aConfig )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetConfig." );
-
- TInt ret( KErrNone );
-
- // Check that the mode given in aConfig is GPRS
- if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() ||
- TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() )
- {
- if ( NULL != iConfig &&
- TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
- {
- // Set configuration data to ETel side memory
- *( RPacketContext::TContextConfigGPRS* )aConfig =
- *iConfig;
- }
- else if ( NULL != iConfig &&
- TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() )
- {
- RPacketContext::TContextConfigR99_R4 configR99_R4;
-
- configR99_R4.iPdpType = iConfig->iPdpType;
- configR99_R4.iAccessPointName = iConfig->iAccessPointName;
- configR99_R4.iPdpAddress = iConfig->iPdpAddress;
- configR99_R4.iUseEdge = iConfig->iUseEdge;
- configR99_R4.iProtocolConfigOption =
- iConfig->iProtocolConfigOption;
- // Set configuration data to ETel side memory
- *( RPacketContext::TContextConfigR99_R4* )aConfig = configR99_R4;
-
- }
- else
- {
- ret = KErrNotFound;
- }
- }
- else
- {
- // Given mode is not supported
- ret = KErrNotSupported;
- }
-
- return ret;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferred
-// Gets details of the current amount of data transmitted and
-// received over the airlink since the context was activated.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferredL()
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferredL." );
-
- TInt ret( KErrNone );
- TInfoName contextName = iMmPacketContextTsy->ContextName();
-
- if ( contextName.Compare( KNullDesC ) != 0 )
- {
- CMmDataPackage data;
- data.PackData( &contextName );
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextGetDataVolumeTransferred, &data );
- }
-
- return ret;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred
-// Completes the get data volume transferred request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred(
- const CMmDataPackage* aDataPackage,
- const TInt aResult )
- {
- TInt errorValue( KErrNone );
-
- if ( KErrNone == aResult )
- {
- TInfoName contextName;
- RPacketContext::TDataVolume dataVolume;
- aDataPackage->UnPackData( contextName, dataVolume );
-
- // Set data volume to the tsy
- iMmPacketContextTsy->SetDataVolume( KErrNone, dataVolume );
- }
-
- else
- {
- errorValue = KErrGeneral;
- }
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred. Error Value:%d",
- errorValue );
-
- iMmPacketContextTsy->CompleteGetDataVolumeTransferred( errorValue );
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::NotifyConfigChanged
-// Requests notification when configuration of context changes.
-// Implements the GSM/WCDMA specific functionality for the notification.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::NotifyConfigChanged(
- TPacketDataConfigBase& aConfig )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::NotifyConfigChanged." );
-
- TInt ret( KErrNone );
-
- // Check that used mode is GPRS
- if ( ( TPacketDataConfigBase::KConfigGPRS != aConfig.ExtensionId() ) &&
- ( TPacketDataConfigBase::KConfigRel99Rel4 != aConfig.ExtensionId() ) )
- {
- ret = KErrNotSupported;
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged
-// Completes notification when the context configuration changes.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged()
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged." );
-
- if ( NULL != iConfig )
- {
- // Check that the configuration has really changed
- if ( iNotifyConfig.iPdpType != iConfig->iPdpType ||
- iNotifyConfig.iAccessPointName !=
- iConfig->iAccessPointName ||
- iNotifyConfig.iPdpAddress != iConfig->iPdpAddress ||
- iNotifyConfig.iPdpCompression !=
- iConfig->iPdpCompression ||
- iNotifyConfig.iAnonymousAccessReqd !=
- iConfig->iAnonymousAccessReqd ||
- iNotifyConfig.iUseEdge != iConfig->iUseEdge )
- {
- // Store the configuration
- iNotifyConfig = *iConfig;
-
- // Complete notification
- iMmPacketContextTsy->CompleteNotifyConfigChanged();
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::SetConfigL
-// This method starts the Context configuration.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::SetConfigL(
- TPacketDataConfigBase* const aConfig )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::SetConfigL." );
-
- TInt ret( KErrNotSupported );
-
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- if ( contextName.Compare( KNullDesC ) != 0 )
- {
- if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
- {
- if( !iIsInitialiseAllowed )
- {
- iContextConfigurationType =
- TPacketDataConfigBase::KConfigGPRS;
-
- RPacketContext::TContextConfigGPRS& configGPRS =
- *( RPacketContext::TContextConfigGPRS* )aConfig;
-
- if ( NULL == iTempConfig )
- {
- // Allocate memory for iTempConfig
- iTempConfig =
- new ( ELeave ) RPacketContext::TContextConfigGPRS();
- }
-
- // Temporary store the configGPRS
- *iTempConfig = configGPRS;
-
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::SetConfigL. NWIContext: %d", configGPRS.iNWIContext );
-
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- CMmDataPackage data;
- data.PackData( &( *aConfig ), &contextName );
-
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextSetConfig, &data );
-
- if ( KErrNone != ret )
- {
- // Release the memory allocated for iTempConfig
- delete iTempConfig;
- iTempConfig = NULL;
- }
- }
- else
- {
- ret = KErrNotReady;
- }
-
- }
- else if ( TPacketDataConfigBase::KConfigRel99Rel4 ==
- aConfig->ExtensionId() ||
- TPacketDataConfigBase::KConfigRel5 == aConfig->ExtensionId() )
- {
- if( !iIsInitialiseAllowed )
- {
- iContextConfigurationType =
- TPacketDataConfigBase::KConfigRel99Rel4;
- RPacketContext::TContextConfigR99_R4& configR99_R4 =
- *( RPacketContext::TContextConfigR99_R4* )aConfig;
-
- if ( NULL == iTempConfig )
- {
- // Allocate memory for iTempConfig
- iTempConfig =
- new ( ELeave ) RPacketContext::TContextConfigGPRS();
- }
-
- // Temporary store the configR99_R4 to iTempConfig
- iTempConfig->iPdpType = configR99_R4.iPdpType;
- iTempConfig->iAccessPointName = configR99_R4.iAccessPointName;
- iTempConfig->iPdpAddress = configR99_R4.iPdpAddress;
- iTempConfig->iUseEdge = configR99_R4.iUseEdge;
- iTempConfig->iProtocolConfigOption =
- configR99_R4.iProtocolConfigOption;
-
- TInt len =
- iTempConfig->iProtocolConfigOption.iMiscBuffer.Length();
-
-
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- CMmDataPackage data;
- data.PackData( &( *aConfig ), &contextName );
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextSetConfig, &data );
-
- if ( KErrNone != ret )
- {
- // Release the memory allocated for iTempConfig
- delete iTempConfig;
- iTempConfig = NULL;
- }
- }
- else
- {
- ret = KErrNotReady;
- }
- }
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteSetConfig
-// Completes the SetConfig request.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteSetConfig(
- const TInt aResult )
- {
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteSetConfig. aStatus:%d",
- aResult );
-
-
- if ( NULL != iTempConfig )
- {
- iConfig->iProtocolConfigOption.iMiscBuffer.Zero();
- iConfig->iProtocolConfigOption.iMiscBuffer.FillZ();
-
- *iConfig = *iTempConfig;
- TInt len = iConfig->iProtocolConfigOption.iMiscBuffer.Length();
- // Release the memory allocated for iTempConfig
- delete iTempConfig;
- iTempConfig = NULL;
- CompleteNotifyConfigChanged();
- }
- if( isAddMediaAuthorizationCalledFirstTime )
- {
- iMmPacketContextTsy->CompleteSetConfig( aResult,
- isAddMediaAuthorizationCalledFirstTime );
- //Null changed params
- isAddMediaAuthorizationCalledFirstTime = EFalse;
-
- }
- else
- {
- iMmPacketContextTsy->CompleteSetConfig( aResult ) ;
- }
-
-
- }
-
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::IsContextActivationAllowed
-// Tells if context activation is allowed.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TBool CMmPacketContextGsmWcdmaExt::IsContextActivationAllowed() const
- {
-
- return iIsActivateAllowed;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::GetConfigurationData
-// Return the configuration data.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::GetConfigurationData(
- TInfoName& aContextName,
- RPacketContext::TProtocolType& aPdpType,
- TBool& aContextType,
- TInfoName& aPrimaryContextName )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetConfigurationData." );
-
- TInt ret( KErrNotReady );
-
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- if ( contextName.Compare( KNullDesC ) != 0 )
- {
-
- aPdpType = iConfig->iPdpType;
- aContextName = contextName;
- aContextType = iConfig->iNWIContext; //iContextType;
- aPrimaryContextName = iMmPacketContextTsy->HostCID();
- ret = KErrNone;
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::AddPacketFilterL
-// Add or modify existing packet filter to specified context
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::AddPacketFilterL(
- TDes8* aPacketFilter )
- {
- TInt ret( KErrGeneral );
-
- RPacketContext::TPacketFilterV2Pckg* contextFilterPckg =
- ( RPacketContext::TPacketFilterV2Pckg* ) aPacketFilter;
-
- RPacketContext::TPacketFilterV2& contextFilter =
- ( *contextFilterPckg )();
-
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::AddPacketFilterL contextFilterId: %d", contextFilter.iId );
-
- // Check out Tft operation
- iFilterStatus = EAddPacketFilterStatusAdd;
- for ( TInt i = 0 ; i < iFilterArray->Count() ; i++ )
- {
- if ( contextFilter.iId == iFilterArray->At( i ).iId )
- {
- iFilterStatus = EAddPacketFilterStatusModify;
- i = iFilterArray->Count();
- }
- }
-
- if ( iPrevFilterStatus == iFilterStatus ||
- EAddPacketFilterStatusUnknown == iPrevFilterStatus )
- {
- // context modification if context status is active or activating
- if( iMmPacketContextTsy->ContextStatus() ==
- RPacketContext::EStatusActive ||
- iMmPacketContextTsy->ContextStatus() ==
- RPacketContext::EStatusActivating )
- {
-
- if ( 0 < contextFilter.iId && 8 >= contextFilter.iId )
- {
- // if it's first time to use iFilterTemporaryArray
- if ( NULL == iFilterTemporaryArray )
- {
- // Eight is max number of TFT filters. If count is less
- // than eight, we can be sure that there is enough space
- // for one more filter
- if ( 8 > iFilterArray->Count() )
- {
- iFilterTemporaryArray = new ( ELeave ) CArrayFixFlat
- <RPacketContext::TPacketFilterV2>( 1 );
- iFilterTemporaryArray->AppendL( contextFilter );
- iPrevFilterStatus = iFilterStatus;
- ret = KErrNone;
- }
- }
-
- // if iFilterTemporaryArray is already used at least once
- else
- {
- // if previous filter operation was add
- if ( EAddPacketFilterStatusAdd == iPrevFilterStatus )
- {
- // Eight is max number of TFT filters. If count is
- // less than eight, we can be sure that there is
- // enough space for one more filter
- if ( 8 > ( iFilterArray->Count() +
- iFilterTemporaryArray->Count() ) )
- {
- // Check that same filter id doesn't appear twice
- TBool isNewFilter( ETrue );
- for ( TInt i = 0;
- iFilterTemporaryArray->Count() > i; i++ )
- {
- if ( ( iFilterTemporaryArray->At( i ).iId ) ==
- ( contextFilter.iId ) )
- {
- isNewFilter = EFalse;
- i = iFilterTemporaryArray->Count();
- }
- }
-
- // if id doesn't exist already add filter to Array
- if ( isNewFilter )
- {
- iFilterTemporaryArray->
- AppendL ( contextFilter );
- iPrevFilterStatus = iFilterStatus;
- ret = KErrNone;
- }
- }
- }
-
- // if previous filter operation was modify
- if ( EAddPacketFilterStatusModify == iPrevFilterStatus )
- {
- // Check that same filter id doesn't appear twice
- TBool isNewFilter( ETrue );
- for ( TInt i = 0; iFilterTemporaryArray->Count() > i;
- i++ )
- {
- if ( ( iFilterTemporaryArray->At( i ).iId ) ==
- ( contextFilter.iId ) )
- {
- isNewFilter = EFalse;
- i = iFilterTemporaryArray->Count();
- }
- }
-
- // if id doesn't exist already add filter to Array
- if ( isNewFilter )
- {
- iFilterTemporaryArray->AppendL ( contextFilter );
- iPrevFilterStatus = iFilterStatus;
- ret = KErrNone;
- }
- }
- }
- }
- }
- }
- // context configuration if context status is unknown or inactive
- if ( iMmPacketContextTsy->ContextStatus() ==
- RPacketContext::EStatusUnknown ||
- iMmPacketContextTsy->ContextStatus() ==
- RPacketContext::EStatusInactive )
- {
- // Eight is max number of TFT filters. If count is less than eight,
- // we can be sure that there is enough space for one more filter
- if ( iFilterArray->Count() < 8 &&
- EAddPacketFilterStatusAdd == iFilterStatus )
- {
- // if filter id is allowed value. Allowed value is between 1..8
- if ( 0 < contextFilter.iId && 8 >= contextFilter.iId )
- {
-
- TBool filterIdAlreadyInArray( EFalse );
-
-
- if ( NULL == iFilterTemporaryArray )
- {
- iFilterTemporaryArray = new ( ELeave ) CArrayFixFlat
- <RPacketContext::TPacketFilterV2>( 1 );
- }
-
-
- // if pdp type is Ipv4 8 is max number of TFT
- // filters. If count is less than eight, we can be sure
- // that there is enough space for one more filter
- // if pdp type is Ipv6 4 is max number of TFT
- // filters. If count is less than four, we can be sure
- // that there is enough space for one more filter
- if ( ( 8 > iFilterArray->Count() &&
- RPacketContext::EPdpTypeIPv4 == iConfig->iPdpType ) ||
- ( 4 > iFilterArray->Count() &&
- RPacketContext::EPdpTypeIPv6 == iConfig->iPdpType )
- )
- {
- for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
- {
- if ( contextFilter.iId !=
- iFilterArray->At(i).iId )
- {
- iFilterTemporaryArray->AppendL(
- iFilterArray->At(i) );
- }
-
- else
- {
- filterIdAlreadyInArray = ETrue;
- }
- }
-
- iFilterTemporaryArray->AppendL( contextFilter );
-
- TInfoName contextName =
- iMmPacketContextTsy->ContextName();
- CMmPacketDataPackage data;
- data.SetConfig( iConfig ,
- iContextConfigurationType );
- data.PackData( &contextName, iFilterTemporaryArray );
-
- ret = iMmPacketServiceTsy->MessageManager()->
- HandleRequestL( EPacketContextAddPacketFilter,
- &data );
-
- }
-
- else
- {
- ret = KErrArgument;
- }
-
- // add configured filter to iFilterArray
- if ( KErrNone == ret )
- {
- if ( !filterIdAlreadyInArray )
- {
- iFilterArray->AppendL( contextFilter );
- }
- else
- {
- for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
- {
- if ( iFilterArray->At(i).iId ==
- contextFilter.iId )
- {
- iFilterArray->At(i) = contextFilter;
- }
- }
- }
-
- delete iFilterTemporaryArray;
- iFilterTemporaryArray = NULL;
- }
- }
- }
- }
-
- // if error occures empty iFilterTemporaryArray
- if ( ( KErrNone != ret ) && ( NULL != iFilterTemporaryArray ) )
- {
- delete iFilterTemporaryArray;
- iFilterTemporaryArray = NULL;
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::RemovePacketFilter
-// This method stores Id(s) client wants to remove
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::RemovePacketFilter(
- const TInt aID )
- {
-TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::RemovePacketFilter. FilterId:%d", aID );
-
- TInt ret( KErrArgument );
-
- if ( EAddPacketFilterStatusUnknown == iPrevFilterStatus ||
- EAddPacketFilterStatusRemove == iPrevFilterStatus )
- {
-
- // check that aID is in iFilterArray
- TBool isRemoveFilterId( EFalse );
- TInt index = 0;
- for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
- {
- if ( iFilterArray->At( i ).iId == aID )
- {
- isRemoveFilterId = ETrue;
- index = i;
- i = iFilterArray->Count();
- }
- }
-
- if ( isRemoveFilterId )
- {
- // Find empty place for filter id and set filter id in it
- for ( TInt i = 0 ; KMaxNumberOfTftFilters > i ; i++ )
- {
- if ( aID == iFilterIdTemporaryArray[i] )
- {
- // breaks if id already in array
- i = KMaxNumberOfTftFilters;
- }
-
- // 0xFF value is set default to empty cell
- else if ( 0xFF == iFilterIdTemporaryArray[i] )
- {
- iFilterIdTemporaryArray[i] = aID;
- iFilterArray->Delete(index);
-
- // breaks when empty cell found in array
- i = KMaxNumberOfTftFilters;
- iPrevFilterStatus = EAddPacketFilterStatusRemove;
- ret = KErrNone;
- }
- }
- }
- }
-
-#ifdef USING_CTSY_DISPATCHER
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- CMmPacketDataPackage data;
- data.PackData( &contextName, const_cast< TInt* >(&aID));
- ret = iMmPacketServiceTsy->MessageManager()-> HandleRequestL( EPacketContextRemovePacketFilter, &data );
-#endif
-
- if ( KErrNone != ret )
- {
- for ( TInt i = 0 ; KMaxNumberOfTftFilters > i ; i++ )
- {
- // cell is set 0xFF because of internal check(s)
- iFilterIdTemporaryArray[i] = 0xFF;
- iPrevFilterStatus = EAddPacketFilterStatusUnknown;
- }
- }
-
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::ModifyActiveContextL
-// Method sends modification of an active context to the network.
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::ModifyActiveContextL()
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::ModifyActiveContextL." );
-
- TInt ret( KErrArgument );
-
- TPacketFilterFilterOperation tftOperation( EDeletePacketFilters );
-
- // Get pointer to QosProfile
- CMmPacketQoSTsy* qosProfile = iMmPacketContextTsy->PacketQoSTsy();
- RPacketQoS::TQoSGPRSRequested* qosProfile97 = NULL;
- RPacketQoS::TQoSR99_R4Requested* qosProfile99 = NULL;
-
- RPacketQoS::TQoSR5Requested* qosProfileR5 = NULL;
-
- if ( NULL != qosProfile )
- {
- CMmPacketQoSGsmWcdmaExt* pointerToExt = qosProfile->
- PacketQoSGsmWcdmaExt();
-
- if ( NULL != pointerToExt )
- {
- // Get pointer to qos
- TInt configurationType = pointerToExt->ConfigurationType();
-
-
- switch( configurationType )
- {
- case TPacketDataConfigBase::KConfigGPRS:
- qosProfile97 = pointerToExt->Requested97();
- break;
- case TPacketDataConfigBase::KConfigRel99Rel4:
- qosProfile99 = pointerToExt->Requested99();
- break;
- case TPacketDataConfigBase::KConfigRel5:
- qosProfileR5 = pointerToExt->RequestedR5();
- break;
- default:
- break;
- }
-
- // If qos includes something
- if ( NULL != qosProfile97 || NULL != qosProfile99
- || NULL != qosProfileR5 )
- {
- // use 0xFF and index 0 to check if no filter(s) to remove
- if ( NULL == iFilterTemporaryArray &&
- 0xFF == iFilterIdTemporaryArray[0] )
- {
- //MODIFY QOS PARAMETERS
- //Pack configuration and send to messagemanager
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- iContextConfiguration.iContextName = contextName;
- iContextConfiguration.iQosParams97 = qosProfile97;
- iContextConfiguration.iQosParams99 = qosProfile99;
- iContextConfiguration.iQosParamsR5 = qosProfileR5;
- iContextConfiguration.iConfiguration = iConfig->iPdpType;
- iContextConfiguration.iTftFilterArray = iFilterArray;
- iContextConfiguration.iTftOperation = tftOperation;
- for( TInt i=0; i < KMaxNumberOfTftFilters; i++ )
- {
- iContextConfiguration.iFilterIdArray[i] =
- iFilterIdTemporaryArray[i];
- }
-
- CMmDataPackage data;
- data.PackData( &iContextConfiguration,
- &iTempMediaAuthorizationArray );
-
- ret = iMmPacketServiceTsy->MessageManager()->
- HandleRequestL( EPacketContextModifyActiveContext,
- &data );
-
- }
- }
- }
- }
-
- // Add or Modify Filters
- if( NULL != iFilterTemporaryArray )
- {
- if ( 0 < iFilterTemporaryArray->Count() )
- {
- // filteroperation is add
- if ( EAddPacketFilterStatusAdd == iPrevFilterStatus )
- {
- tftOperation = EAddPacketFilters;
- TInt beforeFilterCount = iFilterArray->Count();
- TInt filterArrayExpandedSize = ( beforeFilterCount +
- ( iFilterTemporaryArray->Count() ) );
-
- iFilterArray->ResizeL( filterArrayExpandedSize );
-
- for ( ; filterArrayExpandedSize > beforeFilterCount ;
- beforeFilterCount++ )
- {
- // iId is set 0xFF because of internal check(s)
- iFilterArray->At( beforeFilterCount ).iId = 0xFF;
- }
- }
-
- // filteroperation is modify
- if ( EAddPacketFilterStatusModify == iPrevFilterStatus )
- {
- tftOperation = EReplacePacketFilters;
- }
-
- if ( EAddPacketFilterStatusUnknown != iPrevFilterStatus )
- {
-
- CMmPacketQoSGsmWcdmaExt* pointerToExt = NULL;
- if(qosProfile)
- {
- pointerToExt = qosProfile->PacketQoSGsmWcdmaExt();
- }
-
- if ( NULL != pointerToExt )
- {
- TInt configurationType = pointerToExt->ConfigurationType();
-
- switch( configurationType )
- {
- case TPacketDataConfigBase::KConfigGPRS:
- qosProfile97 = pointerToExt->Requested97();
- break;
- case TPacketDataConfigBase::KConfigRel99Rel4:
- qosProfile99 = pointerToExt->Requested99();
- break;
- case TPacketDataConfigBase::KConfigRel5:
- qosProfileR5 = pointerToExt->RequestedR5();
- break;
- default:
- break;
- }
-
- //Pack configuration and send to messagemanager
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- iContextConfiguration.iContextName = contextName;
- iContextConfiguration.iQosParams97 = qosProfile97;
- iContextConfiguration.iQosParams99 = qosProfile99;
- iContextConfiguration.iQosParamsR5 = qosProfileR5;
- iContextConfiguration.iConfiguration = iConfig->iPdpType;
- iContextConfiguration.iTftFilterArray = iFilterTemporaryArray;
- iContextConfiguration.iTftOperation = tftOperation;
-
- for( TInt i=0; i < KMaxNumberOfTftFilters; i++ )
- {
- iContextConfiguration.iFilterIdArray[i] =
- iFilterIdTemporaryArray[i];
- }
-
- CMmDataPackage data;
- data.PackData( &iContextConfiguration, &iTempMediaAuthorizationArray );
-
- ret = iMmPacketServiceTsy->MessageManager()->
- HandleRequestL( EPacketContextModifyActiveContext,
- &data );
- }
- }
- }
- }
-
- // Check if first cell includes id
- if ( 0xFF != iFilterIdTemporaryArray[0] )
- {
-
- CMmPacketQoSGsmWcdmaExt* pointerToExt = NULL;
- if(qosProfile)
- {
- pointerToExt = qosProfile->PacketQoSGsmWcdmaExt();
- }
-
- if( NULL != pointerToExt )
- {
- TInt configurationType = pointerToExt->ConfigurationType();
- switch( configurationType )
- {
- case TPacketDataConfigBase::KConfigGPRS:
- qosProfile97 = pointerToExt->Requested97();
- break;
- case TPacketDataConfigBase::KConfigRel99Rel4:
- qosProfile99 = pointerToExt->Requested99();
- break;
- case TPacketDataConfigBase::KConfigRel5:
- qosProfileR5 = pointerToExt->RequestedR5();
- break;
- default:
- break;
- }
-
- //Pack configuration and send to messagemanager
- TInfoName contextName = iMmPacketContextTsy->ContextName();
- iContextConfiguration.iContextName = contextName;
- iContextConfiguration.iQosParams97 = qosProfile97;
- iContextConfiguration.iQosParams99 = qosProfile99;
- iContextConfiguration.iQosParamsR5 = qosProfileR5;
- iContextConfiguration.iConfiguration = iConfig->iPdpType;
- iContextConfiguration.iTftFilterArray = iFilterTemporaryArray;
- iContextConfiguration.iTftOperation = tftOperation;
-
- for(TInt i=0; i < KMaxNumberOfTftFilters; i++ )
- {
- iContextConfiguration.iFilterIdArray[i] =
- iFilterIdTemporaryArray[i];
- }
-
- CMmDataPackage data;
- data.PackData( &iContextConfiguration,
- &iTempMediaAuthorizationArray );
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketContextModifyActiveContext, &data );
- }
-
- }
-
- return ret;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteModifyActiveContext
-// When modification is done completes to client
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteModifyActiveContext(
- CMmDataPackage* aDataPackage, const TInt aResult )
- {
- //Unpack data
- TBuf8<1> rejectioncode;
- rejectioncode.Zero();
- TInfoName contextName;
- aDataPackage->UnPackData( contextName, rejectioncode );
-
-
- //check result
- if ( KErrNone == aResult )
- {
- if ( NULL != iFilterTemporaryArray )
- {
- if ( EAddPacketFilterStatusAdd == iFilterStatus )
- {
- TInt temporaryFilterArrayCount ( 0 );
- for ( TInt i = 0 ; i < iFilterArray->Count() ; i++ )
- {
- if ( 0xFF == iFilterArray->At( i ).iId )
- {
- iFilterArray->At( i ) = iFilterTemporaryArray->
- At( temporaryFilterArrayCount++ );
- }
- }
-
- delete iFilterTemporaryArray;
- iFilterTemporaryArray = NULL;
-
- }
-
- else if ( EAddPacketFilterStatusModify == iFilterStatus )
- {
- for ( TInt k = 0 ; k < iFilterTemporaryArray->Count() ; k++ )
- {
- for ( TInt g = 0 ; g < iFilterArray->Count() ; g++ )
- {
- if ( iFilterTemporaryArray->At( k ).iId ==
- iFilterArray->At( g ).iId )
- {
- iFilterArray->At( g ) =
- iFilterTemporaryArray->At( k );
- g = iFilterArray->Count();
- }
- }
- }
-
- delete iFilterTemporaryArray;
- iFilterTemporaryArray = NULL;
- }
- }
-
- else if ( 0xFF != iFilterIdTemporaryArray[0] )
- {
- for ( TInt g = 0 ; g < KMaxNumberOfTftFilters ; g++ )
- {
- for ( TInt i = 0;i < iFilterArray->Count(); i++ )
- {
- if( iFilterArray->At( i ).iId ==
- iFilterIdTemporaryArray[g] )
- {
- iFilterArray->Delete( i );
- iFilterIdTemporaryArray[g] = 0xFF;
- i = iFilterArray->Count();
- }
- }
- }
- }
- }
-
- //Check if rejection code is received
- if( 0 != rejectioncode.Length() && KErrNone != aResult )
- {
-
- //Append rejection code
- TInt length = iConfig->iProtocolConfigOption.iMiscBuffer.MaxLength()-4;
-
- if( iConfig->iProtocolConfigOption.iMiscBuffer.Length() <= length )
- {
- //1st byte of container ID
- iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x00);
- //2nd byte of container ID
- iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x04);
- //content length
- iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x01);
- //content
- iConfig->iProtocolConfigOption.iMiscBuffer.Append( rejectioncode );
- }
-
- }
-
-
- iMmPacketContextTsy->CompleteModifyActiveContext( aResult );
- iPrevFilterStatus = EAddPacketFilterStatusUnknown;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::EnumeratePacketFilters
-// Returns number of defined packet filters to client
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::EnumeratePacketFilters(
- TInt *aCount )
- {
-
- *aCount = 0;
-
- if ( NULL != iFilterArray )
- {
- *aCount = iFilterArray->Count();
- }
-
- return KErrNone;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::GetPacketFilterInfo
-// Returns the packet filter information specified by aIndex
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::GetPacketFilterInfo(
- const TInt aIndex,
- TPacketBase* aPacketFilterInfo )
- {
- TInt ret( KErrArgument );
-
- if ( NULL != iFilterArray )
- {
- if( iFilterArray->Count() > aIndex )
- {
- RPacketContext::TPacketFilterV2& contextFilter =
- *( RPacketContext::TPacketFilterV2* )aPacketFilterInfo;
-
- contextFilter = iFilterArray->At( aIndex );
- ret = KErrNone;
-
- }
- }
-
- return ret;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::ContextConfig
-// Return Context configuration
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-RPacketContext::TContextConfigGPRS* CMmPacketContextGsmWcdmaExt::ContextConfig
- (
- ) const
- {
- return iConfig;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel
-// This method gets the DNS info
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-TInt CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel(
- TDes8* const aDnsInfo )
- {
-TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel." );
-
- // Unpack the aDnsInfo
- RPacketContext::TTDnsInfoV2Pckg* dnsInfoPckg =
- ( RPacketContext::TTDnsInfoV2Pckg* ) aDnsInfo;
- RPacketContext::TDnsInfoV2& dnsInfo = ( *dnsInfoPckg )();
-
- // Get DNS info
- dnsInfo.iPrimaryDns = iConfig->
- iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
- dnsInfo.iSecondaryDns = iConfig->
- iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
-
- return KErrNone;
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::SetContextStatusBeforeDeactivation
-// Sets context status before activation
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::SetContextStatusBeforeDeactivation(
- const RPacketContext::TContextStatus aContextStatusBeforeDeactivation )
- {
-
- iContextStatusBeforeDeactivation = aContextStatusBeforeDeactivation;
-
- }
-
-// ---------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::CompleteNotifyStatusChange
-// Routes completion to tsy and sets last error cause
-// (other items were commented in a header).
-// ---------------------------------------------------------------------------
-//
-void CMmPacketContextGsmWcdmaExt::CompleteNotifyStatusChange(
- const CMmDataPackage* aDataPackage,
- const TInt aResult )
- {
-
- TInfoName* null= NULL;
- RPacketContext::TContextStatus contextStatus;
-
- //initialise struct for completion params
- TContextMisc misc;
-
- aDataPackage->UnPackData( null, misc );
- contextStatus = misc.iStatus;
-
- if( KErrNone != aResult )
- {
-
- iMmPacketContextTsy->SetLastErrorCause( aResult );
-
- }
-
- //Check if rejection cause is included
- if( 0 != misc.iRejectionCause.Length() && KErrNone != aResult )
- {
-
- //Append rejection code
- TInt length = iConfig->iProtocolConfigOption.iMiscBuffer.MaxLength()-4;
- if( iConfig->iProtocolConfigOption.iMiscBuffer.Length() <= length )
- {
- //1st byte of container ID
- iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x00);
- //2nd byte of container ID
- iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x04);
- //content length
- iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x01);
- //content
- iConfig->iProtocolConfigOption.iMiscBuffer.Append(
- misc.iRejectionCause );
- }
- }
-
- iMmPacketContextTsy->CompleteNotifyStatusChange( contextStatus );
-
- }
-
-//----------------------------------------------------------------------------
-// CMmPacketContextGsmWcdmaExt::AddMediaAuthorizationL makes request for
-// licensee specific tsy for adding authorization params
-//----------------------------------------------------------------------------
-
-TInt CMmPacketContextGsmWcdmaExt::AddMediaAuthorizationL(
- RPacketContext::CTFTMediaAuthorizationV3* const aMediaAuthorization, TBool &aHasMediaAuthorizationBeenCached )
- {
-
- TInt ret ( KErrGeneral );
- CMmPacketDataPackage data;
- TInfoName contextName = iMmPacketContextTsy->ContextName();
-
- //take copy and store locally
- RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization =
- aMediaAuthorization;
-
-
- if ( NULL == iTempMediaAuthorizationArray )
- {
- iTempMediaAuthorizationArray = new ( ELeave ) CArrayFixFlat
- <RPacketContext::CTFTMediaAuthorizationV3>( 8 );
- //Reset Array
- iTempMediaAuthorizationArray->Reset();
- }
-
-
- //Store request locally
- if ( 3 > iTempMediaAuthorizationArray->Count() )
- {
-
- iTempMediaAuthorizationArray->AppendL( *mediaAuthorization );
- aHasMediaAuthorizationBeenCached=ETrue;
- ret = KErrNone;
- }
- else
- {
- aHasMediaAuthorizationBeenCached=EFalse;
- }
-
- // context configuration if context status is unknown or inactive request
- // will be sended first time to Licensee Tsy
-
- if ( iMmPacketContextTsy->ContextStatus() ==
- RPacketContext::EStatusUnknown ||iMmPacketContextTsy->ContextStatus()
- == RPacketContext::EStatusInactive )
- {
-
- data.SetConfig( iConfig , iContextConfigurationType );
- data.PackData( &contextName, aMediaAuthorization );
-
-
- //Send request to licensee Tsy
- ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
- EPacketAddMediaAuthorization, &data );
-
- isAddMediaAuthorizationCalledFirstTime = ETrue;
- }
-
- return ret;
- }
-
-
-//----------------------------------------------------------------------------
-// TInt CMmPacketContextGsmWcdmaExt::RemoveMediaAuthorization
-// removes authoriazation params
-//----------------------------------------------------------------------------
-
-TInt CMmPacketContextGsmWcdmaExt::RemoveMediaAuthorization(
- RPacketContext::TAuthorizationToken* const aAuthorizationToken )
- {
-
- TInt ret( KErrNotFound );
- RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization = NULL;
-
- for( TInt index (0); index < iTempMediaAuthorizationArray->Count(); index++ )
- {
- //get pointer from array by index
- mediaAuthorization = &( iTempMediaAuthorizationArray->At( index ) );
-
- if( NULL != mediaAuthorization )
- {
- //Check if authorizationtoken is the one to be removed
- if ( *aAuthorizationToken == mediaAuthorization->iAuthorizationToken )
- {
- iTempMediaAuthorizationArray->Delete( index );
-
- //break if found
- index = iTempMediaAuthorizationArray->Count();
- ret = KErrNone;
- }
- }
- //make sure that pointer will be renewed
- mediaAuthorization = NULL;
-
- }
-
- return ret;
-
- }
-
-// ================= OTHER EXPORTED FUNCTIONS ===============================
-
-// End of File
+// Copyright (c) 2006-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:
+//
+
+
+
+// INCLUDES
+#include <in_sock.h>
+#include "cmmpacketcontextgsmwcdmaext.h"
+#include "Cmmpacketcontexttsy.h"
+#include "Cmmpacketcontextlist.h"
+#include "cmmpacketservicegsmwcdmaext.h"
+#include "CMmCommonStaticUtility.h"
+#include <ctsy/serviceapi/mmtsy_ipcdefs.h>
+#include <ctsy/pluginapi/cmmdatapackage.h>
+
+
+// ======== MEMBER FUNCTIONS ========
+
+CMmPacketContextGsmWcdmaExt* CMmPacketContextGsmWcdmaExt::NewL(
+ CMmPacketContextTsy* const aMmPacketContextTsy,
+ CMmPacketServiceTsy* const aMmPacketServiceTsy )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::NewL." );
+
+ CMmPacketContextGsmWcdmaExt* packetContextGsmWcdmaExt =
+ new ( ELeave ) CMmPacketContextGsmWcdmaExt();
+
+ CleanupStack::PushL( packetContextGsmWcdmaExt );
+
+ packetContextGsmWcdmaExt->iMmPacketContextTsy = aMmPacketContextTsy;
+ packetContextGsmWcdmaExt->iMmPacketServiceTsy = aMmPacketServiceTsy;
+ packetContextGsmWcdmaExt->ConstructL();
+
+ CleanupStack::Pop();
+
+ return packetContextGsmWcdmaExt;
+ }
+
+CMmPacketContextGsmWcdmaExt::CMmPacketContextGsmWcdmaExt()
+ {
+ }
+
+void CMmPacketContextGsmWcdmaExt::ConstructL()
+ {
+ InitInternalAttributesL();
+ }
+
+CMmPacketContextGsmWcdmaExt::~CMmPacketContextGsmWcdmaExt()
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::~CMmPacketContextGsmWcdmaExt." );
+
+ TInfoName contextName;
+ if( iMmPacketContextTsy )
+ {
+ contextName = iMmPacketContextTsy->ContextName();
+ }
+ if ( contextName.Compare( KNullDesC ) != 0 )
+ {
+ CMmDataPackage data;
+ data.PackData( &contextName );
+
+ if( iMmPacketServiceTsy )
+ {
+ TRAP_IGNORE( iMmPacketServiceTsy->MessageManager()->
+ HandleRequestL( EPacketContextDelete, &data ) );
+ }
+
+ }
+
+ // Notify status change
+ // This is needed to inform Service that context is no longer active
+ if( iMmPacketContextTsy )
+ {
+ iMmPacketContextTsy->CompleteNotifyStatusChange(
+ RPacketContext::EStatusDeleted );
+ }
+
+ // Release memory used for dynamic data members
+ delete iTempConfig;
+ delete iConfig;
+ delete iFilterArray;
+ delete iFilterTemporaryArray;
+ delete iTempMediaAuthorizationArray;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::InitInternalAttributesL
+// Initialises miscellaneous internal attributes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::InitInternalAttributesL()
+ {
+ // Network initiated context indication.
+ //iContextType = EFalse;
+
+ iIsActivateAllowed = EFalse;
+ iIsInitialiseAllowed = ETrue;
+ iConnectionSpeed = 0;
+
+ iTempConfig = NULL;
+
+ iNotifyConfig = RPacketContext::TContextConfigGPRS();
+
+ iFilterArray = new ( ELeave ) CArrayFixFlat
+ <RPacketContext::TPacketFilterV2>( 1 );
+
+ iFilterTemporaryArray = NULL;
+
+ iTempMediaAuthorizationArray = NULL;
+
+ for ( TInt i = 0 ; KMaxNumberOfTftFilters > i; i++ )
+ {
+ // cell is set 0xFF because of internal check(s)
+ iFilterIdTemporaryArray[i] = 0xFF;
+ }
+
+ TInfoName hostCidName = iMmPacketContextTsy->HostCID();
+
+ iConfig = new ( ELeave ) RPacketContext::TContextConfigGPRS();
+
+ if( 0 < hostCidName.Length() )
+ {
+ CMmPacketContextTsy* iPrimaryContextObject = iMmPacketServiceTsy->
+ PacketContextList()->PacketContextByName( &hostCidName );
+
+ if ( NULL != iPrimaryContextObject )
+ {
+ *iConfig = *( iPrimaryContextObject->
+ PacketContextGsmWcdmaExt()->ContextConfig() );
+ }
+ }
+
+ iPrevFilterStatus = EAddPacketFilterStatusUnknown;
+ iFilterStatus = EAddPacketFilterStatusUnknown;
+ isAddMediaAuthorizationCalledFirstTime = EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::InitialiseContextL
+// This function starts context initialisation.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::InitialiseContextL(RPacketContext::TDataChannelV2* aDataChannel)
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::InitialiseContextL." );
+
+ TInt ret( KErrArgument );
+
+ if ( iIsInitialiseAllowed )
+ {
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ TInfoName hostCidName = iMmPacketContextTsy->HostCID();
+ CMmDataPackage dataPackage;
+ dataPackage.PackData( &contextName, &hostCidName );
+
+ iDataChannel = aDataChannel;
+
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextInitialiseContext, &dataPackage );
+
+ if(ret == KErrNone)
+ {
+ iIsInitialiseAllowed = EFalse;
+ }
+ }
+ return ret;
+ }
+
+#ifndef USING_CTSY_DISPATCHER
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteInitialiseContextL
+// This function starts context initialisation.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteInitialiseContext(const TInt aResult) // Result
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteInitialiseContext." );
+
+ if ( KErrNone == aResult )
+ {
+ iMmPacketContextTsy->CompleteNotifyStatusChange(RPacketContext::EStatusInactive );
+
+ if(iDataChannel != NULL)
+ {
+ iDataChannel->iChannelId.Copy(iMmPacketContextTsy->ContextName());
+ iDataChannel->iPort.Copy(iMmPacketContextTsy->ContextName());
+ iDataChannel = NULL;
+ }
+
+ iIsActivateAllowed = ETrue;
+ // Set Dynamic Caps
+ iMmPacketServiceTsy->ActivePacketServiceExtension()->
+ SetDynamicCapsFlag( RPacketService::KCapsActivate, ETrue );
+ }
+ else
+ {
+ iIsInitialiseAllowed = ETrue;
+ }
+ iMmPacketContextTsy->CompleteInitialiseContext( aResult );
+
+ }
+#endif //USING_CTSY_DISPATCHER
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::ActivateL
+// This function starts the context activation.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::ActivateL()
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::ActivateL " );
+
+ TInt ret( KErrArgument );
+
+ if ( iIsActivateAllowed )
+ {
+
+ TInfoName hostCidRef = iMmPacketContextTsy->HostCID();
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ // Primary context activation
+ CMmDataPackage data;
+ data.PackData( &contextName );
+ //This is primary context activation and host context's length is
+ //hence zero
+ if ( 0 == hostCidRef.Length() )
+ {
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextActivate, &data );
+ }
+ // Secondary context activation
+ else
+ {
+ TBool qosExtensionId( EFalse );
+ CMmPacketQoSTsy* qosProfile = iMmPacketContextTsy->PacketQoSTsy();
+
+ if ( NULL != qosProfile )
+ {
+ qosExtensionId = qosProfile->PacketQoSGsmWcdmaExt()->
+ ProfileAsked();
+ }
+
+ // Check that secondary context have qos and at least one filter
+ if ( qosExtensionId && 0 != iFilterArray->Count() )
+ {
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextActivate, &data );
+ }
+ }
+
+ if ( KErrNone == ret )
+ {
+ iIsActivateAllowed = EFalse;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteActivate
+// Completes the activate request. Indicates DOS TSY has started activation.
+// Activation to network may take minutes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteActivate(
+ CMmDataPackage* aDataPackage,
+ TInt aResult )
+ {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivate. Status: %d",
+ aResult );
+
+ if ( KErrNone == aResult )
+ {
+ //Unpack to TPacketDataConfigBase first, determine the Extension ID and
+ //then cast to the appropriate structure before extracting all the necessary
+ //data
+ TPacketDataConfigBase* config = NULL;
+ //DOS layer brings also name in packet due routing in manager.
+ TInfoName* null;
+ aDataPackage->UnPackData( &null, &config );
+ null = NULL;
+
+ RPacketContext::TGSNAddress accessPointName = iConfig->iAccessPointName;
+
+ if ( TPacketDataConfigBase::KConfigGPRS == config->ExtensionId() )
+ {
+ iConfig->iPdpType = static_cast<RPacketContext::TContextConfigGPRS*>(config)->
+ iPdpType;
+ accessPointName = static_cast<RPacketContext::TContextConfigGPRS*>(config)->
+ iAccessPointName;
+ }
+
+ if ( TPacketDataConfigBase::KConfigRel99Rel4 == config->ExtensionId() ||
+ TPacketDataConfigBase::KConfigRel5 == config->ExtensionId())
+ {
+ iConfig->iPdpType = static_cast<RPacketContext::TContextConfigR99_R4*>(config)->
+ iPdpType;
+ accessPointName = static_cast<RPacketContext::TContextConfigR99_R4*>(config)->
+ iAccessPointName;
+ }
+
+ TInt temp = accessPointName.Length();
+ if ( !temp )
+ {
+ iConfig->iAccessPointName = accessPointName;
+ // Notify config changed
+ }
+ CompleteNotifyConfigChanged();
+
+ // Notify status change
+ iMmPacketContextTsy->CompleteNotifyStatusChange(
+ RPacketContext::EStatusActivating );
+ }
+ else
+ {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivate. ErrorCause: %d",
+ aResult );
+ // Re-activation is allowed because activation has not succeeded
+ iIsActivateAllowed = ETrue;
+ }
+
+ // Set Dynamic Caps
+ iMmPacketServiceTsy->ActivePacketServiceExtension()->SetDynamicCapsFlag(
+ RPacketService::KCapsActivate, iIsActivateAllowed );
+
+ // Complete Activate
+ iMmPacketContextTsy->CompleteActivate( aResult );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2L
+// Final completion for the context activation. Context is activated to
+// network.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2(
+ CMmDataPackage* aDataPackage, const TInt aResult )
+ {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteActivatePhase2. Status: %d", aResult );
+
+ if ( KErrNone == aResult )
+ {
+ //Unpack to TPacketDataConfigBase first, determine the Extension ID and
+ //then cast to the appropriate structure before extracting all the necessary
+ //data
+ TPacketDataConfigBase* aConfig = NULL;
+ TInfoName* name = NULL;
+ aDataPackage->UnPackData( &name, &aConfig );
+
+ if( NULL != aConfig )
+ {
+ if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+ {
+ RPacketContext::TContextConfigGPRS* configGPRS =
+ static_cast<RPacketContext::TContextConfigGPRS*>(aConfig);
+
+ iConfig->iPdpAddress = configGPRS->iPdpAddress;
+ iConfig->iAccessPointName = configGPRS->iAccessPointName;
+ iConfig->iProtocolConfigOption.iDnsAddresses.iPrimaryDns = configGPRS->
+ iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
+ iConfig->iProtocolConfigOption.iDnsAddresses.iSecondaryDns = configGPRS->
+ iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
+ iConfig->iPdpCompression = configGPRS->iPdpCompression;
+ iConfig->iProtocolConfigOption.iMiscBuffer =
+ configGPRS->iProtocolConfigOption.iMiscBuffer;
+ }
+
+ if ( TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() ||
+ TPacketDataConfigBase::KConfigRel5 == aConfig->ExtensionId())
+ {
+ RPacketContext::TContextConfigR99_R4* configR99_R4 =
+ static_cast<RPacketContext::TContextConfigR99_R4*>(aConfig);
+
+ iConfig->iPdpAddress = configR99_R4->iPdpAddress;
+ iConfig->iAccessPointName = configR99_R4->iAccessPointName;
+ iConfig->iProtocolConfigOption.iDnsAddresses.iPrimaryDns = configR99_R4->
+ iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
+ iConfig->iProtocolConfigOption.iDnsAddresses.iSecondaryDns = configR99_R4->
+ iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
+ iConfig->iPdpCompression = 0;
+ iConfig->iProtocolConfigOption.iMiscBuffer =
+ configR99_R4->iProtocolConfigOption.iMiscBuffer;
+ }
+ }
+
+ // Complete notifies
+ CompleteNotifyConfigChanged();
+ iMmPacketContextTsy->CompleteNotifyStatusChange(
+ RPacketContext::EStatusActive );
+ }
+
+ else
+ {
+ // Reactivation is allowed because activation has not succeeded
+ iIsActivateAllowed = ETrue;
+
+ // Set Dynamics Caps
+ iMmPacketServiceTsy->ActivePacketServiceExtension()->
+ SetDynamicCapsFlag( RPacketService::KCapsActivate, ETrue );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::Deactivate
+// This function deactivates the context
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::DeactivateL()
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::DeactivateL." );
+
+ TInt ret( KErrArgument );
+ //zero length
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ if ( contextName.Compare( KNullDesC ) != 0 )
+ {
+ CMmDataPackage data;
+ data.PackData( &contextName );
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextDeactivate, &data );
+
+ if ( KErrNone == ret )
+ {
+ iContextStatusBeforeDeactivation =
+ iMmPacketContextTsy->ContextStatus();
+ }
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteDeactivateL
+// Completes the deactivate request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteDeactivate(
+ const TInt aResult )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteDeactivate." );
+
+ if ( KErrNone == aResult )
+ {
+
+ // Notify status change
+ iMmPacketContextTsy->CompleteNotifyStatusChange(
+ RPacketContext::EStatusInactive );
+ }
+ else
+ {
+ // Notify status change
+ iMmPacketContextTsy->CompleteNotifyStatusChange(
+ iContextStatusBeforeDeactivation );
+ }
+
+ iMmPacketContextTsy->CompleteDeactivate( aResult );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::DeleteL
+// This function starts deletion.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::DeleteL()
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::DeleteL." );
+
+ TInt ret( KErrNotReady );
+
+ if ( RPacketContext::EStatusUnknown !=
+ iMmPacketContextTsy->ContextStatus() )
+ {
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ CMmDataPackage data;
+ data.PackData( &contextName );
+
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextDelete, &data );
+
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteDelete
+// Completes the delete request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteDelete(
+ TInt const aResult )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteDelete." );
+
+ if( KErrNone == aResult )
+ {
+ iContextStatusBeforeDeactivation = RPacketContext::EStatusDeleted;
+
+ // Notify status change
+ iMmPacketContextTsy->CompleteNotifyStatusChange(
+ RPacketContext::EStatusDeleted );
+
+
+ if ( !iMmPacketContextTsy->IsDialUpContext( NULL ) )
+ {
+ // Release memory used for context configuration info
+ delete iConfig;
+ iConfig = NULL;
+ }
+ }
+
+ iMmPacketContextTsy->CompleteDelete( aResult );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetConfig
+// Retrieves the current context configuration to the client.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetConfig(
+ TPacketDataConfigBase* const aConfig )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetConfig." );
+
+ TInt ret( KErrNone );
+
+ // Check that the mode given in aConfig is GPRS
+ if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() ||
+ TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() )
+ {
+ if ( NULL != iConfig &&
+ TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+ {
+ // Set configuration data to ETel side memory
+ *( RPacketContext::TContextConfigGPRS* )aConfig =
+ *iConfig;
+ }
+ else if ( NULL != iConfig &&
+ TPacketDataConfigBase::KConfigRel99Rel4 == aConfig->ExtensionId() )
+ {
+ RPacketContext::TContextConfigR99_R4 configR99_R4;
+
+ configR99_R4.iPdpType = iConfig->iPdpType;
+ configR99_R4.iAccessPointName = iConfig->iAccessPointName;
+ configR99_R4.iPdpAddress = iConfig->iPdpAddress;
+ configR99_R4.iUseEdge = iConfig->iUseEdge;
+ configR99_R4.iProtocolConfigOption =
+ iConfig->iProtocolConfigOption;
+ // Set configuration data to ETel side memory
+ *( RPacketContext::TContextConfigR99_R4* )aConfig = configR99_R4;
+
+ }
+ else
+ {
+ ret = KErrNotFound;
+ }
+ }
+ else
+ {
+ // Given mode is not supported
+ ret = KErrNotSupported;
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferred
+// Gets details of the current amount of data transmitted and
+// received over the airlink since the context was activated.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferredL()
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetDataVolumeTransferredL." );
+
+ TInt ret( KErrNone );
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+
+ if ( contextName.Compare( KNullDesC ) != 0 )
+ {
+ CMmDataPackage data;
+ data.PackData( &contextName );
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextGetDataVolumeTransferred, &data );
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred
+// Completes the get data volume transferred request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred(
+ const CMmDataPackage* aDataPackage,
+ const TInt aResult )
+ {
+ TInt errorValue( KErrNone );
+
+ if ( KErrNone == aResult )
+ {
+ TInfoName contextName;
+ RPacketContext::TDataVolume dataVolume;
+ aDataPackage->UnPackData( contextName, dataVolume );
+
+ // Set data volume to the tsy
+ iMmPacketContextTsy->SetDataVolume( KErrNone, dataVolume );
+ }
+
+ else
+ {
+ errorValue = KErrGeneral;
+ }
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteGetDataVolumeTransferred. Error Value:%d",
+ errorValue );
+
+ iMmPacketContextTsy->CompleteGetDataVolumeTransferred( errorValue );
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::NotifyConfigChanged
+// Requests notification when configuration of context changes.
+// Implements the GSM/WCDMA specific functionality for the notification.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::NotifyConfigChanged(
+ TPacketDataConfigBase& aConfig )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::NotifyConfigChanged." );
+
+ TInt ret( KErrNone );
+
+ // Check that used mode is GPRS
+ if ( ( TPacketDataConfigBase::KConfigGPRS != aConfig.ExtensionId() ) &&
+ ( TPacketDataConfigBase::KConfigRel99Rel4 != aConfig.ExtensionId() ) )
+ {
+ ret = KErrNotSupported;
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged
+// Completes notification when the context configuration changes.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged()
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::CompleteNotifyConfigChanged." );
+
+ if ( NULL != iConfig )
+ {
+ // Check that the configuration has really changed
+ if ( iNotifyConfig.iPdpType != iConfig->iPdpType ||
+ iNotifyConfig.iAccessPointName !=
+ iConfig->iAccessPointName ||
+ iNotifyConfig.iPdpAddress != iConfig->iPdpAddress ||
+ iNotifyConfig.iPdpCompression !=
+ iConfig->iPdpCompression ||
+ iNotifyConfig.iAnonymousAccessReqd !=
+ iConfig->iAnonymousAccessReqd ||
+ iNotifyConfig.iUseEdge != iConfig->iUseEdge )
+ {
+ // Store the configuration
+ iNotifyConfig = *iConfig;
+
+ // Complete notification
+ iMmPacketContextTsy->CompleteNotifyConfigChanged();
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::SetConfigL
+// This method starts the Context configuration.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::SetConfigL(
+ TPacketDataConfigBase* const aConfig )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::SetConfigL." );
+
+ TInt ret( KErrNotSupported );
+
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ if ( contextName.Compare( KNullDesC ) != 0 )
+ {
+ if ( TPacketDataConfigBase::KConfigGPRS == aConfig->ExtensionId() )
+ {
+ if( !iIsInitialiseAllowed )
+ {
+ iContextConfigurationType =
+ TPacketDataConfigBase::KConfigGPRS;
+
+ RPacketContext::TContextConfigGPRS& configGPRS =
+ *( RPacketContext::TContextConfigGPRS* )aConfig;
+
+ if ( NULL == iTempConfig )
+ {
+ // Allocate memory for iTempConfig
+ iTempConfig =
+ new ( ELeave ) RPacketContext::TContextConfigGPRS();
+ }
+
+ // Temporary store the configGPRS
+ *iTempConfig = configGPRS;
+
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::SetConfigL. NWIContext: %d", configGPRS.iNWIContext );
+
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ CMmDataPackage data;
+ data.PackData( &( *aConfig ), &contextName );
+
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextSetConfig, &data );
+
+ if ( KErrNone != ret )
+ {
+ // Release the memory allocated for iTempConfig
+ delete iTempConfig;
+ iTempConfig = NULL;
+ }
+ }
+ else
+ {
+ ret = KErrNotReady;
+ }
+
+ }
+ else if ( TPacketDataConfigBase::KConfigRel99Rel4 ==
+ aConfig->ExtensionId() ||
+ TPacketDataConfigBase::KConfigRel5 == aConfig->ExtensionId() )
+ {
+ if( !iIsInitialiseAllowed )
+ {
+ iContextConfigurationType =
+ TPacketDataConfigBase::KConfigRel99Rel4;
+ RPacketContext::TContextConfigR99_R4& configR99_R4 =
+ *( RPacketContext::TContextConfigR99_R4* )aConfig;
+
+ if ( NULL == iTempConfig )
+ {
+ // Allocate memory for iTempConfig
+ iTempConfig =
+ new ( ELeave ) RPacketContext::TContextConfigGPRS();
+ }
+
+ // Temporary store the configR99_R4 to iTempConfig
+ iTempConfig->iPdpType = configR99_R4.iPdpType;
+ iTempConfig->iAccessPointName = configR99_R4.iAccessPointName;
+ iTempConfig->iPdpAddress = configR99_R4.iPdpAddress;
+ iTempConfig->iUseEdge = configR99_R4.iUseEdge;
+ iTempConfig->iProtocolConfigOption =
+ configR99_R4.iProtocolConfigOption;
+
+ TInt len =
+ iTempConfig->iProtocolConfigOption.iMiscBuffer.Length();
+
+
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ CMmDataPackage data;
+ data.PackData( &( *aConfig ), &contextName );
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextSetConfig, &data );
+
+ if ( KErrNone != ret )
+ {
+ // Release the memory allocated for iTempConfig
+ delete iTempConfig;
+ iTempConfig = NULL;
+ }
+ }
+ else
+ {
+ ret = KErrNotReady;
+ }
+ }
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteSetConfig
+// Completes the SetConfig request.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteSetConfig(
+ const TInt aResult )
+ {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::CompleteSetConfig. aStatus:%d",
+ aResult );
+
+
+ if ( NULL != iTempConfig )
+ {
+ iConfig->iProtocolConfigOption.iMiscBuffer.Zero();
+ iConfig->iProtocolConfigOption.iMiscBuffer.FillZ();
+
+ *iConfig = *iTempConfig;
+ TInt len = iConfig->iProtocolConfigOption.iMiscBuffer.Length();
+ // Release the memory allocated for iTempConfig
+ delete iTempConfig;
+ iTempConfig = NULL;
+ CompleteNotifyConfigChanged();
+ }
+ if( isAddMediaAuthorizationCalledFirstTime )
+ {
+ iMmPacketContextTsy->CompleteSetConfig( aResult,
+ isAddMediaAuthorizationCalledFirstTime );
+ //Null changed params
+ isAddMediaAuthorizationCalledFirstTime = EFalse;
+
+ }
+ else
+ {
+ iMmPacketContextTsy->CompleteSetConfig( aResult ) ;
+ }
+
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::IsContextActivationAllowed
+// Tells if context activation is allowed.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CMmPacketContextGsmWcdmaExt::IsContextActivationAllowed() const
+ {
+
+ return iIsActivateAllowed;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetConfigurationData
+// Return the configuration data.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetConfigurationData(
+ TInfoName& aContextName,
+ RPacketContext::TProtocolType& aPdpType,
+ TBool& aContextType,
+ TInfoName& aPrimaryContextName )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetConfigurationData." );
+
+ TInt ret( KErrNotReady );
+
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ if ( contextName.Compare( KNullDesC ) != 0 )
+ {
+
+ aPdpType = iConfig->iPdpType;
+ aContextName = contextName;
+ aContextType = iConfig->iNWIContext; //iContextType;
+ aPrimaryContextName = iMmPacketContextTsy->HostCID();
+ ret = KErrNone;
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::AddPacketFilterL
+// Add or modify existing packet filter to specified context
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::AddPacketFilterL(
+ TDes8* aPacketFilter )
+ {
+ TInt ret( KErrGeneral );
+
+ RPacketContext::TPacketFilterV2Pckg* contextFilterPckg =
+ ( RPacketContext::TPacketFilterV2Pckg* ) aPacketFilter;
+
+ RPacketContext::TPacketFilterV2& contextFilter =
+ ( *contextFilterPckg )();
+
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::AddPacketFilterL contextFilterId: %d", contextFilter.iId );
+
+ // Check out Tft operation
+ iFilterStatus = EAddPacketFilterStatusAdd;
+ for ( TInt i = 0 ; i < iFilterArray->Count() ; i++ )
+ {
+ if ( contextFilter.iId == iFilterArray->At( i ).iId )
+ {
+ iFilterStatus = EAddPacketFilterStatusModify;
+ i = iFilterArray->Count();
+ }
+ }
+
+ if ( iPrevFilterStatus == iFilterStatus ||
+ EAddPacketFilterStatusUnknown == iPrevFilterStatus )
+ {
+ // context modification if context status is active or activating
+ if( iMmPacketContextTsy->ContextStatus() ==
+ RPacketContext::EStatusActive ||
+ iMmPacketContextTsy->ContextStatus() ==
+ RPacketContext::EStatusActivating )
+ {
+
+ if ( 0 < contextFilter.iId && 8 >= contextFilter.iId )
+ {
+ // if it's first time to use iFilterTemporaryArray
+ if ( NULL == iFilterTemporaryArray )
+ {
+ // Eight is max number of TFT filters. If count is less
+ // than eight, we can be sure that there is enough space
+ // for one more filter
+ if ( 8 > iFilterArray->Count() )
+ {
+ iFilterTemporaryArray = new ( ELeave ) CArrayFixFlat
+ <RPacketContext::TPacketFilterV2>( 1 );
+ iFilterTemporaryArray->AppendL( contextFilter );
+ iPrevFilterStatus = iFilterStatus;
+ ret = KErrNone;
+ }
+ }
+
+ // if iFilterTemporaryArray is already used at least once
+ else
+ {
+ // if previous filter operation was add
+ if ( EAddPacketFilterStatusAdd == iPrevFilterStatus )
+ {
+ // Eight is max number of TFT filters. If count is
+ // less than eight, we can be sure that there is
+ // enough space for one more filter
+ if ( 8 > ( iFilterArray->Count() +
+ iFilterTemporaryArray->Count() ) )
+ {
+ // Check that same filter id doesn't appear twice
+ TBool isNewFilter( ETrue );
+ for ( TInt i = 0;
+ iFilterTemporaryArray->Count() > i; i++ )
+ {
+ if ( ( iFilterTemporaryArray->At( i ).iId ) ==
+ ( contextFilter.iId ) )
+ {
+ isNewFilter = EFalse;
+ i = iFilterTemporaryArray->Count();
+ }
+ }
+
+ // if id doesn't exist already add filter to Array
+ if ( isNewFilter )
+ {
+ iFilterTemporaryArray->
+ AppendL ( contextFilter );
+ iPrevFilterStatus = iFilterStatus;
+ ret = KErrNone;
+ }
+ }
+ }
+
+ // if previous filter operation was modify
+ if ( EAddPacketFilterStatusModify == iPrevFilterStatus )
+ {
+ // Check that same filter id doesn't appear twice
+ TBool isNewFilter( ETrue );
+ for ( TInt i = 0; iFilterTemporaryArray->Count() > i;
+ i++ )
+ {
+ if ( ( iFilterTemporaryArray->At( i ).iId ) ==
+ ( contextFilter.iId ) )
+ {
+ isNewFilter = EFalse;
+ i = iFilterTemporaryArray->Count();
+ }
+ }
+
+ // if id doesn't exist already add filter to Array
+ if ( isNewFilter )
+ {
+ iFilterTemporaryArray->AppendL ( contextFilter );
+ iPrevFilterStatus = iFilterStatus;
+ ret = KErrNone;
+ }
+ }
+ }
+ }
+ }
+ }
+ // context configuration if context status is unknown or inactive
+ if ( iMmPacketContextTsy->ContextStatus() ==
+ RPacketContext::EStatusUnknown ||
+ iMmPacketContextTsy->ContextStatus() ==
+ RPacketContext::EStatusInactive )
+ {
+ // Eight is max number of TFT filters. If count is less than eight,
+ // we can be sure that there is enough space for one more filter
+ if ( iFilterArray->Count() < 8 &&
+ EAddPacketFilterStatusAdd == iFilterStatus )
+ {
+ // if filter id is allowed value. Allowed value is between 1..8
+ if ( 0 < contextFilter.iId && 8 >= contextFilter.iId )
+ {
+
+ TBool filterIdAlreadyInArray( EFalse );
+
+
+ if ( NULL == iFilterTemporaryArray )
+ {
+ iFilterTemporaryArray = new ( ELeave ) CArrayFixFlat
+ <RPacketContext::TPacketFilterV2>( 1 );
+ }
+
+
+ // if pdp type is Ipv4 8 is max number of TFT
+ // filters. If count is less than eight, we can be sure
+ // that there is enough space for one more filter
+ // if pdp type is Ipv6 4 is max number of TFT
+ // filters. If count is less than four, we can be sure
+ // that there is enough space for one more filter
+ if ( ( 8 > iFilterArray->Count() &&
+ RPacketContext::EPdpTypeIPv4 == iConfig->iPdpType ) ||
+ ( 4 > iFilterArray->Count() &&
+ RPacketContext::EPdpTypeIPv6 == iConfig->iPdpType )
+ )
+ {
+ for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
+ {
+ if ( contextFilter.iId !=
+ iFilterArray->At(i).iId )
+ {
+ iFilterTemporaryArray->AppendL(
+ iFilterArray->At(i) );
+ }
+
+ else
+ {
+ filterIdAlreadyInArray = ETrue;
+ }
+ }
+
+ iFilterTemporaryArray->AppendL( contextFilter );
+
+ TInfoName contextName =
+ iMmPacketContextTsy->ContextName();
+ CMmPacketDataPackage data;
+ data.SetConfig( iConfig ,
+ iContextConfigurationType );
+ data.PackData( &contextName, iFilterTemporaryArray );
+
+ ret = iMmPacketServiceTsy->MessageManager()->
+ HandleRequestL( EPacketContextAddPacketFilter,
+ &data );
+
+ }
+
+ else
+ {
+ ret = KErrArgument;
+ }
+
+ // add configured filter to iFilterArray
+ if ( KErrNone == ret )
+ {
+ if ( !filterIdAlreadyInArray )
+ {
+ iFilterArray->AppendL( contextFilter );
+ }
+ else
+ {
+ for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
+ {
+ if ( iFilterArray->At(i).iId ==
+ contextFilter.iId )
+ {
+ iFilterArray->At(i) = contextFilter;
+ }
+ }
+ }
+
+ delete iFilterTemporaryArray;
+ iFilterTemporaryArray = NULL;
+ }
+ }
+ }
+ }
+
+ // if error occures empty iFilterTemporaryArray
+ if ( ( KErrNone != ret ) && ( NULL != iFilterTemporaryArray ) )
+ {
+ delete iFilterTemporaryArray;
+ iFilterTemporaryArray = NULL;
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::RemovePacketFilter
+// This method stores Id(s) client wants to remove
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::RemovePacketFilter(
+ const TInt aID )
+ {
+TFLOGSTRING2( "TSY: CMmPacketContextGsmWcdmaExt::RemovePacketFilter. FilterId:%d", aID );
+
+ TInt ret( KErrArgument );
+
+ if ( EAddPacketFilterStatusUnknown == iPrevFilterStatus ||
+ EAddPacketFilterStatusRemove == iPrevFilterStatus )
+ {
+
+ // check that aID is in iFilterArray
+ TBool isRemoveFilterId( EFalse );
+ TInt index = 0;
+ for ( TInt i = 0 ; iFilterArray->Count() > i ; i++ )
+ {
+ if ( iFilterArray->At( i ).iId == aID )
+ {
+ isRemoveFilterId = ETrue;
+ index = i;
+ i = iFilterArray->Count();
+ }
+ }
+
+ if ( isRemoveFilterId )
+ {
+ // Find empty place for filter id and set filter id in it
+ for ( TInt i = 0 ; KMaxNumberOfTftFilters > i ; i++ )
+ {
+ if ( aID == iFilterIdTemporaryArray[i] )
+ {
+ // breaks if id already in array
+ i = KMaxNumberOfTftFilters;
+ }
+
+ // 0xFF value is set default to empty cell
+ else if ( 0xFF == iFilterIdTemporaryArray[i] )
+ {
+ iFilterIdTemporaryArray[i] = aID;
+ iFilterArray->Delete(index);
+
+ // breaks when empty cell found in array
+ i = KMaxNumberOfTftFilters;
+ iPrevFilterStatus = EAddPacketFilterStatusRemove;
+ ret = KErrNone;
+ }
+ }
+ }
+ }
+
+#ifdef USING_CTSY_DISPATCHER
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ CMmPacketDataPackage data;
+ data.PackData( &contextName, const_cast< TInt* >(&aID));
+ ret = iMmPacketServiceTsy->MessageManager()-> HandleRequestL( EPacketContextRemovePacketFilter, &data );
+#endif
+
+ if ( KErrNone != ret )
+ {
+ for ( TInt i = 0 ; KMaxNumberOfTftFilters > i ; i++ )
+ {
+ // cell is set 0xFF because of internal check(s)
+ iFilterIdTemporaryArray[i] = 0xFF;
+ iPrevFilterStatus = EAddPacketFilterStatusUnknown;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::ModifyActiveContextL
+// Method sends modification of an active context to the network.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::ModifyActiveContextL()
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::ModifyActiveContextL." );
+
+ TInt ret( KErrArgument );
+
+ TPacketFilterFilterOperation tftOperation( EDeletePacketFilters );
+
+ // Get pointer to QosProfile
+ CMmPacketQoSTsy* qosProfile = iMmPacketContextTsy->PacketQoSTsy();
+ RPacketQoS::TQoSGPRSRequested* qosProfile97 = NULL;
+ RPacketQoS::TQoSR99_R4Requested* qosProfile99 = NULL;
+
+ RPacketQoS::TQoSR5Requested* qosProfileR5 = NULL;
+
+ if ( NULL != qosProfile )
+ {
+ CMmPacketQoSGsmWcdmaExt* pointerToExt = qosProfile->
+ PacketQoSGsmWcdmaExt();
+
+ if ( NULL != pointerToExt )
+ {
+ // Get pointer to qos
+ TInt configurationType = pointerToExt->ConfigurationType();
+
+
+ switch( configurationType )
+ {
+ case TPacketDataConfigBase::KConfigGPRS:
+ qosProfile97 = pointerToExt->Requested97();
+ break;
+ case TPacketDataConfigBase::KConfigRel99Rel4:
+ qosProfile99 = pointerToExt->Requested99();
+ break;
+ case TPacketDataConfigBase::KConfigRel5:
+ qosProfileR5 = pointerToExt->RequestedR5();
+ break;
+ default:
+ break;
+ }
+
+ // If qos includes something
+ if ( NULL != qosProfile97 || NULL != qosProfile99
+ || NULL != qosProfileR5 )
+ {
+ // use 0xFF and index 0 to check if no filter(s) to remove
+ if ( NULL == iFilterTemporaryArray &&
+ 0xFF == iFilterIdTemporaryArray[0] )
+ {
+ //MODIFY QOS PARAMETERS
+ //Pack configuration and send to messagemanager
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ iContextConfiguration.iContextName = contextName;
+ iContextConfiguration.iQosParams97 = qosProfile97;
+ iContextConfiguration.iQosParams99 = qosProfile99;
+ iContextConfiguration.iQosParamsR5 = qosProfileR5;
+ iContextConfiguration.iConfiguration = iConfig->iPdpType;
+ iContextConfiguration.iTftFilterArray = iFilterArray;
+ iContextConfiguration.iTftOperation = tftOperation;
+ for( TInt i=0; i < KMaxNumberOfTftFilters; i++ )
+ {
+ iContextConfiguration.iFilterIdArray[i] =
+ iFilterIdTemporaryArray[i];
+ }
+
+ CMmDataPackage data;
+ data.PackData( &iContextConfiguration,
+ &iTempMediaAuthorizationArray );
+
+ ret = iMmPacketServiceTsy->MessageManager()->
+ HandleRequestL( EPacketContextModifyActiveContext,
+ &data );
+
+ }
+ }
+ }
+ }
+
+ // Add or Modify Filters
+ if( NULL != iFilterTemporaryArray )
+ {
+ if ( 0 < iFilterTemporaryArray->Count() )
+ {
+ // filteroperation is add
+ if ( EAddPacketFilterStatusAdd == iPrevFilterStatus )
+ {
+ tftOperation = EAddPacketFilters;
+ TInt beforeFilterCount = iFilterArray->Count();
+ TInt filterArrayExpandedSize = ( beforeFilterCount +
+ ( iFilterTemporaryArray->Count() ) );
+
+ iFilterArray->ResizeL( filterArrayExpandedSize );
+
+ for ( ; filterArrayExpandedSize > beforeFilterCount ;
+ beforeFilterCount++ )
+ {
+ // iId is set 0xFF because of internal check(s)
+ iFilterArray->At( beforeFilterCount ).iId = 0xFF;
+ }
+ }
+
+ // filteroperation is modify
+ if ( EAddPacketFilterStatusModify == iPrevFilterStatus )
+ {
+ tftOperation = EReplacePacketFilters;
+ }
+
+ if ( EAddPacketFilterStatusUnknown != iPrevFilterStatus )
+ {
+
+ CMmPacketQoSGsmWcdmaExt* pointerToExt = NULL;
+ if(qosProfile)
+ {
+ pointerToExt = qosProfile->PacketQoSGsmWcdmaExt();
+ }
+
+ if ( NULL != pointerToExt )
+ {
+ TInt configurationType = pointerToExt->ConfigurationType();
+
+ switch( configurationType )
+ {
+ case TPacketDataConfigBase::KConfigGPRS:
+ qosProfile97 = pointerToExt->Requested97();
+ break;
+ case TPacketDataConfigBase::KConfigRel99Rel4:
+ qosProfile99 = pointerToExt->Requested99();
+ break;
+ case TPacketDataConfigBase::KConfigRel5:
+ qosProfileR5 = pointerToExt->RequestedR5();
+ break;
+ default:
+ break;
+ }
+
+ //Pack configuration and send to messagemanager
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ iContextConfiguration.iContextName = contextName;
+ iContextConfiguration.iQosParams97 = qosProfile97;
+ iContextConfiguration.iQosParams99 = qosProfile99;
+ iContextConfiguration.iQosParamsR5 = qosProfileR5;
+ iContextConfiguration.iConfiguration = iConfig->iPdpType;
+ iContextConfiguration.iTftFilterArray = iFilterTemporaryArray;
+ iContextConfiguration.iTftOperation = tftOperation;
+
+ for( TInt i=0; i < KMaxNumberOfTftFilters; i++ )
+ {
+ iContextConfiguration.iFilterIdArray[i] =
+ iFilterIdTemporaryArray[i];
+ }
+
+ CMmDataPackage data;
+ data.PackData( &iContextConfiguration, &iTempMediaAuthorizationArray );
+
+ ret = iMmPacketServiceTsy->MessageManager()->
+ HandleRequestL( EPacketContextModifyActiveContext,
+ &data );
+ }
+ }
+ }
+ }
+
+ // Check if first cell includes id
+ if ( 0xFF != iFilterIdTemporaryArray[0] )
+ {
+
+ CMmPacketQoSGsmWcdmaExt* pointerToExt = NULL;
+ if(qosProfile)
+ {
+ pointerToExt = qosProfile->PacketQoSGsmWcdmaExt();
+ }
+
+ if( NULL != pointerToExt )
+ {
+ TInt configurationType = pointerToExt->ConfigurationType();
+ switch( configurationType )
+ {
+ case TPacketDataConfigBase::KConfigGPRS:
+ qosProfile97 = pointerToExt->Requested97();
+ break;
+ case TPacketDataConfigBase::KConfigRel99Rel4:
+ qosProfile99 = pointerToExt->Requested99();
+ break;
+ case TPacketDataConfigBase::KConfigRel5:
+ qosProfileR5 = pointerToExt->RequestedR5();
+ break;
+ default:
+ break;
+ }
+
+ //Pack configuration and send to messagemanager
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+ iContextConfiguration.iContextName = contextName;
+ iContextConfiguration.iQosParams97 = qosProfile97;
+ iContextConfiguration.iQosParams99 = qosProfile99;
+ iContextConfiguration.iQosParamsR5 = qosProfileR5;
+ iContextConfiguration.iConfiguration = iConfig->iPdpType;
+ iContextConfiguration.iTftFilterArray = iFilterTemporaryArray;
+ iContextConfiguration.iTftOperation = tftOperation;
+
+ for(TInt i=0; i < KMaxNumberOfTftFilters; i++ )
+ {
+ iContextConfiguration.iFilterIdArray[i] =
+ iFilterIdTemporaryArray[i];
+ }
+
+ CMmDataPackage data;
+ data.PackData( &iContextConfiguration,
+ &iTempMediaAuthorizationArray );
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketContextModifyActiveContext, &data );
+ }
+
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteModifyActiveContext
+// When modification is done completes to client
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteModifyActiveContext(
+ CMmDataPackage* aDataPackage, const TInt aResult )
+ {
+ //Unpack data
+ TBuf8<1> rejectioncode;
+ rejectioncode.Zero();
+ TInfoName contextName;
+ aDataPackage->UnPackData( contextName, rejectioncode );
+
+
+ //check result
+ if ( KErrNone == aResult )
+ {
+ if ( NULL != iFilterTemporaryArray )
+ {
+ if ( EAddPacketFilterStatusAdd == iFilterStatus )
+ {
+ TInt temporaryFilterArrayCount ( 0 );
+ for ( TInt i = 0 ; i < iFilterArray->Count() ; i++ )
+ {
+ if ( 0xFF == iFilterArray->At( i ).iId )
+ {
+ iFilterArray->At( i ) = iFilterTemporaryArray->
+ At( temporaryFilterArrayCount++ );
+ }
+ }
+
+ delete iFilterTemporaryArray;
+ iFilterTemporaryArray = NULL;
+
+ }
+
+ else if ( EAddPacketFilterStatusModify == iFilterStatus )
+ {
+ for ( TInt k = 0 ; k < iFilterTemporaryArray->Count() ; k++ )
+ {
+ for ( TInt g = 0 ; g < iFilterArray->Count() ; g++ )
+ {
+ if ( iFilterTemporaryArray->At( k ).iId ==
+ iFilterArray->At( g ).iId )
+ {
+ iFilterArray->At( g ) =
+ iFilterTemporaryArray->At( k );
+ g = iFilterArray->Count();
+ }
+ }
+ }
+
+ delete iFilterTemporaryArray;
+ iFilterTemporaryArray = NULL;
+ }
+ }
+
+ else if ( 0xFF != iFilterIdTemporaryArray[0] )
+ {
+ for ( TInt g = 0 ; g < KMaxNumberOfTftFilters ; g++ )
+ {
+ for ( TInt i = 0;i < iFilterArray->Count(); i++ )
+ {
+ if( iFilterArray->At( i ).iId ==
+ iFilterIdTemporaryArray[g] )
+ {
+ iFilterArray->Delete( i );
+ iFilterIdTemporaryArray[g] = 0xFF;
+ i = iFilterArray->Count();
+ }
+ }
+ }
+ }
+ }
+
+ //Check if rejection code is received
+ if( 0 != rejectioncode.Length() && KErrNone != aResult )
+ {
+
+ //Append rejection code
+ TInt length = iConfig->iProtocolConfigOption.iMiscBuffer.MaxLength()-4;
+
+ if( iConfig->iProtocolConfigOption.iMiscBuffer.Length() <= length )
+ {
+ //1st byte of container ID
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x00);
+ //2nd byte of container ID
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x04);
+ //content length
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x01);
+ //content
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append( rejectioncode );
+ }
+
+ }
+
+
+ iMmPacketContextTsy->CompleteModifyActiveContext( aResult );
+ iPrevFilterStatus = EAddPacketFilterStatusUnknown;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::EnumeratePacketFilters
+// Returns number of defined packet filters to client
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::EnumeratePacketFilters(
+ TInt *aCount )
+ {
+
+ *aCount = 0;
+
+ if ( NULL != iFilterArray )
+ {
+ *aCount = iFilterArray->Count();
+ }
+
+ return KErrNone;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetPacketFilterInfo
+// Returns the packet filter information specified by aIndex
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetPacketFilterInfo(
+ const TInt aIndex,
+ TPacketBase* aPacketFilterInfo )
+ {
+ TInt ret( KErrArgument );
+
+ if ( NULL != iFilterArray )
+ {
+ if( iFilterArray->Count() > aIndex )
+ {
+ RPacketContext::TPacketFilterV2& contextFilter =
+ *( RPacketContext::TPacketFilterV2* )aPacketFilterInfo;
+
+ contextFilter = iFilterArray->At( aIndex );
+ ret = KErrNone;
+
+ }
+ }
+
+ return ret;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::ContextConfig
+// Return Context configuration
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+RPacketContext::TContextConfigGPRS* CMmPacketContextGsmWcdmaExt::ContextConfig
+ (
+ ) const
+ {
+ return iConfig;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel
+// This method gets the DNS info
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel(
+ TDes8* const aDnsInfo )
+ {
+TFLOGSTRING( "TSY: CMmPacketContextGsmWcdmaExt::GetDnsInfoEtel." );
+
+ // Unpack the aDnsInfo
+ RPacketContext::TTDnsInfoV2Pckg* dnsInfoPckg =
+ ( RPacketContext::TTDnsInfoV2Pckg* ) aDnsInfo;
+ RPacketContext::TDnsInfoV2& dnsInfo = ( *dnsInfoPckg )();
+
+ // Get DNS info
+ dnsInfo.iPrimaryDns = iConfig->
+ iProtocolConfigOption.iDnsAddresses.iPrimaryDns;
+ dnsInfo.iSecondaryDns = iConfig->
+ iProtocolConfigOption.iDnsAddresses.iSecondaryDns;
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::SetContextStatusBeforeDeactivation
+// Sets context status before activation
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::SetContextStatusBeforeDeactivation(
+ const RPacketContext::TContextStatus aContextStatusBeforeDeactivation )
+ {
+
+ iContextStatusBeforeDeactivation = aContextStatusBeforeDeactivation;
+
+ }
+
+// ---------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::CompleteNotifyStatusChange
+// Routes completion to tsy and sets last error cause
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CMmPacketContextGsmWcdmaExt::CompleteNotifyStatusChange(
+ const CMmDataPackage* aDataPackage,
+ const TInt aResult )
+ {
+
+ TInfoName* null= NULL;
+ RPacketContext::TContextStatus contextStatus;
+
+ //initialise struct for completion params
+ TContextMisc misc;
+
+ aDataPackage->UnPackData( null, misc );
+ contextStatus = misc.iStatus;
+
+ if( KErrNone != aResult )
+ {
+
+ iMmPacketContextTsy->SetLastErrorCause( aResult );
+
+ }
+
+ //Check if rejection cause is included
+ if( 0 != misc.iRejectionCause.Length() && KErrNone != aResult )
+ {
+
+ //Append rejection code
+ TInt length = iConfig->iProtocolConfigOption.iMiscBuffer.MaxLength()-4;
+ if( iConfig->iProtocolConfigOption.iMiscBuffer.Length() <= length )
+ {
+ //1st byte of container ID
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x00);
+ //2nd byte of container ID
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x04);
+ //content length
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append(0x01);
+ //content
+ iConfig->iProtocolConfigOption.iMiscBuffer.Append(
+ misc.iRejectionCause );
+ }
+ }
+
+ iMmPacketContextTsy->CompleteNotifyStatusChange( contextStatus );
+
+ }
+
+//----------------------------------------------------------------------------
+// CMmPacketContextGsmWcdmaExt::AddMediaAuthorizationL makes request for
+// licensee specific tsy for adding authorization params
+//----------------------------------------------------------------------------
+
+TInt CMmPacketContextGsmWcdmaExt::AddMediaAuthorizationL(
+ RPacketContext::CTFTMediaAuthorizationV3* const aMediaAuthorization, TBool &aHasMediaAuthorizationBeenCached )
+ {
+
+ TInt ret ( KErrGeneral );
+ CMmPacketDataPackage data;
+ TInfoName contextName = iMmPacketContextTsy->ContextName();
+
+ //take copy and store locally
+ RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization =
+ aMediaAuthorization;
+
+
+ if ( NULL == iTempMediaAuthorizationArray )
+ {
+ iTempMediaAuthorizationArray = new ( ELeave ) CArrayFixFlat
+ <RPacketContext::CTFTMediaAuthorizationV3>( 8 );
+ //Reset Array
+ iTempMediaAuthorizationArray->Reset();
+ }
+
+
+ //Store request locally
+ if ( 3 > iTempMediaAuthorizationArray->Count() )
+ {
+
+ iTempMediaAuthorizationArray->AppendL( *mediaAuthorization );
+ aHasMediaAuthorizationBeenCached=ETrue;
+ ret = KErrNone;
+ }
+ else
+ {
+ aHasMediaAuthorizationBeenCached=EFalse;
+ }
+
+ // context configuration if context status is unknown or inactive request
+ // will be sended first time to Licensee Tsy
+
+ if ( iMmPacketContextTsy->ContextStatus() ==
+ RPacketContext::EStatusUnknown ||iMmPacketContextTsy->ContextStatus()
+ == RPacketContext::EStatusInactive )
+ {
+
+ data.SetConfig( iConfig , iContextConfigurationType );
+ data.PackData( &contextName, aMediaAuthorization );
+
+
+ //Send request to licensee Tsy
+ ret = iMmPacketServiceTsy->MessageManager()->HandleRequestL(
+ EPacketAddMediaAuthorization, &data );
+
+ isAddMediaAuthorizationCalledFirstTime = ETrue;
+ }
+
+ return ret;
+ }
+
+
+//----------------------------------------------------------------------------
+// TInt CMmPacketContextGsmWcdmaExt::RemoveMediaAuthorization
+// removes authoriazation params
+//----------------------------------------------------------------------------
+
+TInt CMmPacketContextGsmWcdmaExt::RemoveMediaAuthorization(
+ RPacketContext::TAuthorizationToken* const aAuthorizationToken )
+ {
+
+ TInt ret( KErrNotFound );
+ RPacketContext::CTFTMediaAuthorizationV3* mediaAuthorization = NULL;
+
+ for( TInt index (0); index < iTempMediaAuthorizationArray->Count(); index++ )
+ {
+ //get pointer from array by index
+ mediaAuthorization = &( iTempMediaAuthorizationArray->At( index ) );
+
+ if( NULL != mediaAuthorization )
+ {
+ //Check if authorizationtoken is the one to be removed
+ if ( *aAuthorizationToken == mediaAuthorization->iAuthorizationToken )
+ {
+ iTempMediaAuthorizationArray->Delete( index );
+
+ //break if found
+ index = iTempMediaAuthorizationArray->Count();
+ ret = KErrNone;
+ }
+ }
+ //make sure that pointer will be renewed
+ mediaAuthorization = NULL;
+
+ }
+
+ return ret;
+
+ }
+
+// ================= OTHER EXPORTED FUNCTIONS ===============================
+
+// End of File