--- a/cmmanager/cmmgr/cmmserver/src/cmmsession.cpp Tue Aug 31 15:35:44 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3564 +0,0 @@
-/*
-* Copyright (c) 2009-2010 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:
-* Handles client requests.
-*
-*/
-
-#include <sysutil.h>
-#include <cmconnectionmethoddef.h>
-#include <cmpluginembdestinationdef.h>
-#include <cmdefconnvalues.h>
-
-#include "cmmserver.h"
-#include "cmmserverdefs.h"
-#include "cmmsession.h"
-#include "cmmdestinationinstance.h"
-#include "cmmconnmethodinstance.h"
-
-#include "OstTraceDefinitions.h"
-#ifdef OST_TRACE_COMPILER_IN_USE
-#include "cmmsessionTraces.h"
-#endif
-
-
-CCmmSession* CCmmSession::NewL( CCmmServer& aServer, CCmmCache& aCache )
- {
- OstTraceFunctionEntry0( CCMMSESSION_NEWL_ENTRY );
-
- CCmmSession* self = CCmmSession::NewLC( aServer, aCache );
- CleanupStack::Pop( self );
-
- OstTraceFunctionExit0( CCMMSESSION_NEWL_EXIT );
- return self;
- }
-
-CCmmSession* CCmmSession::NewLC( CCmmServer& aServer, CCmmCache& aCache )
- {
- OstTraceFunctionEntry0( CCMMSESSION_NEWLC_ENTRY );
-
- CCmmSession* self = new( ELeave ) CCmmSession( aServer, aCache );
- CleanupStack::PushL( self ) ;
- self->ConstructL() ;
-
- OstTraceFunctionExit0( CCMMSESSION_NEWLC_EXIT );
- return self ;
- }
-
-// -----------------------------------------------------------------------------
-// Constructor.
-// -----------------------------------------------------------------------------
-//
-CCmmSession::CCmmSession( CCmmServer& aServer, CCmmCache& aCache )
- :
- iServer( aServer ),
- iCache( aCache ),
- iFsConnected( EFalse )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CCMMSESSION_ENTRY );
-
- iDestinationContainer = NULL;
- iDestinationObjects = NULL;
- iConnMethodContainer = NULL;
- iConnMethodObjects = NULL;
-
- OstTraceFunctionExit0( CCMMSESSION_CCMMSESSION_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// The second phase of two phase construction.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::ConstructL()
- {
- OstTraceFunctionEntry0( CCMMSESSION_CONSTRUCTL_ENTRY );
-
- iServer.IncrementSessions();
-
- // Create a new object index (it stores the destination objects owned by
- // this session).
- iDestinationObjects = CObjectIx::NewL();
-
- // Initialize the object container using the object container index in the
- // server (Object container provides unique ids for the objects owned by
- // this session).
- iDestinationContainer = iServer.NewContainerL();
-
- // The same for connection method subsessions.
- iConnMethodObjects = CObjectIx::NewL();
- iConnMethodContainer = iServer.NewContainerL();
-
- OstTraceFunctionExit0( CCMMSESSION_CONSTRUCTL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CCmmSession::~CCmmSession()
- {
- OstTraceFunctionEntry0( DUP1_CCMMSESSION_CCMMSESSION_ENTRY );
-
- iServer.DecrementSessions();
-
- delete iDestinationObjects;
- iDestinationObjects = NULL;
-
- if ( iDestinationContainer != 0 )
- {
- iServer.RemoveContainer( iDestinationContainer );
- iDestinationContainer = NULL;
- }
-
- delete iConnMethodObjects;
- iConnMethodObjects = NULL;
-
- if ( iConnMethodContainer != 0 )
- {
- iServer.RemoveContainer( iConnMethodContainer );
- iConnMethodContainer = NULL;
- }
-
- if ( iFsConnected )
- {
- iFs.Close();
- iFsConnected = EFalse;
- }
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_CCMMSESSION_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::ServiceL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::ServiceL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SERVICEL_ENTRY );
-
- TInt result( KErrNone );
- switch ( aMessage.Function() )
- {
- case ECmmGetBearerInfoInt:
- {
- GetBearerInfoIntL( aMessage );
- }
- break;
- case ECmmGetBearerInfoBool:
- {
- GetBearerInfoBoolL( aMessage );
- }
- break;
- case ECmmGetBearerInfoString:
- {
- GetBearerInfoStringL( aMessage );
- }
- break;
- case ECmmGetBearerInfoString8:
- {
- GetBearerInfoString8L( aMessage );
- }
- break;
- case ECmmGetConnMethodInfoInt:
- {
- GetConnMethodInfoIntL( aMessage );
- }
- break;
- case ECmmGetConnMethodInfoBool:
- {
- GetConnMethodInfoBoolL( aMessage );
- }
- break;
- case ECmmGetConnMethodInfoString:
- {
- GetConnMethodInfoStringL( aMessage );
- }
- break;
- case ECmmGetConnMethodInfoString8:
- {
- GetConnMethodInfoString8L( aMessage );
- }
- break;
- case ECmmGetConnMethodArray:
- {
- GetConnMethodArrayL( aMessage );
- }
- break;
- case ECmmGetAllDestinations:
- {
- GetAllDestinationsL( aMessage );
- }
- break;
- case ECmmGetEasyWlanId:
- {
- GetEasyWLANIdL( aMessage );
- }
- break;
- case ECmmRemoveAllReferences: // CM becomes uncategorized.
- {
- RemoveAllReferencesL( aMessage );
- }
- break;
- case ECmmGetSupportedBearers:
- {
- GetSupportedBearersL( aMessage );
- }
- break;
- case ECmmGetUncategorizedIcon:
- {
- GetUncategorizedIconL( aMessage );
- }
- break;
- case ECmmReadDefaultConnection:
- {
- ReadDefaultConnectionL( aMessage );
- }
- break;
- case ECmmWriteDefaultConnection:
- {
- // Default connection is now just internet snap.
- result = KErrNotSupported;
- }
- break;
- case ECmmReadGeneralConnectionSettings:
- {
- ReadGenConnSettingsL( aMessage );
- }
- break;
- case ECmmWriteGeneralConnectionSettings:
- {
- WriteGenConnSettingsL( aMessage );
- }
- break;
- case ECmmGetBearerPriorityArray:
- {
- GetBearerPriorityArrayL( aMessage );
- }
- break;
- case ECmmUpdateBearerPriorityArray:
- {
- UpdateBearerPriorityArrayL( aMessage );
- }
- break;
- case ECmmCopyConnMethod:
- {
- CopyConnMethodL( aMessage );
- }
- break;
- case ECmmMoveConnMethod:
- {
- MoveConnMethodL( aMessage );
- }
- break;
- case ECmmRemoveConnMethod:
- {
- RemoveConnMethodL( aMessage );
- }
- break;
-
- case EDestGetDestination:
- case EDestRefresh:
- case EDestCreateDestinationWithName:
- case EDestCreateDestinationWithNameAndId:
- case EDestCloseDestination:
- case EDestGetConnMethodCount:
- case EDestGetConnMethodPriority:
- case EDestGetName:
- case EDestGetId:
- case EDestGetElementId:
- case EDestMetadata:
- case EDestGetProtectionLevel:
- case EDestIsConnected:
- case EDestIsHidden:
- case EDestIsEqual:
- case EDestGetIcon:
- case EDestAddConnMethod:
- case EDestAddEmbeddedDestination:
- case EDestDeleteConnMethod:
- case EDestRemoveConnMethod:
- case EDestModifyPriority:
- case EDestSetName:
- case EDestSetMetadata:
- case EDestSetProtection:
- case EDestSetHidden:
- case EDestUpdate:
- case EDestDelete:
- case EDestSetIcon:
- {
- ServiceDestinationL( aMessage );
- }
- break;
-
- case ECMGetConnMethodWithId:
- case ECMRefresh:
- case ECMCreateConnMethod:
- case ECMCreateConnMethodWithId:
- case ECMGetConnMethodFromDestWithIndex:
- case ECMGetConnMethodFromDestWithId:
- case ECMCreateConnMethodToDest:
- case ECMCreateConnMethodToDestWithId:
- case ECMCreateCopyOfExisting:
- case ECMCloseConnMethod:
- case ECMGetIntAttribute:
- case ECMGetBoolAttribute:
- case ECMGetStringAttribute:
- case ECMGetString8Attribute:
- case ECMIsEqual:
- case ECMSetIntAttribute:
- case ECMSetBoolAttribute:
- case ECMSetStringAttribute:
- case ECMSetString8Attribute:
- case ECMDelete:
- case ECMUpdate:
- case EDestGetEmbeddedDestination:
- {
- ServiceConnMethodL( aMessage );
- }
- break;
- default:
- {
- result = KErrNotSupported;
- }
- break;
- }
-
- aMessage.Complete( result );
-
- OstTraceFunctionExit0( CCMMSESSION_SERVICEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Finds a connection method instance that belongs to this session and matches
-// the provided ID. Return NULL if no match is found.
-// -----------------------------------------------------------------------------
-//
-CCmmConnMethodInstance* CCmmSession::FindConnMethodInstanceById(
- const TUint32 aConnMethodId )
- {
- OstTraceFunctionEntry0( CCMMSESSION_FINDCONNMETHODINSTANCEBYID_ENTRY );
-
- CCmmConnMethodInstance* wantedConnMethodInstance( NULL );
-
- for ( TInt i = 0; i < iConnMethodObjects->Count(); i++ )
- {
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )( ( *iConnMethodObjects )[i] );
- if ( connMethodInstance && connMethodInstance->GetId() == aConnMethodId )
- {
- wantedConnMethodInstance = connMethodInstance;
- break;
- }
- }
-
- OstTraceFunctionExit0( CCMMSESSION_FINDCONNMETHODINSTANCEBYID_EXIT );
- return wantedConnMethodInstance;
- }
-
-// -----------------------------------------------------------------------------
-// Finds a destination instance that belongs to this session and matches
-// the provided handle.
-// -----------------------------------------------------------------------------
-//
-CCmmDestinationInstance* CCmmSession::FindDestinationInstanceByHandleL(
- const TInt aDestinationHandle )
- {
- OstTraceFunctionEntry0( CCMMSESSION_FINDDESTINATIONINSTANCEBYHANDLEL_ENTRY );
-
- return (CCmmDestinationInstance*)iDestinationObjects->AtL( aDestinationHandle );
- }
-
-// -----------------------------------------------------------------------------
-// Finds a destination instance that belongs to this session and matches
-// the provided ID. Return NULL if no match is found.
-// -----------------------------------------------------------------------------
-//
-CCmmDestinationInstance* CCmmSession::FindDestinationInstanceById(
- const TUint32 aDestinationId )
- {
- OstTraceFunctionEntry0( CCMMSESSION_FINDDESTINATIONINSTANCEBYID_ENTRY );
-
- CCmmDestinationInstance* wantedDestinationInstance( NULL );
-
- for ( TInt i = 0; i < iDestinationObjects->Count(); i++ )
- {
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )( ( *iDestinationObjects )[i] );
- if ( destinationInstance && destinationInstance->GetId() == aDestinationId )
- {
- wantedDestinationInstance = destinationInstance;
- break;
- }
- }
-
- OstTraceFunctionExit0( CCMMSESSION_FINDDESTINATIONINSTANCEBYID_EXIT );
- return wantedDestinationInstance;
- }
-
-// -----------------------------------------------------------------------------
-// Check from all open destination handles in this session if the given
-// connection method is inside any of them. The given destination is skipped.
-// -----------------------------------------------------------------------------
-//
-TBool CCmmSession::ConnMethodInOtherDestination(
- const TUint32 aConnMethodId,
- const TUint32 aDestinationId )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CONNMETHODINOTHERDESTINATION_ENTRY );
-
- for ( TInt i = 0; i < iDestinationObjects->Count(); i++ )
- {
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )( ( *iDestinationObjects )[i] );
- if ( destinationInstance && destinationInstance->GetId() != aDestinationId )
- {
- for ( TInt j = 0; j < destinationInstance->iConnMethodItemArray.Count(); j++ )
- {
- if ( destinationInstance->iConnMethodItemArray[i].iId == aConnMethodId )
- {
- OstTraceFunctionExit0( CCMMSESSION_CONNMETHODINOTHERDESTINATION_EXIT );
- return ETrue;
- }
- }
- }
- }
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_CONNMETHODINOTHERDESTINATION_EXIT );
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// Check for restrictions for adding an embedded destination from destination
-// instances of all clients.
-// - aDestinationId is the ID of the destination where a destination is beeing
-// embedded.
-// - aEmbeddedDestinationId is the ID of the destination that is beeing
-// embedded.
-// -----------------------------------------------------------------------------
-//
-TBool CCmmSession::EmbeddedDestinationConflictsFromAllSessions(
- const TUint32 aDestinationId,
- const TUint32 aEmbeddedDestinationId )
- {
- OstTraceFunctionEntry0( CCMMSESSION_EMBEDDEDDESTINATIONCONFLICTSFROMALLSESSIONS_ENTRY );
-
- return iServer.EmbeddedDestinationConflictsFromAllSessions(
- aDestinationId,
- aEmbeddedDestinationId );
- }
-
-// -----------------------------------------------------------------------------
-// Check for restrictions for adding an embedded destination from destination
-// instances of this session.
-// - aDestinationId is the ID of the destination where a destination is beeing
-// embedded.
-// - aEmbeddedDestinationId is the ID of the destination that is beeing
-// embedded.
-//
-// - Check that any destination instance does not contain aDestinationId as
-// embedded destination.
-// - Check that any destination instance for aEmbeddedDestinationId does not
-// contain an embedded destination.
-// -----------------------------------------------------------------------------
-//
-TBool CCmmSession::EmbeddedDestinationConflicts(
- const TUint32 aDestinationId,
- const TUint32 aEmbeddedDestinationId )
- {
- OstTraceFunctionEntry0( CCMMSESSION_EMBEDDEDDESTINATIONCONFLICTS_ENTRY );
-
- TBool result( EFalse );
-
- for ( TInt i = 0; i < iDestinationObjects->Count(); i++ )
- {
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )( ( *iDestinationObjects )[i] );
- if ( destinationInstance )
- {
- if ( destinationInstance->HasEmbeddedWithId( aDestinationId ) ||
- ( destinationInstance->GetId() == aEmbeddedDestinationId &&
- destinationInstance->HasEmbedded() ) )
- {
- result = ETrue;
- break;
- }
- }
- }
-
- OstTraceFunctionExit0( CCMMSESSION_EMBEDDEDDESTINATIONCONFLICTS_EXIT );
- return result;
- }
-
-// ---------------------------------------------------------------------------
-// After update to database, refresh temporary ID to real ID if necessary and
-// refresh status information for any related handles for all client sessions.
-// ---------------------------------------------------------------------------
-//
-void CCmmSession::RefreshHandlesForAllSessions( const TCmmIdStruct& aIdStruct )
- {
- OstTraceFunctionEntry0( CCMMSESSION_REFRESHHANDLESFORALLSESSIONS_ENTRY );
-
- // If the ID structure contains a temporary ID, we need to update the
- // temporary ID to the real ID for all relevant handles in this session and
- // cache.
- if ( aIdStruct.iTemporaryId )
- {
- // Real ID tells if this is a destination or connection method.
-
- if ( aIdStruct.iRealId < KCmmConnMethodIdIntervalMax )
- {
- // Connection method. Need to iterate through all destination and
- // connection method handles.
-
- // Update the ID of the connection method on session side.
- for ( TInt i = 0; i < iConnMethodObjects->Count(); i++ )
- {
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )( ( *iConnMethodObjects )[i] );
- if ( connMethodInstance &&
- connMethodInstance->GetId() == aIdStruct.iTemporaryId )
- {
- connMethodInstance->SetId( aIdStruct.iRealId ); //TODO, need to set ID inside records?
- break; // Can only be 1 match.
- }
- }
- // Update the ID of the connection method in cache side also.
- iCache.RefreshConnMethodId( aIdStruct );
-
- // Iterate all destinations. If the connection method is in them,
- // update the ID to real ID.
- for ( TInt i = 0; i < iDestinationObjects->Count(); i++ )
- {
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )( ( *iDestinationObjects )[i] );
- if ( destinationInstance )
- {
- destinationInstance->RefreshConnMethodId( aIdStruct );
- }
- }
- }
- else
- {
- // Destination. Need to iterate through all destination handles.
- for ( TInt i = 0; i < iDestinationObjects->Count(); i++ )
- {
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )( ( *iDestinationObjects )[i] );
- if ( destinationInstance &&
- destinationInstance->GetId() == aIdStruct.iTemporaryId )
- {
- destinationInstance->SetId( aIdStruct.iRealId );
- break; // Can only be 1 match.
- }
- }
- // Update the ID of the destination in cache side also.
- iCache.RefreshDestinationId( aIdStruct );
- }
- }
-
- // Update status information for all related destination/connection method
- // handles in all client sessions.
- iServer.RefreshHandlesForAllSessions( aIdStruct.iRealId );
-
- OstTraceFunctionExit0( CCMMSESSION_REFRESHHANDLESFORALLSESSIONS_EXIT );
- }
-
-// ---------------------------------------------------------------------------
-// Removes a connection method from any open destination handle in this
-// session.
-// ---------------------------------------------------------------------------
-//
-void CCmmSession::RemoveConnMethodFromDestinationHandles(
- const TUint32 aConnMethodId )
- {
- OstTraceFunctionEntry0( CCMMSESSION_REMOVECONNMETHODFROMDESTINATIONHANDLES_ENTRY );
-
- for ( TInt i = 0; i < iDestinationObjects->Count(); i++ )
- {
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )( ( *iDestinationObjects )[i] );
- if ( destinationInstance )
- {
- for ( TInt j = 0; j < destinationInstance->iConnMethodItemArray.Count(); j++ )
- {
- if ( destinationInstance->iConnMethodItemArray[j].iId == aConnMethodId )
- {
- destinationInstance->iConnMethodItemArray.Remove( j );
- break;
- }
- }
- }
- }
-
- OstTraceFunctionExit0( CCMMSESSION_REMOVECONNMETHODFROMDESTINATIONHANDLES_EXIT );
- }
-
-// ---------------------------------------------------------------------------
-// Notify this session destination/connection method handles about an
-// updated/deleted destination/connection method.
-// ---------------------------------------------------------------------------
-//
-void CCmmSession::RefreshHandles( const TUint32 aId ) const
- {
- OstTraceFunctionEntry0( CCMMSESSION_REFRESHHANDLES_ENTRY );
-
- // Destination or connection method.
- if ( aId < KCmmConnMethodIdIntervalMax )
- {
- // Connection method.
- for ( TInt i = 0; i < iConnMethodObjects->Count(); i++ )
- {
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )( ( *iConnMethodObjects )[i] );
- if ( connMethodInstance && connMethodInstance->GetId() == aId )
- {
- connMethodInstance->SetStatus( ECmmConnMethodStatusChanged );
- }
- }
- }
- else
- {
- // Destination.
- for ( TInt i = 0; i < iDestinationObjects->Count(); i++ )
- {
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )( ( *iDestinationObjects )[i] );
- if ( destinationInstance && destinationInstance->GetId() == aId )
- {
- destinationInstance->SetStatus( ECmmDestinationStatusChanged ); //TODO, any record status need be set?
- }
- }
- }
-
- OstTraceFunctionExit0( CCMMSESSION_REFRESHHANDLES_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetBearerInfoIntL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetBearerInfoIntL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETBEARERINFOINTL_ENTRY );
-
- TUint32 bearerType( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- TUint32 result = iCache.GetBearerInfoIntL( bearerType, attribute );
- TPckg<TUint32> resultPckg( result );
- aMessage.WriteL( 2, resultPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETBEARERINFOINTL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetBearerInfoBoolL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetBearerInfoBoolL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETBEARERINFOBOOLL_ENTRY );
-
- TUint32 bearerType( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- TBool result = iCache.GetBearerInfoBoolL( bearerType, attribute );
- TPckg<TBool> resultPckg( result );
- aMessage.WriteL( 2, resultPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETBEARERINFOBOOLL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetBearerInfoStringL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetBearerInfoStringL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETBEARERINFOSTRINGL_ENTRY );
-
- TUint32 bearerType( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- HBufC* result = iCache.GetBearerInfoStringL( bearerType, attribute );
- if ( !result )
- {
- OstTraceFunctionExit0( CCMMSESSION_GETBEARERINFOSTRINGL_EXIT );
- return;
- }
- CleanupStack::PushL( result );
-
- TInt bufferLen = aMessage.GetDesMaxLength( 2 );
- if ( result->Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- TPtrC resultPtr = result->Des();
- aMessage.WriteL( 2, resultPtr );
- CleanupStack::PopAndDestroy( result );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETBEARERINFOSTRINGL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetBearerInfoString8L
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetBearerInfoString8L( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETBEARERINFOSTRING8L_ENTRY );
-
- TUint32 bearerType( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- HBufC8* result = iCache.GetBearerInfoString8L( bearerType, attribute );
- if ( !result )
- {
- OstTraceFunctionExit0( CCMMSESSION_GETBEARERINFOSTRING8L_EXIT );
- return;
- }
- CleanupStack::PushL( result );
-
- TInt bufferLen = aMessage.GetDesMaxLength( 2 );
- if ( result->Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- TPtrC8 resultPtr = result->Des();
- aMessage.WriteL( 2, resultPtr );
- CleanupStack::PopAndDestroy( result );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETBEARERINFOSTRING8L_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetConnMethodInfoIntL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodInfoIntL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODINFOINTL_ENTRY );
-
- TUint32 cmId( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- TUint32 result = iCache.GetConnectionMethodInfoIntL( cmId, attribute );
- TPckg<TUint32> resultPckg( result );
- aMessage.WriteL( 2, resultPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODINFOINTL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetConnMethodInfoBoolL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodInfoBoolL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODINFOBOOLL_ENTRY );
-
- TUint32 cmId( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- TBool result = iCache.GetConnectionMethodInfoBoolL( cmId, attribute );
- TPckg<TBool> resultPckg( result );
- aMessage.WriteL( 2, resultPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODINFOBOOLL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetConnMethodInfoStringL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodInfoStringL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODINFOSTRINGL_ENTRY );
-
- TUint32 cmId( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- HBufC* result = iCache.GetConnectionMethodInfoStringL( cmId, attribute );
- if ( !result )
- {
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODINFOSTRINGL_EXIT );
- return;
- }
- CleanupStack::PushL( result );
-
- TInt bufferLen = aMessage.GetDesMaxLength( 2 );
- if ( result->Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- TPtrC resultPtr = result->Des();
- aMessage.WriteL( 2, resultPtr );
- CleanupStack::PopAndDestroy( result );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETCONNMETHODINFOSTRINGL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetConnMethodInfoString8L
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodInfoString8L( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODINFOSTRING8L_ENTRY );
-
- TUint32 cmId( aMessage.Int0() );
- TUint32 attribute( aMessage.Int1() );
-
- HBufC8* result = iCache.GetConnectionMethodInfoString8L( cmId, attribute );
- if ( !result )
- {
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODINFOSTRING8L_EXIT );
- return;
- }
- CleanupStack::PushL( result );
-
- TInt bufferLen = aMessage.GetDesMaxLength( 2 );
- if ( result->Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- TPtrC8 resultPtr = result->Des();
- aMessage.WriteL( 2, resultPtr );
- CleanupStack::PopAndDestroy( result );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETCONNMETHODINFOSTRING8L_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetConnMethodArrayL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodArrayL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODARRAYL_ENTRY );
-
- // Read attribute flags from client request.
- TPckgBuf<TCmmIpcStructGetConnMethods> parametersPckg;
- aMessage.ReadL( 0, parametersPckg );
- TCmmIpcStructGetConnMethods attributes = parametersPckg();
-
- // Create connection method ID array.
- RArray<TUint32> cmArray;
- CleanupClosePushL( cmArray );
- iCache.GetAllConnMethodsL( cmArray, attributes.iCheckBearerType );
-
- // Check if only legacy connection methods are needed.
- if ( attributes.iLegacyOnly )
- {
- // Remove all referenced connection methods.
- for ( TInt i = cmArray.Count() - 1; i >= 0; i-- )
- {
- if ( iCache.DestinationsContainingConnMethod( cmArray[i] ) )
- {
- cmArray.Remove( i );
- }
- }
- }
-
- // EasyWLAN handling.
- if ( !attributes.iEasyWlan )
- {
- // If there is an EasyWLAN IAP, the ID needs to be removed from the array.
- TUint32 easyWlanId = iCache.EasyWlanIdL();
- if ( easyWlanId != 0 )
- {
- TInt index = cmArray.Find( easyWlanId );
- if ( index != KErrNotFound )
- {
- cmArray.Remove( index );
- }
- }
- }
-
- // Check connection method ID count.
- TInt connMethodCount = cmArray.Count();
- if ( connMethodCount > aMessage.GetDesMaxLengthL( 2 ) )
- {
- // Client buffer is too small to contain all the informarmation. Return
- // without any answer and the client side will ask again using a bigger
- // buffer.
- CleanupStack::PopAndDestroy( &cmArray );
- return;
- }
-
- TPckg<TInt> countPckg( connMethodCount );
- aMessage.WriteL( 1, countPckg );
-
- if ( connMethodCount == 0 )
- {
- CleanupStack::PopAndDestroy( &cmArray );
- return;
- }
-
- // Write connection method IDs to client.
- HBufC8* idBuf = HBufC8::NewLC( connMethodCount );
- TPtr8 bufPtr( idBuf->Des() );
- for ( TInt i = 0; i < connMethodCount; i++ )
- {
- bufPtr.Append( (TUint8)( cmArray[i] & 0x000000FF ) );
- }
- aMessage.WriteL( 2, bufPtr );
-
- CleanupStack::PopAndDestroy( idBuf );
- CleanupStack::PopAndDestroy( &cmArray );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETCONNMETHODARRAYL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetAllDestinationsL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetAllDestinationsL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETALLDESTINATIONSL_ENTRY );
-
- TInt destCount = iCache.GetDestinationCount();
- if ( destCount > aMessage.GetDesMaxLengthL( 1 ) )
- {
- // Client buffer is too small to contain all the informarmation. Return
- // without any answer and the client side will ask again using a bigger
- // buffer.
- return;
- }
-
- // Write the destination count to client.
- TPckg<TInt> countPckg( destCount );
- aMessage.WriteL( 0, countPckg );
-
- if ( destCount == 0 )
- {
- return;
- }
-
- // Get the destination IDs from database cache.
- RArray<TUint32> destArray;
- CleanupClosePushL( destArray );
- iCache.GetDestinationsL( destArray );
-
- HBufC16* idBuf = HBufC16::NewLC( destCount );
- TPtr16 bufPtr( idBuf->Des() );
- for ( TInt i = 0; i < destCount; i++ )
- {
- bufPtr.Append( destArray[i] );
- }
-
- // Write the destination IDs to client.
- aMessage.WriteL( 1, bufPtr );
-
- CleanupStack::PopAndDestroy( idBuf );
- CleanupStack::PopAndDestroy( &destArray );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETALLDESTINATIONSL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetEasyWLANIdL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetEasyWLANIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETEASYWLANIDL_ENTRY );
-
- TUint32 id = iCache.EasyWlanIdL();
- TPckg<TUint32> idPckg( id );
- aMessage.WriteL( 0, idPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETEASYWLANIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetSupportedBearersL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetSupportedBearersL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETSUPPORTEDBEARERSL_ENTRY );
-
- // Get the supported bearer types.
- RArray<TUint32> bearerArray;
- CleanupClosePushL( bearerArray );
- iServer.CmManager()->SupportedBearersL( bearerArray );
-
- // Write bearer count to client.
- TInt bearerCount( bearerArray.Count() );
- TInt neededBufferSize( bearerCount * sizeof( TUint32 ) );
- TPckg<TInt> countPckg( bearerCount );
- aMessage.WriteL( 0, countPckg );
-
- // Check the client buffer size.
- if ( neededBufferSize > aMessage.GetDesMaxLengthL( 1 ) || bearerCount == 0 )
- {
- // Client buffer is too small to contain all the information. Return
- // with only the bearer count information and the client side will ask
- // again using a big enough buffer.
- CleanupStack::PopAndDestroy( &bearerArray );
- return;
- }
-
- // Add the bearer types into a buffer.
- HBufC8* bearerBuf = HBufC8::NewLC( neededBufferSize );
- TPtr8 ptr( bearerBuf->Des() );
- for ( TInt i = 0; i < bearerCount; i++ )
- {
- TUint32 a( bearerArray[i] );
- ptr.Append( (TUint8*)&a, 4 );
- }
-
- // Write the bearer types to client.
- aMessage.WriteL( 1, ptr );
-
- CleanupStack::PopAndDestroy( bearerBuf );
- CleanupStack::PopAndDestroy( &bearerArray );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETSUPPORTEDBEARERSL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetUncategorizedIconL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetUncategorizedIconL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETUNCATEGORIZEDICONL_ENTRY );
-
- HBufC* result = KCmmUncategorizedIconName().AllocLC();
-
- TInt bufferLen = aMessage.GetDesMaxLength( 0 );
- if ( result->Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- TPtrC resultPtr = result->Des();
- aMessage.WriteL( 0, resultPtr );
- CleanupStack::PopAndDestroy( result );
-
- OstTraceFunctionExit0( CCMMSESSION_GETUNCATEGORIZEDICONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::ReadDefaultConnectionL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::ReadDefaultConnectionL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_READDEFAULTCONNECTIONL_ENTRY );
-
- // Default connection is now simply the internet destination.
- TCmDefConnValue defaultConnection;
- defaultConnection.iType = ECmDefConnDestination;
- defaultConnection.iId = 0;
-
- iCache.InternetDestinationIdL( defaultConnection.iId );
- if ( defaultConnection.iId == 0 )
- {
- User::Leave( KErrNotFound );
- }
-
- TPckgBuf<TCmDefConnValue> dcPckgBuf( defaultConnection );
- aMessage.WriteL( 0, dcPckgBuf );
-
- OstTraceFunctionExit0( CCMMSESSION_READDEFAULTCONNECTIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::ReadGenConnSettingsL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::ReadGenConnSettingsL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_READGENCONNSETTINGSL_ENTRY );
-
- TCmGenConnSettings genConnSettings;
- iCache.ReadGenConnSettingsL( genConnSettings );
-
- TPckgBuf<TCmGenConnSettings> genConnSettingsPckgBuf( genConnSettings );
- aMessage.WriteL( 0, genConnSettingsPckgBuf );
-
- OstTraceFunctionExit0( CCMMSESSION_READGENCONNSETTINGSL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::WriteGenConnSettingsL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::WriteGenConnSettingsL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_WRITEGENCONNSETTINGSL_ENTRY );
-
- // Read data from client request.
- TPckgBuf<TCmGenConnSettings> genConnSettingsPckgBuf;
- aMessage.ReadL( 0, genConnSettingsPckgBuf );
- TCmGenConnSettings genConnSettings = genConnSettingsPckgBuf();
-
- iCache.WriteGenConnSettingsL( genConnSettings );
-
- OstTraceFunctionExit0( CCMMSESSION_WRITEGENCONNSETTINGSL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetBearerPriorityArrayL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetBearerPriorityArrayL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETBEARERPRIORITYARRAYL_ENTRY );
-
- const TInt maxLength( aMessage.GetDesMaxLengthL( 0 ) );
- if ( maxLength < 2 )
- {
- // Minimum length of 2 is needed to store count and needed length.
- User::Leave( KErrArgument );
- }
-
- RPointerArray<CCmmBearerPriority> bearerPriorityArray;
- CmmCleanupResetAndDestroyPushL( bearerPriorityArray );
-
- iCache.CopyBearerPriorityArrayL( bearerPriorityArray );
- const TInt bearerCountInArray( bearerPriorityArray.Count() );
- TInt bearerCount( bearerCountInArray );
-
- TInt maxBufLen( 2 );
- // Check the length needed for serializing.
- for ( TInt i = 0; i < bearerCountInArray; i++ )
- {
- // Skip if service type is not valid.
- if ( bearerPriorityArray[i]->ServiceType() &&
- bearerPriorityArray[i]->ServiceType()->Length() > 0 )
- {
- maxBufLen += KCmmBearerPriorityHeaderLength; // Priorities and servicetype length.
- maxBufLen += bearerPriorityArray[i]->ServiceType()->Length();
- }
- else
- {
- bearerCount--;
- }
- }
-
- // If given buffer is shorter than needed, just write count and needed length.
- if ( maxBufLen > maxLength )
- {
- HBufC* buffer = HBufC::NewLC( KCmmDefaultBearerPriorityArraySize );
- TPtr bufferPtr( buffer->Des() );
-
- bufferPtr.Append( bearerCount );
- bufferPtr.Append( maxBufLen );
- aMessage.WriteL( 0, bufferPtr );
-
- CleanupStack::PopAndDestroy( buffer );
- CleanupStack::PopAndDestroy( &bearerPriorityArray );
- OstTraceFunctionExit0( CCMMSESSION_GETBEARERPRIORITYARRAYL_EXIT );
- return;
- }
-
- // Add needed buffer + space for bearerCount and maxlength.
- HBufC* buffer = HBufC::NewLC( maxBufLen );
- TPtr bufferPtr( buffer->Des() );
-
- // Write count and bufmaxLen.
- bufferPtr.Append( bearerCount );
- bufferPtr.Append( maxBufLen );
-
- for ( TInt i = 0; i < bearerCountInArray; i++ )
- {
- // Skip if service type is not valid.
- if ( bearerPriorityArray[i]->ServiceType() &&
- bearerPriorityArray[i]->ServiceType()->Length() > 0 )
- {
- TUint32 priority = bearerPriorityArray[i]->Priority();
- TUint32 uiPriority = bearerPriorityArray[i]->UiPriority();
- const HBufC* serviceType = bearerPriorityArray[i]->ServiceType();
-
- bufferPtr.Append( priority >> KBitsInTwoBytes );
- bufferPtr.Append( priority & 0x0000FFFF );
- bufferPtr.Append( uiPriority >> KBitsInTwoBytes );
- bufferPtr.Append( uiPriority & 0x0000FFFF );
-
- const TInt stringLength = serviceType->Length();
- bufferPtr.Append( stringLength );
- bufferPtr.Append( *serviceType );
- }
- }
- aMessage.WriteL( 0, bufferPtr );
-
- CleanupStack::PopAndDestroy( buffer );
- CleanupStack::PopAndDestroy( &bearerPriorityArray );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETBEARERPRIORITYARRAYL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::UpdateBearerPriorityArrayL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::UpdateBearerPriorityArrayL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_UPDATEBEARERPRIORITYARRAYL_ENTRY );
-
- // Check the disk space.
- if ( CheckSpaceBelowCriticalLevelL() )
- {
- User::Leave( KErrDiskFull );
- }
-
- HBufC* bearerPriorityBuf = HBufC::NewLC( aMessage.GetDesMaxLengthL( 0 ) );
- TPtr bearerPriorityBufPtr( bearerPriorityBuf->Des() );
-
- aMessage.ReadL( 0, bearerPriorityBufPtr );
-
- const TInt bearerCount = bearerPriorityBufPtr[0];
- if ( ( bearerCount < 1 ) || ( aMessage.GetDesMaxLengthL( 0 ) < 2 ) )
- {
- User::Leave( KErrArgument );
- }
-
- RPointerArray<CCmmBearerPriority> bearerPriorityArray;
- CmmCleanupResetAndDestroyPushL( bearerPriorityArray );
-
- TInt position( 2 ); // Start of first priority item.
- for ( TInt i = 0; i < bearerCount; i++ )
- {
- TUint32 priority;
- TUint32 uiPriority;
- priority = bearerPriorityBufPtr[position] << KBitsInTwoBytes;
- position++;
- priority += bearerPriorityBufPtr[position];
- position++;
- uiPriority = bearerPriorityBufPtr[position] << KBitsInTwoBytes;
- position++;
- uiPriority += bearerPriorityBufPtr[position];
- position++;
- const TInt stringLength = bearerPriorityBufPtr[position];
- position++;
- if ( stringLength <= 0 )
- {
- User::Leave( KErrArgument );
- }
- else
- {
- HBufC* serviceName = HBufC::NewLC( stringLength );
- serviceName->Des().Append( &( bearerPriorityBufPtr[position] ), stringLength );
- position += stringLength;
-
- TPtrC tempServiceType( serviceName->Des() );
- CCmmBearerPriority* item = CCmmBearerPriority::NewLC(
- tempServiceType,
- priority,
- uiPriority );
- bearerPriorityArray.AppendL( item );
- CleanupStack::Pop( item );
-
- CleanupStack::PopAndDestroy( serviceName );
- }
- }
-
- // Update bearer priority array
- iCache.UpdateBearerPriorityArrayL( bearerPriorityArray );
-
- CleanupStack::PopAndDestroy( &bearerPriorityArray );
- CleanupStack::PopAndDestroy( bearerPriorityBuf );
-
- OstTraceFunctionExit0( CCMMSESSION_UPDATEBEARERPRIORITYARRAYL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Copies a connection method into a destination. If the connection method is
-// in any other destination, it becomes shared. Calls update on the target
-// destination.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CopyConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_COPYCONNMETHODL_ENTRY );
-
- // Check the disk space.
- if ( CheckSpaceBelowCriticalLevelL() )
- {
- User::Leave( KErrDiskFull );
- }
-
- CCmmDestinationInstance* destination =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int0() );
- CCmmConnMethodInstance* connMethod =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int1() );
-
- // Can't add an embedded destination this way.
- if ( connMethod->IsEmbeddedDestination() )
- {
- User::Leave( KErrArgument );
- }
-
- // Check the protection level of the destination.
- // And based on that check the needed capabilities from the client.
- CMManager::TProtectionLevel protLevel( CMManager::EProtLevel0 );
- destination->GetProtectionL( protLevel );
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- if ( protLevel == CMManager::EProtLevel1 )
- {
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- }
-
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
-
- // Add connection method into destination.
- TInt index = destination->AddConnMethodL( *connMethod );
-
- // Update destination into database.
- destination->UpdateL();
-
- // Write the connection method index (priority) inside the destination to client.
- TPckg<TInt> indexPckg( index );
- aMessage.WriteL( 2, indexPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_COPYCONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Moves a connection method from one destination to another. Calls update on
-// both the source and target destinations (which also updates the connection
-// method).
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::MoveConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_MOVECONNMETHODL_ENTRY );
-
- // Check the disk space.
- if ( CheckSpaceBelowCriticalLevelL() )
- {
- User::Leave( KErrDiskFull );
- }
-
- // Read data from client request.
- TPckgBuf<TCmmIpcStructMoveConnMethod> attributesPckg;
- aMessage.ReadL( 0, attributesPckg );
- TCmmIpcStructMoveConnMethod attributes = attributesPckg();
-
- CCmmDestinationInstance* sourceDestination =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( attributes.iSourceDestHandle );
- CCmmDestinationInstance* targetDestination =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( attributes.iTargetDestHandle );
- CCmmConnMethodInstance* connMethod =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( attributes.iConnMethodHandle );
- TUint32 connMethodId( connMethod->GetId() );
-
- // Can't add an embedded destination this way.
- if ( connMethod->IsEmbeddedDestination() )
- {
- User::Leave( KErrArgument );
- }
- // Check if the connection method is in the source destination.
- if ( !sourceDestination->ValidConnMethodIdInDestinationIncludeEmbedded( connMethodId ) )
- {
- User::Leave( KErrNotFound );
- }
- // Check if the connection method is already in the target destination.
- if ( targetDestination->ValidConnMethodIdInDestinationIncludeEmbedded( connMethodId ) )
- {
- User::Leave( KErrAlreadyExists );
- }
- // Check if the connection method can be removed from the source destination.
- if ( sourceDestination->ConnMethodInDestinationButLocked( connMethodId ) )
- {
- User::Leave( KErrLocked );
- }
- // Check that the connection method is not in use by an active connection.
- if ( iCache.CheckIfCmConnected( connMethodId ) )
- {
- User::Leave( KErrInUse );
- }
-
- // Check the protection level of the source and target destination.
- // And based on those check the needed capabilities from the client.
- TBool protectionExists( EFalse );
- CMManager::TProtectionLevel protLevelSource( CMManager::EProtLevel0 );
- sourceDestination->GetProtectionL( protLevelSource );
- if ( protLevelSource == CMManager::EProtLevel1
- || protLevelSource == CMManager::EProtLevel3 )
- {
- protectionExists = ETrue;
- }
-
- // If source destination is not protected check the target destination.
- if ( !protectionExists )
- {
- CMManager::TProtectionLevel protLevelTarget( CMManager::EProtLevel0 );
- targetDestination->GetProtectionL( protLevelTarget );
- if ( protLevelTarget == CMManager::EProtLevel1 )
- {
- protectionExists = ETrue;
- }
- }
-
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- if ( protectionExists )
- {
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- }
-
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
-
- // Add connection method into target destination and update it.
- attributesPckg().iIndex = targetDestination->AddConnMethodL( *connMethod );
- targetDestination->UpdateL();
-
- // Remove connection method from source destination and update it.
- sourceDestination->RemoveConnMethodFromDestinationL( *connMethod, EFalse ); // EFalse to not check connected state again.
- sourceDestination->UpdateL();
-
- // Write the index (priority) back to client.
- aMessage.WriteL( 0, attributesPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_MOVECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Remove a connection method froma destination. Does not call update on the
-// affected destination.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::RemoveConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_REMOVECONNMETHODL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int0() );
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int1() );
-
- // Check the protection level of the destination.
- // And based on that check the needed capabilities from the client.
- CMManager::TProtectionLevel protLevel( CMManager::EProtLevel0 );
- destinationInstance->GetProtectionL( protLevel );
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- if ( protLevel == CMManager::EProtLevel1 || protLevel == CMManager::EProtLevel3 )
- {
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- }
-
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
-
- destinationInstance->RemoveConnMethodFromDestinationL( *connMethodInstance );
- destinationInstance->UpdateL();
-
- OstTraceFunctionExit0( CCMMSESSION_REMOVECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Removes a connection method from every destination and make it uncategorized.
-// Updates any destination that contains the connection method.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::RemoveAllReferencesL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_REMOVEALLREFERENCESL_ENTRY );
-
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
-
- TBool capabilityCheckNeeded( EFalse );
- iCache.CheckIfConnMethodBelongsToProtectedDestinationL(
- *connMethodInstance,
- capabilityCheckNeeded );
- if ( capabilityCheckNeeded )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- iCache.CheckIfConnMethodReferencesCanBeRemovedL( *connMethodInstance );
- iCache.RemoveAllReferencesToConnMethodL( *connMethodInstance );
-
- OstTraceFunctionExit0( CCMMSESSION_REMOVEALLREFERENCESL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::ServiceDestinationL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::ServiceDestinationL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SERVICEDESTINATIONL_ENTRY );
-
- switch ( aMessage.Function() )
- {
- case EDestGetDestination:
- {
- GetDestinationL( aMessage );
- }
- break;
- case EDestRefresh:
- {
- RefreshDestinationL( aMessage );
- }
- break;
- case EDestCreateDestinationWithName:
- {
- CreateDestinationWithNameL( aMessage );
- }
- break;
- case EDestCreateDestinationWithNameAndId:
- {
- CreateDestinationWithNameAndIdL( aMessage );
- }
- break;
- case EDestCloseDestination:
- {
- CloseDestination( aMessage );
- }
- break;
- case EDestGetConnMethodCount:
- {
- GetConnectionMehodCountL( aMessage );
- }
- break;
- case EDestGetConnMethodPriority:
- {
- GetConnMethodPriorityL( aMessage );
- }
- break;
- case EDestGetName:
- {
- GetDestinationNameL( aMessage );
- }
- break;
- case EDestGetId:
- {
- GetDestinationIdL( aMessage );
- }
- break;
- case EDestGetElementId:
- {
- GetDestinationElementIdL( aMessage );
- }
- break;
- case EDestMetadata:
- {
- GetDestinationMetadataL( aMessage );
- }
- break;
- case EDestGetProtectionLevel:
- {
- GetDestinationProtectionLevelL( aMessage );
- }
- break;
- case EDestIsConnected:
- {
- IsDestinationConnectedL( aMessage );
- }
- break;
- case EDestIsHidden:
- {
- IsDestinationHiddenL( aMessage );
- }
- break;
- case EDestIsEqual:
- {
- DestinationIsEqualL( aMessage );
- }
- break;
- case EDestGetIcon:
- {
- GetDestinationIconL( aMessage );
- }
- break;
- case EDestAddConnMethod:
- {
- DestAddConnMethodL( aMessage );
- }
- break;
- case EDestAddEmbeddedDestination:
- {
- DestAddEmbeddedDestinationL( aMessage );
- }
- break;
- case EDestDeleteConnMethod:
- {
- DestDeleteConnMethodL( aMessage );
- }
- break;
- case EDestRemoveConnMethod:
- {
- DestRemoveConnMethodL( aMessage );
- }
- break;
- case EDestModifyPriority:
- {
- ModifyConnMethodPriorityL( aMessage );
- }
- break;
- case EDestSetName:
- {
- SetDestinationNameL( aMessage );
- }
- break;
- case EDestSetMetadata:
- {
- SetDestinationMetadataL( aMessage );
- }
- break;
- case EDestSetProtection:
- {
- SetDestinationProtectionL( aMessage );
- }
- break;
- case EDestSetHidden:
- {
- SetDestinationHiddenL( aMessage );
- }
- break;
- case EDestUpdate:
- {
- UpdateDestinationL( aMessage );
- }
- break;
- case EDestDelete:
- {
- DeleteDestinationL( aMessage );
- }
- break;
- case EDestSetIcon:
- {
- SetDestinationIconL( aMessage );
- }
- break;
- default:
- {
- User::Leave( KErrNotSupported );
- }
- break;
- }
-
- OstTraceFunctionExit0( CCMMSESSION_SERVICEDESTINATIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetDestinationL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetDestinationL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONL_ENTRY );
-
- // Structure:
- // - Check arguments.
- // - Create session instance.
- // - Ask cache to open/create target and put data to session instance.
- // - Create subsession and complete message.
-
- // API side checks that ID is between 0x1000 - 0x1100, and converts if necessary.
- TUint32 destinationId( aMessage.Int0() );
-
- // Check that the ID is in valid range.
- if ( destinationId <= KCmDefaultDestinationAPTagId ||
- destinationId >= KCmMaxDestinationAPTagId )
- {
- User::Leave( KErrArgument );
- }
-
- // Check if a destination with given ID exists.
- if ( !iCache.DestinationExistsWithId( destinationId ) )
- {
- User::Leave( KErrNotFound );
- }
-
- // If this session already has a destination with matching ID open, provide
- // the client with a reference to the already opened handle.
- CCmmDestinationInstance* destinationInstance = FindDestinationInstanceById( destinationId );
- if ( destinationInstance )
- {
- TPckg<TInt> existingHandlePckg( destinationInstance->GetHandle() );
- aMessage.WriteL( 1, existingHandlePckg );
- User::Leave( KErrAlreadyExists );
- }
- destinationInstance = NULL;
- TPckg<TInt> existingHandlePckg( 0 );
- aMessage.WriteL( 1, existingHandlePckg );
-
- destinationInstance = CCmmDestinationInstance::NewLC( this, &iCache );
-
- // Cache will open a handle to the destination if not already open, and
- // copy relevant data into this destination instance.
- iCache.OpenDestinationL( *destinationInstance, destinationId );
-
- iDestinationContainer->AddL( ( CObject* ) destinationInstance );
- TInt handle = iDestinationObjects->AddL( ( CObject* ) destinationInstance );
- destinationInstance->SetHandle( handle );
- CleanupStack::Pop( destinationInstance );
-
- TPckg<TInt> handlePckg( handle );
- TInt err = aMessage.Write( 3, handlePckg );
- if ( err )
- {
- // Removes from object index and destroys the object.
- iDestinationObjects->Remove( handle );
- User::Leave( err );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::RefreshDestinationL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::RefreshDestinationL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_REFRESHDESTINATIONL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- iCache.RefreshDestinationL( *destinationInstance );
-
- OstTraceFunctionExit0( CCMMSESSION_REFRESHDESTINATIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::CreateDestinationWithNameL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CreateDestinationWithNameL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CREATEDESTINATIONWITHNAMEL_ENTRY );
-
- // Structure:
- // - Check arguments.
- // - Create session instance.
- // - Ask cache to open/create target and put data to session instance.
- // - Create subsession and complete message.
-
- // Load and check name.
- TInt destNameLength = aMessage.GetDesLength( 0 );
- if ( destNameLength <= 0 )
- {
- User::Leave( KErrArgument );
- }
-
- HBufC* destinationName = HBufC::NewLC( destNameLength );
- TPtr ptrDestinationName = destinationName->Des();
- aMessage.ReadL( 0, ptrDestinationName );
-
- // Check if a destination with given name exists (or is already created but not yet saved).
- if ( iCache.DestinationExistsWithNameL( *destinationName, 0 ) ||
- iCache.NotSavedDestinationOpenWithNameL( *destinationName, 0 ) )
- {
- User::Leave( KErrAlreadyExists );
- }
-
- CCmmDestinationInstance* destinationInstance = CCmmDestinationInstance::NewLC( this, &iCache );
-
- // Create a temporary ID to be used until a real one is obtained from the database.
- TUint32 temporaryId = iCache.NextFreeTemporaryId();
-
- // Cache will create the destination data structure and copy the relevant
- // data to the session instance.
- iCache.CreateDestinationL( *destinationInstance, *destinationName, temporaryId );
-
- iDestinationContainer->AddL( ( CObject* ) destinationInstance );
- TInt handle = iDestinationObjects->AddL( ( CObject* ) destinationInstance );
- destinationInstance->SetHandle( handle );
- CleanupStack::Pop( destinationInstance );
- CleanupStack::PopAndDestroy( destinationName );
-
- TPckg<TInt> handlePckg( handle );
- TInt err = aMessage.Write( 3, handlePckg );
- if ( err )
- {
- // Removes from object index and destroys the object.
- iDestinationObjects->Remove( handle );
- User::Leave( err );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CREATEDESTINATIONWITHNAMEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::CreateDestinationWithNameAndIdL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CreateDestinationWithNameAndIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CREATEDESTINATIONWITHNAMEANDIDL_ENTRY );
-
- // Structure:
- // - Check arguments.
- // - Create session instance.
- // - Ask cache to open/create target and put data to session instance.
- // - Create subsession and complete message.
-
- // API side checks that ID is between 0x1000 - 0x1100, and converts if necessary.
- TUint32 destinationId( (TUint32)aMessage.Int1() );
-
- // Check that the ID is in valid range.
- if ( destinationId <= KCmDefaultDestinationAPTagId ||
- destinationId >= KCmMaxDestinationAPTagId )
- {
- User::Leave( KErrArgument );
- }
-
- // Check if a destination with given ID exists (or is already created but not saved).
- //TODO, Implement one single method for this check in CCmmCache-class, and call that. CCmmCache::DestinationOpenWithId() can be removed after that.
- if ( iCache.DestinationExistsWithId( destinationId ) || iCache.DestinationOpenWithId( destinationId ) )
- {
- User::Leave( KErrAlreadyExists );
- //TODO: Destination ID is decided based on network record ID. Connection methods also use network records.
- //TODO: Add a check here too see that the necessary network record ID is also available.
- }
-
- // Load and check name.
- TInt destNameLength = aMessage.GetDesLength( 0 );
- if ( destNameLength <= 0 )
- {
- User::Leave( KErrArgument );
- }
-
- HBufC* destinationName = HBufC::NewLC( destNameLength );
-
- TPtr ptrDestinationName = destinationName->Des();
- aMessage.ReadL( 0, ptrDestinationName );
-
- // Check if a destination with given name exists (or is already created but not yet saved).
- if ( iCache.DestinationExistsWithNameL( *destinationName, 0 ) ||
- iCache.NotSavedDestinationOpenWithNameL( *destinationName, 0 ) )
- {
- User::Leave( KErrAlreadyExists );
- }
-
- CCmmDestinationInstance* destinationInstance = CCmmDestinationInstance::NewLC( this, &iCache );
-
- // Cache will create the destination data structure and copy the relevant
- // data to the session instance.
- iCache.CreateDestinationL( *destinationInstance, *destinationName, destinationId );
-
- iDestinationContainer->AddL( ( CObject* ) destinationInstance );
- TInt handle = iDestinationObjects->AddL( ( CObject* ) destinationInstance );
- destinationInstance->SetHandle( handle );
- CleanupStack::Pop( destinationInstance );
- CleanupStack::PopAndDestroy( destinationName );
-
- TPckg<TInt> handlePckg( handle );
- TInt err = aMessage.Write( 3, handlePckg );
- if ( err )
- {
- // Removes from object index and destroys the object.
- iDestinationObjects->Remove( handle );
- User::Leave( err );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CREATEDESTINATIONWITHNAMEANDIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::CloseDestinationL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CloseDestination( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CLOSEDESTINATION_ENTRY );
-
- // Check first that the destination instance exists.
- CObject* destinationObject = iDestinationObjects->At( aMessage.Int3() );
- if ( destinationObject )
- {
- // Destination instance destructor will notify cache.
- iDestinationObjects->Remove( aMessage.Int3() );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CLOSEDESTINATION_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Return the connection method count from the provided destination.
-// Embedded destinations are included.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnectionMehodCountL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNECTIONMEHODCOUNTL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- TInt connMethodCount( destinationInstance->iConnMethodItemArray.Count() ); // Includes embedded destinations.
-
- TPckg<TInt> countPckg( connMethodCount );
- aMessage.WriteL( 0, countPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETCONNECTIONMEHODCOUNTL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetConnMethodPriorityL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodPriorityL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODPRIORITYL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
- TUint32 connMethodId = connMethodInstance->GetId();
-
- TInt index( KErrNotFound );
- for ( TInt i = 0; i < destinationInstance->iConnMethodItemArray.Count(); i++ )
- {
- if ( destinationInstance->iConnMethodItemArray[i].iId == connMethodId )
- {
- // Index in the connection method array is the connection method
- // priority. But priority starts from 1, so adjust by +1.
- index = i + 1;
- break;
- }
- }
-
- // Leave if given connection method is not inside this destination.
- User::LeaveIfError( index );
-
- // Check if the connection method is an embedded destination.
- if ( connMethodInstance->IsEmbeddedDestination() )
- {
- index = CMManager::KDataMobilitySelectionPolicyPriorityWildCard;
- }
-
- // If this is a virtual IAP that doesn't link to an IAP, the priority is wildcard.
- else if ( connMethodInstance->GetBoolAttributeL( CMManager::ECmVirtual ) )
- {
- if ( connMethodInstance->GetIntAttributeL( CMManager::ECmNextLayerIapId ) == 0 )
- {
- index = CMManager::KDataMobilitySelectionPolicyPriorityWildCard;
- }
- }
-
- TUint priority = ( TUint )index;
- TPckg<TUint> priorityPckg( priority );
- aMessage.WriteL( 1, priorityPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODPRIORITYL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetDestinationNameL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetDestinationNameL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONNAMEL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- HBufC* name = destinationInstance->GetLocalisedDestinationNameL();
- CleanupStack::PushL( name );
- TPtrC namePtr( name->Des() );
-
- TInt bufferLen = aMessage.GetDesMaxLength( 0 );
- if ( namePtr.Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- aMessage.WriteL( 0, namePtr );
-
- CleanupStack::PopAndDestroy( name );
-
- OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONNAMEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetDestinationIconL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetDestinationIconL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONICONL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- HBufC* icon = destinationInstance->GetDestinationIconL();
- CleanupStack::PushL( icon );
- TPtrC iconPtr( icon->Des() );
-
- TInt bufferLen = aMessage.GetDesMaxLength( 0 );
- if ( iconPtr.Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- aMessage.WriteL( 0, iconPtr );
- CleanupStack::PopAndDestroy( icon );
-
- OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONICONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetDestinationIdL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetDestinationIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONIDL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- TUint32 id = destinationInstance->GetRecordTagFromApRecordL();
- TPckg<TUint32> idPckg( id );
- aMessage.WriteL( 0, idPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetDestinationElementIdL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetDestinationElementIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONELEMENTIDL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- TUint32 elementId = destinationInstance->GetElementIdL();
- TPckg<TUint32> elementIdPckg( elementId );
- aMessage.WriteL( 0, elementIdPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONELEMENTIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetDestinationMetadataL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetDestinationMetadataL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONMETADATAL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
- CMManager::TSnapMetadataField metadataField =
- ( CMManager::TSnapMetadataField )aMessage.Int0();
-
- TUint32 metadata( 0 );
- destinationInstance->GetMetadataL( metadataField, metadata );
-
- TPckg<TUint32> metadataPckg( metadata );
- aMessage.WriteL( 1, metadataPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONMETADATAL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetDestinationProtectionLevelL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetDestinationProtectionLevelL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETDESTINATIONPROTECTIONLEVELL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- CMManager::TProtectionLevel protLevel( CMManager::EProtLevel0 );
- destinationInstance->GetProtectionL( protLevel );
-
- TPckg<TInt> protLevelPckg( protLevel );
- aMessage.WriteL( 0, protLevelPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETDESTINATIONPROTECTIONLEVELL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::IsDestinationConnectedL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::IsDestinationConnectedL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_ISDESTINATIONCONNECTEDL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- if ( !iCache.DestinationExistsWithId( destinationInstance->GetId() ) )
- {
- User::Leave( KErrNotFound );
- }
-
- TBool isConnected = iCache.DestinationConnectedL( destinationInstance->GetId() );
- TPckg<TBool> isConnectedPckg( isConnected );
- aMessage.WriteL( 0, isConnectedPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_ISDESTINATIONCONNECTEDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::IsDestinationHiddenL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::IsDestinationHiddenL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_ISDESTINATIONHIDDENL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- TUint32 isHiddenMetadata( 0 );
- destinationInstance->GetMetadataL( CMManager::ESnapMetadataHiddenAgent, isHiddenMetadata );
-
- TBool isHidden( EFalse );
- if ( isHiddenMetadata )
- {
- isHidden = ETrue;
- }
-
- TPckg<TBool> isHiddenPckg( isHidden );
- aMessage.WriteL( 0, isHiddenPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_ISDESTINATIONHIDDENL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Checks if the destination given as parameter is equal to this destination
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::DestinationIsEqualL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_DESTINATIONISEQUALL_ENTRY );
-
- CCmmDestinationInstance* dest =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- CCmmDestinationInstance* destToBeCompared =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int0() );
-
- TBool equal( EFalse );
- if ( dest->GetId() == destToBeCompared->GetId() )
- {
- equal = ETrue;
- }
-
- TPckg<TBool> equalPckg( equal );
-
- aMessage.WriteL( 1, equalPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_DESTINATIONISEQUALL_EXIT );
- }
-
-
-// -----------------------------------------------------------------------------
-// Adds a connection method into a destination. Does not add embedded
-// destinations.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::DestAddConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_DESTADDCONNMETHODL_ENTRY );
-
- CCmmDestinationInstance* destination =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destination->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- CCmmConnMethodInstance* connMethod =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
-
- if ( connMethod->IsEmbeddedDestination() )
- {
- User::Leave( KErrArgument );
- }
-
- TInt index = destination->AddConnMethodL( *connMethod );
- TPckg<TInt> indexPckg( index );
- aMessage.WriteL( 1, indexPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_DESTADDCONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Adds a destination into a destination as an embedded destination.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::DestAddEmbeddedDestinationL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_DESTADDEMBEDDEDDESTINATIONL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- CCmmDestinationInstance* embeddedDestination =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int0() );
-
- TInt index = destinationInstance->AddEmbeddedDestinationL( *embeddedDestination );
- TPckg<TInt> indexPckg( index );
- aMessage.WriteL( 1, indexPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_DESTADDEMBEDDEDDESTINATIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::DestDeleteConnMethodL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::DestDeleteConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_DESTDELETECONNMETHODL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
-
- // Check the protection of destination and if protected check the needed
- // capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel3 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- // Check the protection of CM and if protected check the needed
- // capabilities.
- CheckCapabilitiesForProtectedCML( aMessage, connMethodInstance );
-
- destinationInstance->DeleteConnMethodFromDestinationL( *connMethodInstance );
-
- OstTraceFunctionExit0( CCMMSESSION_DESTDELETECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::DestRemoveConnMethodL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::DestRemoveConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_DESTREMOVECONNMETHODL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
-
- // Check the protection of destination and if protected check the needed
- // capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel3 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- destinationInstance->RemoveConnMethodFromDestinationL( *connMethodInstance );
-
- OstTraceFunctionExit0( CCMMSESSION_DESTREMOVECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::ModifyConnMethodPriorityL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::ModifyConnMethodPriorityL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_MODIFYCONNMETHODPRIORITYL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection of destination and if protected check the needed
- // capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel3 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
-
- // Index values start from 0 (0 meaning highest priority).
- TUint index( ( TUint )aMessage.Int1() );
-
- destinationInstance->ModifyConnMethodPriorityL( *connMethodInstance, index );
-
- OstTraceFunctionExit0( CCMMSESSION_MODIFYCONNMETHODPRIORITYL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetDestinationNameL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetDestinationNameL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONNAMEL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check that client does not try to change the name of the Internet Destination.
- TUint32 metadata( 0 );
- destinationInstance->GetMetadataL( CMManager::ESnapMetadataPurpose, metadata );
- if ( metadata == CMManager::ESnapPurposeInternet )
- {
- User::Leave( KErrPermissionDenied );
- }
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel2 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- // Load and check name.
- TInt destNameLength = aMessage.GetDesLength( 0 );
- if ( destNameLength <= 0 )
- {
- User::Leave( KErrArgument ); //TODO, check also max length?
- }
-
- HBufC* newName = HBufC::NewLC( destNameLength );
- TPtr ptrNewName = newName->Des();
- aMessage.ReadL( 0, ptrNewName );
-
- // Check if a destination with given name exists (or is already created but not yet saved).
- if ( iCache.DestinationExistsWithNameL( *newName, destinationInstance->GetId() ) ||
- iCache.NotSavedDestinationOpenWithNameL( *newName, destinationInstance->GetId() ) )
- {
- User::Leave( KErrAlreadyExists );
- }
-
- destinationInstance->SetDestinationNameL( *newName );
-
- CleanupStack::PopAndDestroy( newName );
-
- OstTraceFunctionExit0( CCMMSESSION_SETDESTINATIONNAMEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetDestinationIconL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetDestinationIconL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONICONL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel2 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- // Load and check name.
- TInt destIconNameLength = aMessage.GetDesLength( 0 );
- if ( destIconNameLength < 0 || destIconNameLength > KCmmStringLengthMax )
- {
- User::Leave( KErrArgument );
- }
-
- HBufC* newIconName = HBufC::NewLC( destIconNameLength );
- TPtr ptrNewIconName = newIconName->Des();
- aMessage.ReadL( 0, ptrNewIconName );
-
- destinationInstance->SetDestinationIconL( *newIconName );
- CleanupStack::PopAndDestroy( newIconName );
-
- OstTraceFunctionExit0( CCMMSESSION_SETDESTINATIONICONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetDestinationMetadataL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetDestinationMetadataL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONMETADATAL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel2 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- CMManager::TSnapMetadataField metadataField =
- ( CMManager::TSnapMetadataField )aMessage.Int0();
- TUint32 metadata = aMessage.Int1();
-
- destinationInstance->SetMetadataL( metadataField, metadata );
-
- OstTraceFunctionExit0( CCMMSESSION_SETDESTINATIONMETADATAL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetDestinationProtectionL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetDestinationProtectionL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONPROTECTIONL_ENTRY );
-
- // Check the needed capabilities.
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
- CMManager::TProtectionLevel protLevel =
- ( CMManager::TProtectionLevel )aMessage.Int0();
- destinationInstance->SetProtectionL( protLevel );
-
- OstTraceFunctionExit0( CCMMSESSION_SETDESTINATIONPROTECTIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetDestinationHiddenL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetDestinationHiddenL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETDESTINATIONHIDDENL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel2 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- TBool hidden = aMessage.Int0();
- destinationInstance->SetMetadataL( CMManager::ESnapMetadataHiddenAgent, hidden );
-
- OstTraceFunctionExit0( CCMMSESSION_SETDESTINATIONHIDDENL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::UpdateDestinationL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::UpdateDestinationL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_UPDATEDESTINATIONL_ENTRY );
-
- // Check the disk space.
- if ( CheckSpaceBelowCriticalLevelL() )
- {
- User::Leave( KErrDiskFull );
- }
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection and if protected check the needed capabilities
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel2 ||
- protLevel == CMManager::EProtLevel3 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- destinationInstance->UpdateL();
-
- OstTraceFunctionExit0( CCMMSESSION_UPDATEDESTINATIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::DeleteDestinationL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::DeleteDestinationL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_DELETEDESTINATIONL_ENTRY );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( aMessage.Int3() );
-
- // Check the protection of destination and if protected check the needed
- // capabilities.
- CMManager::TProtectionLevel protLevel =
- destinationInstance->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 ||
- protLevel == CMManager::EProtLevel2 ||
- protLevel == CMManager::EProtLevel3 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- iCache.CheckIfDestinationCanBeDeletedL( *destinationInstance );
- iCache.DeleteDestinationL( *destinationInstance );
-
- // Close the destination handle. Destination instance destructor will
- // notify cache. If the reference count for the cache side handle goes to
- // zero, it will be deleted.
- iDestinationObjects->Remove( aMessage.Int3() );
-
- OstTraceFunctionExit0( CCMMSESSION_DELETEDESTINATIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::ServiceConnMethodL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::ServiceConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SERVICECONNMETHODL_ENTRY );
-
- switch ( aMessage.Function() )
- {
- case ECMCreateConnMethod:
- {
- CreateConnMethodL( aMessage );
- }
- break;
- case ECMUpdate:
- {
- UpdateConnMethodL( aMessage );
- }
- break;
- case ECMCloseConnMethod:
- {
- CloseConnMethod( aMessage ); // Can't leave.
- }
- break;
- case ECMDelete:
- {
- DeleteConnMethodL( aMessage );
- }
- break;
- case ECMGetConnMethodWithId:
- {
- GetConnMethodWithIdL( aMessage );
- }
- break;
- case ECMRefresh:
- {
- RefreshConnMethodL( aMessage );
- }
- break;
- case ECMGetIntAttribute:
- {
- GetIntAttributeL( aMessage );
- }
- break;
- case ECMGetBoolAttribute:
- {
- GetBoolAttributeL( aMessage );
- }
- break;
- case ECMGetStringAttribute:
- {
- GetStringAttributeL( aMessage );
- }
- break;
- case ECMGetString8Attribute:
- {
- GetString8AttributeL( aMessage );
- }
- break;
- case ECMSetIntAttribute:
- {
- SetIntAttributeL( aMessage );
- }
- break;
- case ECMSetBoolAttribute:
- {
- SetBoolAttributeL( aMessage );
- }
- break;
- case ECMSetStringAttribute:
- {
- SetStringAttributeL( aMessage );
- }
- break;
- case ECMSetString8Attribute:
- {
- SetString8AttributeL( aMessage );
- }
- break;
- case ECMCreateConnMethodWithId:
- {
- CreateConnMethodWithIdL( aMessage );
- }
- break;
- case ECMGetConnMethodFromDestWithIndex:
- {
- GetConnMethodFromDestWithIndexL( aMessage );
- }
- break;
- case ECMGetConnMethodFromDestWithId:
- {
- GetConnMethodFromDestWithIdL( aMessage );
- }
- break;
- case ECMCreateConnMethodToDest:
- {
- CreateConnMethodToDestL( aMessage );
- }
- break;
- case ECMCreateConnMethodToDestWithId:
- {
- CreateConnMethodToDestWithIdL( aMessage );
- }
- break;
- case ECMIsEqual:
- {
- CmIsEqualL( aMessage );
- }
- break;
- case ECMCreateCopyOfExisting:
- {
- CreateCopyOfExistingL( aMessage );
- }
- break;
- case EDestGetEmbeddedDestination:
- {
- GetEmbeddedDestinationL( aMessage );
- }
- break;
- default:
- {
- User::Leave( KErrNotSupported );
- }
- }
-
- OstTraceFunctionExit0( CCMMSESSION_SERVICECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Create a new connection method (not embedded destination).
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CreateConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CREATECONNMETHODL_ENTRY );
-
- TUint32 bearerType( aMessage.Int0() );
-
- CCmmConnMethodInstance* connMethodInstance =
- CCmmConnMethodInstance::NewLC( this, &iCache );
- iCache.CreateConnMethodL( *connMethodInstance, NULL, bearerType, 0 );
-
- iConnMethodContainer->AddL( ( CObject* ) connMethodInstance );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) connMethodInstance );
- connMethodInstance->SetHandle( handle );
- CleanupStack::Pop( connMethodInstance );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CREATECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::ConnMethodUpdateL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::UpdateConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_UPDATECONNMETHODL_ENTRY );
-
- // Check the disk space.
- if ( CheckSpaceBelowCriticalLevelL() )
- {
- User::Leave( KErrDiskFull );
- }
-
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- // Check if the Client has capabilities to modify this CM.
- CheckCapabilitiesForProtectedCML( aMessage, connMethodInstance );
-
- connMethodInstance->UpdateL();
-
- OstTraceFunctionExit0( CCMMSESSION_UPDATECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::CloseConnMethod
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CloseConnMethod( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CLOSECONNMETHOD_ENTRY );
-
- // Check first that the connection method instance exists.
- CObject* connMethodObject = iConnMethodObjects->At( aMessage.Int3() );
- if ( connMethodObject )
- {
- // Connection method instance destructor will notify cache.
- iConnMethodObjects->Remove( aMessage.Int3() );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CLOSECONNMETHOD_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::DeleteConnMethodL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::DeleteConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_DELETECONNMETHODL_ENTRY );
-
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- // Embedded destinations cannot be deleted through connection method handle.
- if ( connMethodInstance->IsEmbeddedDestination() )
- {
- User::Leave( KErrNotSupported );
- }
-
- // Check if the Client has capabilities to delete this CM.
- CheckCapabilitiesForProtectedCML( aMessage, connMethodInstance );
-
- iCache.CheckIfConnMethodCanBeDeletedL( *connMethodInstance );
- iCache.DeleteConnMethodL( *connMethodInstance );
- // Ignore the boolean return value. It is always true, or the
- // DeleteL()-call leaves.
-
- // Close the connection method handle. Connection method instance
- // destructor will notify cache. If the reference count for the cache side
- // handle goes to zero, it will be deleted.
- iConnMethodObjects->Remove( aMessage.Int3() );
-
- OstTraceFunctionExit0( CCMMSESSION_DELETECONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetConnMethodWithIdL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodWithIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODWITHIDL_ENTRY );
-
- TUint32 connMethodId = aMessage.Int0();
-
- // If this session already has a connection method with matching id open,
- // provide the client with a reference to the already opened handle.
- CCmmConnMethodInstance* cmInstance = FindConnMethodInstanceById( connMethodId );
- if ( cmInstance )
- {
- // Also check that the connection method exists in database.
- if ( iCache.ConnMethodExistsWithId( connMethodId ) )
- {
- TPckg<TInt> existingHandlePckg( cmInstance->GetHandle() );
- aMessage.WriteL( 1, existingHandlePckg );
- User::Leave( KErrAlreadyExists );
- }
- }
- cmInstance = NULL;
- TPckg<TInt> existingHandlePckg( 0 );
- aMessage.WriteL( 1, existingHandlePckg );
-
- cmInstance = CCmmConnMethodInstance::NewLC( this, &iCache );
- // Will check if connection method ID is valid.
- iCache.OpenConnMethodL( *cmInstance, NULL, connMethodId );
-
- iConnMethodContainer->AddL( ( CObject* ) cmInstance );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) cmInstance );
- cmInstance->SetHandle( handle );
- CleanupStack::Pop( cmInstance );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODWITHIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::RefreshConnMethodL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::RefreshConnMethodL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_REFRESHCONNMETHODL_ENTRY );
-
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- iCache.RefreshConnMethodL( *connMethodInstance );
-
- OstTraceFunctionExit0( CCMMSESSION_REFRESHCONNMETHODL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetIntAttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetIntAttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETINTATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- TUint32 attribute( aMessage.Int0() );
- TUint32 value = cm->GetIntAttributeL( attribute );
-
- TPckg<TUint32> valuePckg( value );
- aMessage.WriteL( 1, valuePckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETINTATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetBoolAttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetBoolAttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETBOOLATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- TUint32 attribute( aMessage.Int0() );
- TBool value = cm->GetBoolAttributeL( attribute );
-
- TPckg<TBool> valuePckg( value );
- aMessage.WriteL( 1, valuePckg );
-
- OstTraceFunctionExit0( CCMMSESSION_GETBOOLATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetStringAttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetStringAttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETSTRINGATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- TUint32 attribute( aMessage.Int0() );
- HBufC* value = cm->GetStringAttributeL( attribute );
- if ( !value )
- {
- OstTraceFunctionExit0( CCMMSESSION_GETSTRINGATTRIBUTEL_EXIT );
- return;
- }
- CleanupStack::PushL( value );
- TPtrC valuePtr = value->Des();
-
- // Check the buffer length of the given buffer.
- TInt bufferLen = aMessage.GetDesMaxLength( 1 );
- if ( valuePtr.Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- aMessage.WriteL( 1, valuePtr );
- CleanupStack::PopAndDestroy( value );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETSTRINGATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::GetString8AttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetString8AttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETSTRING8ATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- TUint32 attribute( aMessage.Int0() );
- HBufC8* value = cm->GetString8AttributeL( attribute );
- if ( !value )
- {
- OstTraceFunctionExit0( CCMMSESSION_GETSTRING8ATTRIBUTEL_EXIT );
- return;
- }
- CleanupStack::PushL( value );
- TPtrC8 valuePtr = value->Des();
-
- // Check the buffer length of the given buffer.
- TInt bufferLen = aMessage.GetDesMaxLength( 1 );
- if ( valuePtr.Length() > bufferLen )
- {
- User::Leave( KErrArgument );
- }
-
- aMessage.WriteL( 1, valuePtr );
- CleanupStack::PopAndDestroy( value );
-
- OstTraceFunctionExit0( DUP1_CCMMSESSION_GETSTRING8ATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetIntAttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetIntAttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETINTATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- // Check the capability needed if protected CM
- // ECapabilityWriteDeviceData is checked earlier already.
- CheckCapabilitiesForProtectedCML( aMessage, cm );
-
- TUint32 attribute( aMessage.Int0() );
- TUint32 value( aMessage.Int1() );
-
- cm->SetIntAttributeL( attribute, value );
-
- OstTraceFunctionExit0( CCMMSESSION_SETINTATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetBoolAttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetBoolAttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETBOOLATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- // Check the capability needed if protected CM
- // ECapabilityWriteDeviceData is checked earlier already.
- CheckCapabilitiesForProtectedCML( aMessage, cm );
-
- TUint32 attribute( aMessage.Int0() );
- TBool value( aMessage.Int1() );
-
- cm->SetBoolAttributeL( attribute, value );
-
- OstTraceFunctionExit0( CCMMSESSION_SETBOOLATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetStringAttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetStringAttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETSTRINGATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- // Check the capability needed if protected CM
- // ECapabilityWriteDeviceData is checked earlier already.
- CheckCapabilitiesForProtectedCML( aMessage, cm );
-
- TUint32 attribute( aMessage.Int0() );
-
- HBufC* value = HBufC::NewLC( aMessage.GetDesLengthL( 1 ) );
- TPtr valuePtr( value->Des() );
- aMessage.ReadL( 1, valuePtr );
-
- cm->SetStringAttributeL( attribute, valuePtr );
-
- CleanupStack::PopAndDestroy( value );
-
- OstTraceFunctionExit0( CCMMSESSION_SETSTRINGATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// CCmmSession::SetString8AttributeL
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::SetString8AttributeL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_SETSTRING8ATTRIBUTEL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- // Check the capability needed if protected CM
- // ECapabilityWriteDeviceData is checked earlier already.
- CheckCapabilitiesForProtectedCML( aMessage, cm );
-
- TUint32 attribute( aMessage.Int0() );
-
- HBufC8* value = HBufC8::NewLC( aMessage.GetDesLengthL( 1 ) );
- TPtr8 valuePtr( value->Des() );
- aMessage.ReadL( 1, valuePtr );
-
- cm->SetString8AttributeL( attribute, valuePtr );
-
- CleanupStack::PopAndDestroy( value );
-
- OstTraceFunctionExit0( CCMMSESSION_SETSTRING8ATTRIBUTEL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Create a new connection method (not embedded destination) with specific ID.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CreateConnMethodWithIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CREATECONNMETHODWITHIDL_ENTRY );
-
- TUint32 bearerType( aMessage.Int0() );
- TUint32 connMethodId = ( aMessage.Int1() );
-
- CCmmConnMethodInstance* connMethod =
- CCmmConnMethodInstance::NewLC( this, &iCache );
- // Will check if ID is available.
- iCache.CreateConnMethodL( *connMethod, NULL, bearerType, connMethodId );
-
- iConnMethodContainer->AddL( ( CObject* ) connMethod );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) connMethod );
- connMethod->SetHandle( handle );
- CleanupStack::Pop( connMethod );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CREATECONNMETHODWITHIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Gets a Connection Method from a Destination with index number.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodFromDestWithIndexL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODFROMDESTWITHINDEXL_ENTRY );
-
- TInt destinationHandle( aMessage.Int0() );
- TInt connMethodIndex( aMessage.Int1() );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( destinationHandle );
-
- // Check index is in range.
- if ( connMethodIndex < 0 ||
- connMethodIndex >= destinationInstance->iConnMethodItemArray.Count() )
- {
- User::Leave( KErrArgument );
- }
- TInt connMethodId( destinationInstance->iConnMethodItemArray[connMethodIndex].iId );
-
- // If this session already has a connection method with matching id open
- // and that connection method correctly belongs to the provided destination,
- // provide the client with a reference to the already opened handle.
- CCmmConnMethodInstance* cmInstance = FindConnMethodInstanceById( connMethodId );
- if ( cmInstance &&
- destinationInstance->ValidConnMethodIdInDestinationIncludeEmbedded( connMethodId ) )
- {
- // Also check that the connection method exists in database.
- if ( iCache.ConnMethodExistsWithId( connMethodId ) ||
- iCache.DestinationExistsWithId( connMethodId ) )
- {
- TPckg<TInt> existingHandlePckg( cmInstance->GetHandle() );
- aMessage.WriteL( 2, existingHandlePckg );
- User::Leave( KErrAlreadyExists );
- }
- }
- cmInstance = NULL;
- TPckg<TInt> existingHandlePckg( 0 );
- aMessage.WriteL( 2, existingHandlePckg );
-
- cmInstance = CCmmConnMethodInstance::NewLC( this, &iCache );
- // Will check if connection method ID is valid.
- iCache.OpenConnMethodL( *cmInstance, destinationInstance, connMethodId );
-
- iConnMethodContainer->AddL( ( CObject* ) cmInstance );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) cmInstance );
- cmInstance->SetHandle( handle );
- CleanupStack::Pop( cmInstance );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODFROMDESTWITHINDEXL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Gets a Connection Method from a Destination with Id.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetConnMethodFromDestWithIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETCONNMETHODFROMDESTWITHIDL_ENTRY );
-
- TInt destinationHandle( aMessage.Int0() );
- TUint32 connMethodId( aMessage.Int1() );
-
- CCmmDestinationInstance* destinationInstance =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( destinationHandle );
-
- // If this session already has a connection method with matching id open
- // and that connection method correctly belongs to the provided destination,
- // provide the client with a reference to the already opened handle.
- CCmmConnMethodInstance* cmInstance = FindConnMethodInstanceById( connMethodId );
- if ( cmInstance &&
- destinationInstance->ValidConnMethodIdInDestinationIncludeEmbedded( connMethodId ) )
- {
- // Also check that the connection method exists in database.
- if ( iCache.ConnMethodExistsWithId( connMethodId ) ||
- iCache.DestinationExistsWithId( connMethodId ) )
- {
- TPckg<TInt> existingHandlePckg( cmInstance->GetHandle() );
- aMessage.WriteL( 2, existingHandlePckg );
- User::Leave( KErrAlreadyExists );
- }
- }
- cmInstance = NULL;
- TPckg<TInt> existingHandlePckg( 0 );
- aMessage.WriteL( 2, existingHandlePckg );
-
- cmInstance = CCmmConnMethodInstance::NewLC( this, &iCache );
- // Will check if connection method ID is valid.
- iCache.OpenConnMethodL( *cmInstance, destinationInstance, connMethodId );
-
- iConnMethodContainer->AddL( ( CObject* ) cmInstance );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) cmInstance );
- cmInstance->SetHandle( handle );
- CleanupStack::Pop( cmInstance );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_GETCONNMETHODFROMDESTWITHIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Create a new connection method (not embedded destination) into a destination.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CreateConnMethodToDestL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CREATECONNMETHODTODESTL_ENTRY );
-
- TInt destinationHandle( aMessage.Int0() );
- TUint32 bearerType( aMessage.Int1() );
-
- CCmmDestinationInstance* destination =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( destinationHandle );
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destination->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- CCmmConnMethodInstance* connMethod = CCmmConnMethodInstance::NewLC( this, &iCache );
- iCache.CreateConnMethodL( *connMethod, destination, bearerType, 0 );
-
- iConnMethodContainer->AddL( ( CObject* ) connMethod );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) connMethod );
- connMethod->SetHandle( handle );
- CleanupStack::Pop( connMethod );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CREATECONNMETHODTODESTL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Create a new connection method (not embedded destination) with specific ID
-// into a destination.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CreateConnMethodToDestWithIdL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CREATECONNMETHODTODESTWITHIDL_ENTRY );
-
- TInt destinationHandle( aMessage.Int0() );
- TUint32 bearerType( aMessage.Int1() );
- TUint32 connMethodId( aMessage.Int2() );
-
- CCmmDestinationInstance* destination =
- ( CCmmDestinationInstance* )iDestinationObjects->AtL( destinationHandle );
-
- // Check the protection and if protected check the needed capabilities.
- CMManager::TProtectionLevel protLevel =
- destination->CurrentProtectionLevelL();
- if ( protLevel == CMManager::EProtLevel1 )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- CCmmConnMethodInstance* connMethod =
- CCmmConnMethodInstance::NewLC( this, &iCache );
- // Will check if ID is available.
- iCache.CreateConnMethodL( *connMethod, destination, bearerType, connMethodId );
-
- iConnMethodContainer->AddL( ( CObject* ) connMethod );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) connMethod );
- connMethod->SetHandle( handle );
- CleanupStack::Pop( connMethod );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CREATECONNMETHODTODESTWITHIDL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Checks if the CM given as parameter is equal to this CM
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CmIsEqualL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CMISEQUALL_ENTRY );
-
- CCmmConnMethodInstance* cm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- CCmmConnMethodInstance* cmToBeCompared =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
-
- TBool equal( EFalse );
- if ( cm->GetId() == cmToBeCompared->GetId() )
- {
- equal = ETrue;
- }
-
- TPckg<TBool> equalPckg( equal );
- aMessage.WriteL( 1, equalPckg );
-
- OstTraceFunctionExit0( CCMMSESSION_CMISEQUALL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Creates a copy of an existing connection method and opens a handle to it.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CreateCopyOfExistingL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CREATECOPYOFEXISTINGL_ENTRY );
-
- CCmmConnMethodInstance* sourceCm =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int0() );
- TUint32 cmId = sourceCm->GetId();
-
- CCmmConnMethodInstance* targetCm =
- CCmmConnMethodInstance::NewLC( this, &iCache );
- iCache.CreateCopyOfConnMethodL( *targetCm, *sourceCm );
-
- iConnMethodContainer->AddL( ( CObject* ) targetCm );
- TInt handle = iConnMethodObjects->AddL( ( CObject* ) targetCm );
- targetCm->SetHandle( handle );
- CleanupStack::Pop( targetCm );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Remove from object index and destroy the object.
- iConnMethodObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CREATECOPYOFEXISTINGL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Opens a destination handle to the embedded destination that the provided
-// connection method handle represents.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::GetEmbeddedDestinationL( const RMessage2& aMessage )
- {
- OstTraceFunctionEntry0( CCMMSESSION_GETEMBEDDEDDESTINATIONL_ENTRY );
-
- CCmmConnMethodInstance* connMethodInstance =
- ( CCmmConnMethodInstance* )iConnMethodObjects->AtL( aMessage.Int3() );
-
- // Check this connection method realy represents an embedded destination.
- if ( !connMethodInstance->IsEmbeddedDestination() )
- {
- User::Leave( KErrNotSupported );
- }
-
- TUint32 destinationId = connMethodInstance->GetId();
-
- // Check that the ID is in valid range.
- if ( destinationId <= KCmDefaultDestinationAPTagId ||
- destinationId >= KCmMaxDestinationAPTagId )
- {
- User::Leave( KErrCorrupt );
- }
-
- // If this session already has a destination with matching ID open, provide
- // the client with a reference to the already opened handle.
- CCmmDestinationInstance* destinationInstance = FindDestinationInstanceById( destinationId );
- if ( destinationInstance )
- {
- if ( iCache.DestinationExistsWithId( destinationId ) )
- {
- TPckg<TInt> existingHandlePckg( destinationInstance->GetHandle() );
- aMessage.WriteL( 1, existingHandlePckg );
- User::Leave( KErrAlreadyExists );
- }
- }
- destinationInstance = NULL;
- TPckg<TInt> existingHandlePckg( 0 );
- aMessage.WriteL( 1, existingHandlePckg );
-
- destinationInstance = CCmmDestinationInstance::NewLC( this, &iCache );
-
- // Cache will open a handle to the destination if not already open, and
- // copy relevant data into this destination instance.
- iCache.OpenDestinationL( *destinationInstance, destinationId ); // Checks ID is valid.
-
- iDestinationContainer->AddL( ( CObject* ) destinationInstance );
- TInt handle = iDestinationObjects->AddL( ( CObject* ) destinationInstance );
- destinationInstance->SetHandle( handle );
- CleanupStack::Pop( destinationInstance );
-
- TPckg<TInt> handlePckg( handle );
- TInt error = aMessage.Write( 3, handlePckg );
- if ( error )
- {
- // Removes from object index and destroys the object.
- iDestinationObjects->Remove( handle );
- User::Leave( error );
- }
-
- OstTraceFunctionExit0( CCMMSESSION_GETEMBEDDEDDESTINATIONL_EXIT );
- }
-
-// -----------------------------------------------------------------------------
-// Check if CM is protected and if so then check the needed capabilities.
-// -----------------------------------------------------------------------------
-//
-void CCmmSession::CheckCapabilitiesForProtectedCML(
- const RMessage2& aMessage,
- CCmmConnMethodInstance* aConnectionMethodInstance )
- {
- OstTraceFunctionEntry0( CCMMSESSION_CHECKCAPABILITIESFORPROTECTEDCML_ENTRY );
-
- TBool prot = aConnectionMethodInstance->GetBoolAttributeL( CMManager::ECmProtected );
- if ( prot )
- {
- CPolicyServer::TCustomResult capabilities( CPolicyServer::EPass );
- capabilities = iServer.CapabilityCheckWithProtection( aMessage );
- if ( capabilities == CPolicyServer::EFail )
- {
- User::Leave( KErrPermissionDenied );
- }
- }
-
- OstTraceFunctionExit0( CCMMSESSION_CHECKCAPABILITIESFORPROTECTEDCML_EXIT );
- }
-
-// ---------------------------------------------------------------------------
-// Check if there is space enough in the disk.
-// ---------------------------------------------------------------------------
-//
-TBool CCmmSession::CheckSpaceBelowCriticalLevelL()
- {
- if ( !iFsConnected )
- {
- TInt err = iFs.Connect();
- if ( err )
- {
- // Error happened in connect --> disk space cannot be checked,
- // --> return information that everything is ok.
- return EFalse;
- }
- iFsConnected = ETrue;
- }
-
- TBool belowCL = SysUtil::FFSSpaceBelowCriticalLevelL( &iFs, KMinimumDiskSpace );
-
- return belowCL;
- }
-
-// End of file