--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cmmgr/Plugins/cmpluginembdestination/src/cmpluginembdestination.cpp Thu Dec 17 08:55:21 2009 +0200
@@ -0,0 +1,624 @@
+/*
+* Copyright (c) 2006 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: Implementation of CCmPluginEmbDestination
+*
+*/
+
+#include "cmdestinationimpl.h"
+#include "cmpluginembdestination.h"
+#include "datamobilitycommsdattypes.h"
+#include "cmmanagerimpl.h"
+#include "cmlogger.h"
+#include <ecom/ecom.h> // For REComSession
+#include <StringLoader.h>
+#include <cmpluginembdestinationui.rsg>
+#include <data_caging_path_literals.hrh>
+#include <cmmanager.rsg>
+#include <bautils.h>
+
+using namespace CMManager;
+using namespace CommsDat;
+
+_LIT( KPluginEmbDestinationDataResDirAndFileName,
+ "z:cmpluginembdestinationui.rsc" );
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::NewL()
+// ---------------------------------------------------------------------------
+//
+CCmPluginEmbDestination* CCmPluginEmbDestination::NewL(
+ TCmPluginInitParam* aInitParam )
+ {
+ CCmPluginEmbDestination* self =
+ new( ELeave ) CCmPluginEmbDestination( aInitParam );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::~CCmPluginEmbDestination()
+// ---------------------------------------------------------------------------
+//
+CCmPluginEmbDestination::~CCmPluginEmbDestination()
+ {
+ RemoveResourceFile( KPluginEmbDestinationDataResDirAndFileName );
+
+ if(iDestination)
+ {
+ delete iDestination;
+ iDestination = NULL;
+ }
+
+ CLOG_CLOSE;
+ }
+
+// ----------------------------------------------------------------------------
+// CCmPluginEmbDestination::CreateInstanceL
+// ----------------------------------------------------------------------------
+//
+CCmPluginBaseEng*
+ CCmPluginEmbDestination::CreateInstanceL( TCmPluginInitParam& aInitParam ) const
+ {
+ CCmPluginEmbDestination* self = new( ELeave ) CCmPluginEmbDestination( &aInitParam );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::CCmPluginEmbDestination()
+// ---------------------------------------------------------------------------
+//
+CCmPluginEmbDestination::CCmPluginEmbDestination(
+ TCmPluginInitParam* aInitParam )
+ : CCmPluginBaseEng( aInitParam )
+ {
+ CLOG_CREATE;
+
+ iBearerType = KUidEmbeddedDestination;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::ConstructL()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::ConstructL()
+ {
+ // Nothing is needed from CCmPluginBaseEng.
+ AddResourceFileL( KPluginEmbDestinationDataResDirAndFileName );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::GetIntAttributeL()
+// ---------------------------------------------------------------------------
+//
+TUint32
+ CCmPluginEmbDestination::GetIntAttributeL( const TUint32 aAttribute ) const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::GetIntAttributeL" );
+
+ TUint32 retVal( 0 );
+
+ switch( aAttribute )
+ {
+ case ECmBearerType:
+ {
+ retVal = iBearerType;
+ }
+ break;
+
+ case ECmId:
+ {
+ retVal = iCmId;
+ }
+ break;
+
+ case ECmIapId:
+ {
+ User::Leave(KErrNotSupported);
+ }
+ break;
+
+ case ECmBearerIcon:
+ {
+ retVal = (TUint32)iDestination->IconL();
+ }
+ break;
+
+ case ECmDefaultPriority:
+ case ECmDefaultUiPriority:
+ {
+ retVal = KDataMobilitySelectionPolicyPriorityWildCard;
+ }
+ break;
+
+ case ECmExtensionLevel:
+ {
+ retVal = KExtensionBaseLevel;
+ }
+ break;
+
+ case ECmInvalidAttribute:
+ {
+ retVal = 0;
+ }
+ break;
+
+ case ECmLoadResult:
+ {
+ retVal = iLoadResult;
+ }
+ break;
+
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+
+ return retVal;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::GetBoolAttributeL()
+// ---------------------------------------------------------------------------
+//
+TBool CCmPluginEmbDestination::GetBoolAttributeL( const TUint32 aAttribute ) const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::GetBoolAttributeL" );
+
+ TBool retVal( EFalse );
+
+ switch( aAttribute )
+ {
+ case ECmDestination:
+ {
+ retVal = ETrue;
+ }
+ break;
+
+ case ECmCoverage:
+ {
+ retVal = EFalse;
+ }
+ break;
+
+ case ECmProtected:
+ {
+ if( iDestination->ProtectionLevel() == EProtLevel1 ||
+ iDestination->ProtectionLevel() == EProtLevel2 )
+ {
+ retVal = ETrue;
+ }
+ else
+ {
+ retVal = EFalse;
+ }
+ }
+ break;
+
+ case ECmHidden:
+ {
+ retVal = iDestination->IsHidden();
+ }
+ break;
+
+ case ECmBearerHasUi:
+ case ECmAddToAvailableList:
+ {
+ retVal = EFalse;
+ }
+ break;
+
+ case ECmVirtual:
+ {
+ retVal = ETrue;
+ }
+ break;
+
+ case ECmIPv6Supported:
+ {
+ retVal = CCmPluginBaseEng::GetBoolAttributeL( aAttribute );
+ }
+ break;
+
+ case ECmIsLinked:
+ {
+ retVal = EFalse;
+ }
+ break;
+
+ case ECmConnected:
+ {
+ retVal = iDestination->IsConnectedL();
+ }
+ break;
+
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+
+ return retVal;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::GetStringAttributeL()
+// ---------------------------------------------------------------------------
+//
+HBufC*
+ CCmPluginEmbDestination::GetStringAttributeL( const TUint32 aAttribute ) const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::GetStringAttributeL" );
+
+ HBufC* retVal = NULL;
+
+ switch( aAttribute )
+ {
+ case ECmName:
+ {
+ RFs fs;
+ CleanupClosePushL<RFs>( fs );
+ User::LeaveIfError( fs.Connect() );
+
+ // There may not be a UI context yet....
+ TFileName resourceFile;
+ _LIT( KDriveZ, "z:" );
+ resourceFile.Append( KDriveZ );
+ resourceFile.Append( KDC_RESOURCE_FILES_DIR );
+ _LIT( KCmmResFileName, "cmmanager.rsc" );
+ resourceFile.Append( KCmmResFileName );
+ BaflUtils::NearestLanguageFile( fs, resourceFile );
+
+ RResourceFile rf;
+ CleanupClosePushL<RResourceFile>( rf );
+ rf.OpenL( fs, resourceFile );
+ rf.ConfirmSignatureL( 0 );
+ HBufC8* readBuffer = rf.AllocReadLC( R_QTN_NETW_CONSET_EMBEDDED_DEST );
+ const TPtrC16 ptrReadBuffer( (TText16*) readBuffer->Ptr(),
+ ( readBuffer->Length() + 1 ) >> 1 );
+ HBufC16* textBuffer=HBufC16::NewL( ptrReadBuffer.Length() );
+ CleanupStack::PushL( textBuffer );
+ *textBuffer=ptrReadBuffer;
+
+ TPtr format = textBuffer->Des();
+ _LIT(KPercentS,"%S");
+ _LIT(KPercentU,"%U");
+ TInt puPos = format.Find(KPercentU);
+ if ( puPos >= 0 )
+ {
+ format.Replace( puPos,
+ static_cast<TDesC>(KPercentS).Length(), KPercentS );
+ }
+ HBufC* desName = iDestination->NameLC();
+ TPtr16 destName = desName->Des();
+ retVal = HBufC::NewL( format.Length() + destName.Length() );
+ retVal->Des().Format(format, &destName);
+
+ CleanupStack::PopAndDestroy( desName );
+ CleanupStack::PopAndDestroy( textBuffer );
+ CleanupStack::PopAndDestroy( readBuffer );
+ CleanupStack::PopAndDestroy(); //rf
+ CleanupStack::PopAndDestroy(); //fs
+ }
+ break;
+
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+
+ return retVal;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::GetString8AttributeL
+// ---------------------------------------------------------------------------
+//
+HBufC8*
+ CCmPluginEmbDestination::GetString8AttributeL( const TUint32 aAttribute ) const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::GetString8AttributeL" );
+
+ switch( aAttribute )
+ {
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ break;
+ }
+
+ // dead code
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::SetBoolAttributeL()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::SetBoolAttributeL( const TUint32 aAttribute,
+ TBool /*aValue*/ )
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::SetBoolAttributeL" );
+
+ switch( aAttribute )
+ {
+ case ECmProtected:
+ case ECmHidden:
+ break;
+
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::SetStringAttributeL()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::SetStringAttributeL( const TUint32 aAttribute,
+ const TDesC16& )
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::SetStringAttributeL" );
+
+ switch( aAttribute )
+ {
+ case ECmName:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ break;
+
+ default:
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::CanHandleIapIdL()
+// ---------------------------------------------------------------------------
+//
+TBool CCmPluginEmbDestination::CanHandleIapIdL( TUint32 /*aIapId*/ ) const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::CanHandleIapIdL" );
+
+ // Embedded Destination cannot handle any IAP id.
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::CanHandleIapIdL()
+// ---------------------------------------------------------------------------
+//
+TBool
+ CCmPluginEmbDestination::CanHandleIapIdL( CCDIAPRecord* /*aIapRecord*/ ) const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::CanHandleIapIdL" );
+
+ // Embedded Destination cannot handle any IAP id.
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CCmDestinationImpl* CCmPluginEmbDestination::Destination() const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::Destination" );
+
+ return iDestination;
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::UpdateL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::UpdateL" );
+
+ iDestination->UpdateL();
+ }
+
+// ---------------------------------------------------------------------------
+// Delete embedded destination.
+// ---------------------------------------------------------------------------
+//
+TBool CCmPluginEmbDestination::DeleteL( TBool aForced,
+ TBool aOneRefAllowed )
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::DeleteL" );
+
+ (void)aForced;
+ (void)aOneRefAllowed;
+
+ // Embedded destination cannot be deleted.
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::LoadL( TUint32 aCmId)
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::LoadL" );
+
+ if (!iDestination)
+ {
+ iCmId = aCmId;
+ iDestination = iCmMgr.DestinationL( aCmId );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::CreateNewL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::CreateNewL" );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::RunSettingsL()
+// ---------------------------------------------------------------------------
+//
+TInt CCmPluginEmbDestination::RunSettingsL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::RunSettingsL" );
+
+ return 0;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::InitializeWithUiL()
+// ---------------------------------------------------------------------------
+//
+TBool CCmPluginEmbDestination::InitializeWithUiL(
+ TBool /*aManuallyConfigure*/ )
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::InitializeWithUiL" );
+
+ // Has no UI
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::IsMultipleReferencedL()
+// ---------------------------------------------------------------------------
+//
+TBool CCmPluginEmbDestination::IsMultipleReferencedL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::IsMultipleReferencedL" );
+
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::LoadServiceSettingL()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::LoadServiceSettingL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::LoadServiceSettingL" );
+
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::LoadBearerRecordL()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::LoadBearerSettingL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::LoadBearerSettingL" );
+
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::CreateNewServiceRecordL()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::CreateNewServiceRecordL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::CreateNewServiceRecordL" );
+
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::CreateNewBearerRecordL()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::CreateNewBearerRecordL()
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::CreateNewBearerRecordL" );
+
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::ServiceRecordIdLC()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::ServiceRecordIdLC( HBufC* &/*aBearerName*/,
+ TUint32& /*aRecordId*/)
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::ServiceRecordIdLC" );
+
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::BearerRecordIdLC()
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::BearerRecordIdLC( HBufC* &/*aBearerName*/,
+ TUint32& /*aRecordId*/)
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::BearerRecordIdLC" );
+
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::CopyAdditionalDataL
+// ---------------------------------------------------------------------------
+//
+void CCmPluginEmbDestination::CopyAdditionalDataL( CCmPluginBaseEng* /*aDestInst*/ ) const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::CopyAdditionalDataL" );
+
+ User::Leave( KErrNotSupported );
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::CreateCopyL
+// ---------------------------------------------------------------------------
+//
+CCmPluginBaseEng* CCmPluginEmbDestination::CreateCopyL() const
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::CreateCopyL" );
+
+ User::Leave(KErrNotSupported);
+ return NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CCmPluginEmbDestination::IsLinkedToSnap
+// ---------------------------------------------------------------------------
+//
+TBool CCmPluginEmbDestination::IsLinkedToSnap( TUint32 aSnapId )
+ {
+ LOGGER_ENTERFN( "CCmPluginEmbDestination::IsLinkedToSnap" );
+
+ return ( aSnapId == iDestination->Id() );
+ }