diff -r d1daf54a55b5 -r 1957042d8c7e deviceencryption/DevEncDmAdapter/src/DevEncAdapter.cpp --- a/deviceencryption/DevEncDmAdapter/src/DevEncAdapter.cpp Tue Feb 02 00:03:31 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1084 +0,0 @@ -/* -* Copyright (c) 2005 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: SW Installer DM Adapter. -* -*/ - -// INCLUDE -#include -#include -#include -#include -#include // For power state -#include -#include -#include "DevEncLog.h" -#include "DevEncAdapter.h" -#include "DevEncUids.hrh" - - -// CONSTANTS -_LIT8( KIntType,"int" ); // Leaf inputs -_LIT8( KTextType,"text/plain" ); // Leaf inputs -_LIT8( KDevEncAdapterVersion, "1.0" ); // Adapter version -_LIT8( KDevEncRootNode, "DevEnc" ); // root URI -_LIT8( KPhoneMemoryCmdNode, "PhoneMemoryCmd" ); // URI postfix -_LIT8( KMemoryCardCmdNode, "MemoryCardCmd" ); // URI postfix -_LIT8( KPhoneMemoryStatusNode, "PhoneMemoryStatus" ); // URI postfix -_LIT8( KMemoryCardStatusNode, "MemoryCardStatus" ); // URI postfix -_LIT8( KMemoryCardEncKeyNode, "MemoryCardEncKey" ); // URI postfix -_LIT8( KUIStateNode, "UIState" ); // URI postfix -_LIT8( KPhoneMemoryProgNode, "PhoneMemoryProgress" ); // URI postfix -_LIT8( KMemoryCardProgNode, "MemoryCardProgress" ); // URI postfix -_LIT8( KPhoneMemoryCmdDescription, "Phone memory encryption command" ); // Description -_LIT8( KMemoryCardCmdDescription, "Memory card encryption command" ); // Description -_LIT8( KPhoneMemoryStatusDescription, "Phone memory encryption status" ); // Description -_LIT8( KMemoryCardStatusDescription, "Memory card encryption status" ); // Description -_LIT8( KMemoryCardEncKeyDescription, "Memory card encryption key" ); // Description -_LIT8( KUIStateDescription, "State of encryption settings" ); // Description -_LIT8( KPhoneMemoryProgDescription, "En/Decryption progress in percents (phone)" ); // Description -_LIT8( KMemoryCardProgDescription, "En/Decryption progress in percents (memory card)" ); // Description -_LIT8( KSeparator, "/" ); - -static const TUint32 KSizeOfSettingId = 16; // Contanst size declaration -static const TInt KBufGranularity = 8; -static const TDriveNumber KPhoneMemoryDriveNum = EDriveC; -static const TDriveNumber KMemoryCardDriveNum = EDriveF; -static const TUid KPSCategory = { 0x101F9A02 }; // DM client SID -static const TInt KPkcs5PSKey = KDevEncOmaDmPluginImplUid; - -// ============================= MEMBER FUNCTIONS ============================= - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::NewL -// Symbian 1st phase contructor -// (static, may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -CDevEncAdapter* CDevEncAdapter::NewL( MSmlDmCallback* aCallback ) - { - CDevEncAdapter* self = NewLC( aCallback ); - CleanupStack::Pop( self ); - return self; - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::NewLC -// Symbian 1st phase contructor. Push object to cleanup-stack -// (static, may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -CDevEncAdapter* CDevEncAdapter::NewLC( MSmlDmCallback* aCallback ) - { - CDevEncAdapter* self = new ( ELeave ) CDevEncAdapter( aCallback ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::CDevEncAdapter() -// C++ Constructor -// Status : Draft -// ---------------------------------------------------------------------------- -CDevEncAdapter::CDevEncAdapter( TAny* aEcomArguments ) - : CSmlDmAdapter::CSmlDmAdapter( aEcomArguments ), - iPhoneMemOpPending( EFalse ), - iMemCardOpPending( EFalse ) - { - DFLOG( "CDevEncAdapter Constructor" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::ConstructL -// 2nd phase contructor -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::ConstructL() - { - DFLOG( "CDevEncAdapter::ConstructL Begin" ); - iDiskUtils = new (ELeave) CDevEncDiskUtils(); - iKeyUtils = new (ELeave) CDevEncKeyUtils(); - iPhoneMemorySession = new (ELeave) CDevEncSession( KPhoneMemoryDriveNum ); - iMemoryCardSession = new (ELeave) CDevEncSession( KMemoryCardDriveNum ); - User::LeaveIfError(iPhoneMemorySession->Connect()); - User::LeaveIfError(iMemoryCardSession->Connect()); - iTimer.CreateLocal(); - iUiCenRep = CRepository::NewL( TUid::Uid( KCRDevEncUiSettings ) ); - DFLOG( "CDevEncAdapter::ConstructL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::~CDevEncAdapter() -// C++ Destructor -// Status : Draft -// ---------------------------------------------------------------------------- -// -CDevEncAdapter::~CDevEncAdapter() - { - DFLOG( "CDevEncAdapter Destructor Begin" ); - if (iDiskUtils) - { - delete iDiskUtils; - iDiskUtils = NULL; - } - - if (iKeyUtils) - { - delete iKeyUtils; - iKeyUtils = NULL; - } - - if (iPhoneMemorySession) - { - iPhoneMemorySession->Close(); - delete iPhoneMemorySession; - iPhoneMemorySession = NULL; - } - - if (iMemoryCardSession) - { - iMemoryCardSession->Close(); - delete iMemoryCardSession; - iMemoryCardSession = NULL; - } - - if ( iPkcs5Key ) - { - delete iPkcs5Key; - iPkcs5Key = NULL; - } - if (iTimer.Handle()) - iTimer.Close(); - - if (iUiCenRep) - { - delete iUiCenRep; - iUiCenRep = NULL; - } - DFLOG( "CDevEncAdapter Destructor End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::DDFVersionL -// Return DM plug-in version -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::DDFVersionL( CBufBase& aDDFVersion ) - { - // Insert version information - DFLOG( "CDevEncAdapter::DDFVersionL Begin" ); - aDDFVersion.InsertL( 0, KDevEncAdapterVersion ); - DFLOG( "CDevEncAdapter::DDFVersionL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::DDFStructureL -// Return DM plug-in structure -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::DDFStructureL( MSmlDmDDFObject& aDDF ) - { - // Declare accesses - DFLOG( "CDevEncAdapter::DDFStructureL Begin" ); - TSmlDmAccessTypes accessTypes; - accessTypes.SetGet(); - - // Create root node - MSmlDmDDFObject& root = aDDF.AddChildObjectL( KDevEncRootNode ); - FillNodeInfoL( root, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::ENode, - MSmlDmDDFObject::EOne, - KNullDesC8(), - KNullDesC8() ); - - // Create leaf nodes - - accessTypes.Reset(); - accessTypes.SetReplace(); // Command nodes are write-only - - MSmlDmDDFObject& node1 = root.AddChildObjectL( KPhoneMemoryCmdNode ); - FillNodeInfoL( node1, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EInt, - MSmlDmDDFObject::EOne, - KPhoneMemoryCmdDescription, - KIntType ); - - MSmlDmDDFObject& node2 = root.AddChildObjectL( KMemoryCardCmdNode ); - FillNodeInfoL( node2, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EInt, - MSmlDmDDFObject::EOne, - KMemoryCardCmdDescription, - KIntType ); - - accessTypes.Reset(); - accessTypes.SetGet(); // Status nodes are read-only - - MSmlDmDDFObject& node3 = root.AddChildObjectL( KPhoneMemoryStatusNode ); - FillNodeInfoL( node3, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EInt, - MSmlDmDDFObject::EOne, - KPhoneMemoryStatusDescription, - KIntType ); - - MSmlDmDDFObject& node4 = root.AddChildObjectL( KMemoryCardStatusNode ); - FillNodeInfoL( node4, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EInt, - MSmlDmDDFObject::EOne, - KMemoryCardStatusDescription, - KIntType ); - - accessTypes.SetReplace(); - - MSmlDmDDFObject& node5 = root.AddChildObjectL( KMemoryCardEncKeyNode ); - FillNodeInfoL( node5, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EB64, - MSmlDmDDFObject::EOne, - KMemoryCardEncKeyDescription, - KTextType ); - - MSmlDmDDFObject& node6 = root.AddChildObjectL( KUIStateNode ); - FillNodeInfoL( node6, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EInt, - MSmlDmDDFObject::EOne, - KUIStateDescription, - KIntType ); - - accessTypes.Reset(); - accessTypes.SetGet(); // Progress nodes are read-only - - MSmlDmDDFObject& node7 = root.AddChildObjectL( KPhoneMemoryProgNode ); - FillNodeInfoL( node7, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EInt, - MSmlDmDDFObject::EOne, - KPhoneMemoryProgDescription, - KIntType ); - - MSmlDmDDFObject& node8 = root.AddChildObjectL( KMemoryCardProgNode ); - FillNodeInfoL( node8, - accessTypes, - MSmlDmDDFObject::EPermanent, - MSmlDmDDFObject::EInt, - MSmlDmDDFObject::EOne, - KMemoryCardProgDescription, - KIntType ); - DFLOG( "CDevEncAdapter::DDFStructureL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::StreamingSupport -// Return streaming support status, set supported item size -// Status : Draft -// ---------------------------------------------------------------------------- -// -TBool CDevEncAdapter::StreamingSupport( TInt& /* aItemSize */ ) - { - // Not supported - DFLOG( "CDevEncAdapter::StreamingSupport" ); - return EFalse; - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::StreamCommittedL -// Commit stream buffer -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::StreamCommittedL() - { - DFLOG( "CDevEncAdapter::StreamCommitted" ); - // Intentionally left empty - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::CompleteOutstandingCmdsL -// Complete outstanding commands -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::CompleteOutstandingCmdsL() - { - DFLOG( "CDevEncAdapter::CompleteOutstandingCmdsL Begin" ); - MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk; - TInt status; - - TRequestStatus reqStatus; - TBool pending = ( iPhoneMemOpPending || iMemCardOpPending ); - DFLOG2( "CDevEncAdapter: pending %d", ( pending ? 1 : 0 ) ); - - if ( iPhoneMemOpPending ) - { - iPhoneMemOpPending = EFalse; - DFLOG2( "CDevEncAdapter: iPendingCommand %d", iPendingCommand ); - switch ( iPendingCommand ) - { - case EDmDecrypt: - iPhoneMemorySession->DiskStatus( status ); - if ( status == EEncrypted ) - { - DFLOG( "CDevEncAdapter: phone memory decrypt" ); - iPhoneMemorySession->StartDiskDecrypt(); - } - else - { - DFLOG2( "CDevEncAdapter: Cannot decrypt, phone mem status %d", - status ); - retValue = CSmlDmAdapter::EError; - } - break; - case EDmEncryptDefault: - iPhoneMemorySession->DiskStatus( status ); - if ( status == EDecrypted ) - { - // if FOTA couldn't be disabled then the encryption cannot be performed - if( retValue != CSmlDmAdapter::EError ) - { - DFLOG( "CDevEncAdapter: phone memory encrypt" ); - iPhoneMemorySession->StartDiskEncrypt(); - } - } - else - { - DFLOG2( "CDevEncAdapter: Cannot encrypt, phone mem status %d", - status ); - retValue = CSmlDmAdapter::EError; - } - break; - default: - // Unknown or not valid command for phone memory - DFLOG2( "CDevEncAdapter: Invalid command %d", - iPendingCommand ); - retValue = CSmlDmAdapter::EInvalidObject; - break; - } - } - - if ( iMemCardOpPending ) - { - iMemCardOpPending = EFalse; - switch ( iPendingCommand ) - { - case EDmDecrypt: - iMemoryCardSession->DiskStatus( status ); - if ( status == EEncrypted ) - { - DFLOG( "CDevEncAdapter: memory card decrypt" ); - TInt opStatus = iMemoryCardSession->StartDiskDecrypt(); - } - else - { - DFLOG2( "CDevEncAdapter: Cannot decrypt, card status %d", - status ); - retValue = CSmlDmAdapter::EError; - } - break; - case EDmEncryptRestore: - case EDmEncryptBackup: - iMemoryCardSession->DiskStatus( status ); - if ( status == EDecrypted ) - { - HBufC8* passwd = AskPassWordL(); - if ( iPendingCommand == EDmEncryptBackup ) - { - DFLOG( "CDevEncAdapter: memory card backup" ); - _LIT_SECURITY_POLICY_S0( KPSSecurityPolicy, KPSCategory.iUid ); - - RProperty::Define( KPkcs5PSKey, - RProperty::EByteArray, - KPSSecurityPolicy, - KPSSecurityPolicy ); - iKeyUtils->CreateSetKey( reqStatus, - iPkcs5Key, - *passwd, - KEncryptionKeyLength ); - User::WaitForRequest( reqStatus ); - User::LeaveIfError( reqStatus.Int() ); - TInt ret = RProperty::Set( KPSCategory, - KPkcs5PSKey, - *iPkcs5Key ); - if ( ret != KErrNone ) - { - DFLOG2( "CDevEncAdapter: Error storing key: %d", ret ); - User::Leave( ret ); - } - } - else if ( iPendingCommand == EDmEncryptRestore ) - { - DFLOG( "CDevEncAdapter: memory card restore" ); - iKeyUtils->SetKey( reqStatus, *iPkcs5Key, *passwd ); - User::WaitForRequest( reqStatus ); - DFLOG2( "CDevEncAdapter::CompleteOutstandingCmdsL: \ - SetKey: %d", reqStatus.Int() ); - User::LeaveIfError( reqStatus.Int() ); - } - DFLOG( "CDevEncAdapter: memory card encrypt" ); - TInt opStatus = iMemoryCardSession->StartDiskEncrypt(); - delete passwd; - passwd = NULL; - } - else - { - DFLOG2( "CDevEncAdapter: Cannot encrypt, card status %d", - status ); - retValue = CSmlDmAdapter::EError; - } - break; - case EDmEncryptDefault: - iMemoryCardSession->DiskStatus( status ); - if ( status == EDecrypted ) - { - DFLOG( "CDevEncAdapter: memory card encrypt" ); - TInt opStatus = iMemoryCardSession->StartDiskEncrypt(); - } - else - { - DFLOG2( "CDevEncAdapter: Cannot encrypt, card status %d", - status ); - retValue = CSmlDmAdapter::EError; - } - break; - default: - // Unknown or not valid command for memory card - DFLOG2( "CDevEncAdapter: Invalid command %d", - iPendingCommand ); - retValue = CSmlDmAdapter::EInvalidObject; - break; - } - } - - if ( pending ) - { - Callback().SetStatusL( iStatusRef, retValue ); - } - DFLOG( "CDevEncAdapter::CompleteOutstandingCmdsL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::FillNodeInfoL -// Fill node info -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::FillNodeInfoL( MSmlDmDDFObject& aDDFObject, - TSmlDmAccessTypes& aAccessTypes, - MSmlDmDDFObject::TScope aScope, - MSmlDmDDFObject::TDFFormat aFormat, - MSmlDmDDFObject::TOccurence aOccurence, - const TDesC8& aDescription, - const TDesC8& aMIMEType ) - { - DFLOG( "CDevEncAdapter::FillNodeInfoL Begin" ); - aDDFObject.SetAccessTypesL( aAccessTypes ); - aDDFObject.SetScopeL( aScope ); - aDDFObject.SetOccurenceL( aOccurence ); - aDDFObject.SetDFFormatL( aFormat ); - aDDFObject.SetDescriptionL( aDescription ); - if ( aFormat != MSmlDmDDFObject::ENode ) - { - aDDFObject.AddDFTypeMimeTypeL( aMIMEType ); - } - DFLOG( "CDevEncAdapter::FillNodeInfoL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::CopyCommandL -// Copy object -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::CopyCommandL( const TDesC8& /*aTargetURI*/, - const TDesC8& /*aTargetLUID*/, - const TDesC8& /*aSourceURI*/, - const TDesC8& /*aSourceLUID*/, - const TDesC8& /*aType*/, - TInt aStatusRef ) - { - // Not supported - DFLOG( "CDevEncAdapter::CopyCommandL Begin" ); - Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError ); - DFLOG( "CDevEncAdapter::CopyCommandL End" ); - } - -// ---------------------------------------------------------------------------- -// DeleteObjectL -// Delete object -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::DeleteObjectL( const TDesC8& /* aURI */, - const TDesC8& /* aLUID */, - TInt aStatusRef ) - - { - // Not supported - DFLOG( "CDevEncAdapter::DeleteObjectL Begin" ); - Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError ); - DFLOG( "CDevEncAdapter::DeleteObjectL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::FetchLeafObjectL -// Fetch leaf -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::FetchLeafObjectL( const TDesC8& aURI, - const TDesC8& /* aLUID */, - const TDesC8& aType, - TInt aResultsRef, - TInt aStatusRef ) - { - DFLOG( "CDevEncAdapter::FetchLeafObjectL Begin" ); - - MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk; - CBufFlat* result = CBufFlat::NewL( KBufGranularity ); - CleanupStack::PushL( result ); - - if ( aURI.Compare( KDevEncRootNode ) >= 0 ) - { - TPtrC8 leaf = LastURISeg( aURI ); - TBuf8 buf; - - if ( leaf == KPhoneMemoryStatusNode ) - { - TInt status; - iPhoneMemorySession->DiskStatus( status ); - buf.Num( status ); - result->InsertL( 0, buf ); - } - else if ( leaf == KMemoryCardStatusNode ) - { - TInt status; - iMemoryCardSession->DiskStatus( status ); - buf.Num( status ); - result->InsertL( 0, buf ); - } - else if ( leaf == KMemoryCardEncKeyNode ) - { - iPkcs5Key = HBufC8::NewL( RProperty::KMaxPropertySize ); - TPtr8 keyPtr = iPkcs5Key->Des(); - keyPtr.FillZ( RProperty::KMaxPropertySize ); - TInt ret = RProperty::Get( KPSCategory, - KPkcs5PSKey, - keyPtr ); - if ( ret != KErrNone ) - { - DFLOG2( "CDevEncAdapter::FetchLeafObjectL: Error reading key: %d", ret ); - User::Leave( ret ); - } - result->InsertL( 0, *iPkcs5Key ); - } - else if ( leaf == KUIStateNode ) - { - TInt status; - iUiCenRep->Get( KDevEncUiDmControl, status ); - buf.Num( status ); - result->InsertL( 0, buf ); - } - else if ( leaf == KPhoneMemoryProgNode ) - { - TInt progress = -1; - iPhoneMemorySession->Progress( progress ); - buf.Num( progress ); - result->InsertL( 0, buf ); - } - else if ( leaf == KMemoryCardProgNode ) - { - TInt progress = -1; - iMemoryCardSession->Progress( progress ); - buf.Num( progress ); - result->InsertL( 0, buf ); - } - else - { - retValue = CSmlDmAdapter::ENotFound; - } - } - else - { - retValue = CSmlDmAdapter::ENotFound; - } - - if ( retValue == CSmlDmAdapter::EOk ) - { - result->Compress(); - Callback().SetResultsL( aResultsRef, *result, aType ); - } - - CleanupStack::PopAndDestroy( result ); - // Respond - Callback().SetStatusL( aStatusRef, retValue ); - DFLOG( "CDevEncAdapter::FetchLeafObjectL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::FetchLeafObjectSizeL -// Calculate leaf object size -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::FetchLeafObjectSizeL( const TDesC8& aURI, - const TDesC8& /* aLUID */, - const TDesC8& /* aType */, - TInt aResultsRef, - TInt aStatusRef ) - { - DFLOG( "CDevEncAdapter::FetchLeafObjectSizeL Begin" ); - - MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk; - CBufFlat* result = CBufFlat::NewL( KBufGranularity ); - CleanupStack::PushL( result ); - - if ( aURI.Compare( KDevEncRootNode ) >= 0 ) - { - TPtrC8 leaf = LastURISeg( aURI ); - TBuf8 buf; - - if ( leaf == KPhoneMemoryStatusNode ) - { - buf.AppendNum( sizeof(TInt) ); - result->InsertL( 0, buf ); - } - else if ( leaf == KMemoryCardStatusNode ) - { - buf.AppendNum( sizeof(TInt) ); - result->InsertL( 0, buf ); - } - else if ( leaf == KMemoryCardEncKeyNode ) - { - buf.AppendNum( KEncryptionKeyLength ); - result->InsertL( 0, buf ); - } - else if ( leaf == KUIStateNode ) - { - buf.AppendNum( sizeof(TInt) ); - result->InsertL( 0, buf ); - } - else if ( leaf == KPhoneMemoryProgNode ) - { - buf.AppendNum( sizeof(TInt) ); - result->InsertL( 0, buf ); - } - else if ( leaf == KMemoryCardProgNode ) - { - buf.AppendNum( sizeof(TInt) ); - result->InsertL( 0, buf ); - } - else - { - retValue = CSmlDmAdapter::ENotFound; - } - } - else - { - retValue = CSmlDmAdapter::ENotFound; - } - - if ( retValue == CSmlDmAdapter::EOk ) - { - result->Compress(); - Callback().SetResultsL( aResultsRef, *result, KIntType ); - } - - CleanupStack::PopAndDestroy( result ); - // Respond - Callback().SetStatusL( aStatusRef, retValue ); - DFLOG( "CDevEncAdapter::FetchLeafObjectSizeL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::ChildURIListL -// Create child URI list -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::ChildURIListL( const TDesC8& aURI, - const TDesC8& /* aLUID */, - const CArrayFix& /* aPreviousURISegmentList */, - TInt aResultsRef, - TInt aStatusRef ) - { - DFLOG( "CDevEncAdapter::ChildURIListL Begin" ); - MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk; - - if ( aURI.Compare( KDevEncRootNode ) == 0 ) - { - CBufFlat* buf = CBufFlat::NewL( KBufGranularity ); - CleanupStack::PushL( buf ); - buf->InsertL( 0, KPhoneMemoryCmdNode ); - buf->InsertL( buf->Size(), KSeparator ); - buf->InsertL( buf->Size(), KMemoryCardCmdNode ); - buf->InsertL( buf->Size(), KSeparator ); - buf->InsertL( buf->Size(), KPhoneMemoryStatusNode ); - buf->InsertL( buf->Size(), KSeparator ); - buf->InsertL( buf->Size(), KMemoryCardStatusNode ); - buf->InsertL( buf->Size(), KSeparator ); - buf->InsertL( buf->Size(), KMemoryCardEncKeyNode ); - buf->InsertL( buf->Size(), KSeparator ); - buf->InsertL( buf->Size(), KUIStateNode ); - buf->InsertL( buf->Size(), KSeparator ); - buf->InsertL( buf->Size(), KPhoneMemoryProgNode ); - buf->InsertL( buf->Size(), KSeparator ); - buf->InsertL( buf->Size(), KMemoryCardProgNode ); - - buf->Compress(); - Callback().SetResultsL( aResultsRef, *buf, KNullDesC8 ); - CleanupStack::PopAndDestroy( buf ); - } - else - { - retValue = CSmlDmAdapter::ENotFound; - } - - // Respond - Callback().SetStatusL( aStatusRef, retValue ); - DFLOG( "CDevEncAdapter::ChildURIListL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::AddNodeObjectL -// Add node -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::AddNodeObjectL( const TDesC8& /* aURI */, - const TDesC8& /* aParentLUID */, - TInt aStatusRef ) - { - // Not supported - DFLOG( "CDevEncAdapter::AddNodeObjectL Begin" ); - Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError ); - DFLOG( "CDevEncAdapter::AddNodeObjectL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::ExecuteCommandL -// Execute command -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::ExecuteCommandL( const TDesC8& /* aURI */, - const TDesC8& /* aLUID */, - const TDesC8& /* aArgument */, - const TDesC8& /* aType */, - TInt aStatusRef ) - { - // Not supported - DFLOG( "CDevEncAdapter::ExecuteCommandL Begin" ); - Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError ); - DFLOG( "CDevEncAdapter::ExecuteCommandL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::ExecuteCommandL -// Execute command, streaming enabled -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::ExecuteCommandL( const TDesC8& /* aURI */, - const TDesC8& /* aLUID */, - RWriteStream*& /* aStream */, - const TDesC8& /* aType */, - TInt aStatusRef ) - { - // Not supported - DFLOG( "CDevEncAdapter::ExecuteCommandL Begin" ); - Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError ); - DFLOG( "CDevEncAdapter::ExecuteCommandL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::UpdateLeafObjectL -// Update leaf object -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::UpdateLeafObjectL( const TDesC8& aURI, - const TDesC8& /* aLUID */, - const TDesC8& aObject, - const TDesC8& /* aType */, - TInt aStatusRef ) - { - DFLOG( "CDevEncAdapter::UpdateLeafObjectL Begin" ); - MSmlDmAdapter::TError retValue = CSmlDmAdapter::EOk; - DFLOG2( "CDevEncAdapter: Object: %S", &aObject ); - - if ( aURI.Compare( KDevEncRootNode ) >= 0 ) - { - TPtrC8 leaf = LastURISeg( aURI ); - TLex8 lex; - - if ( leaf == KPhoneMemoryCmdNode ) - { - DFLOG( "CDevEncAdapter: leaf: KPhoneMemoryCmdNode" ); - DFLOG2( "CDevEncAdapter: iMemCardOpPending %d", ( iMemCardOpPending ? 1 : 0 ) ); - if ( iMemCardOpPending ) - { - retValue = CSmlDmAdapter::EObjectInUse; - } - else - { - if( !CheckBatteryL() ) - { - retValue = CSmlDmAdapter::EError; - } - else - { - lex.Assign( aObject ); - lex.Val( iPendingCommand ); - iPhoneMemOpPending = ETrue; - iStatusRef = aStatusRef; - return; // Completed in CompleteOutstandingCmdsL - } - } - } - else if ( leaf == KMemoryCardCmdNode ) - { - DFLOG( "CDevEncAdapter: leaf: KMemoryCardCmdNode" ); - DFLOG2( "CDevEncAdapter: iPhoneMemOpPending %d", ( iPhoneMemOpPending ? 1 : 0 ) ); - if ( iPhoneMemOpPending ) - { - retValue = CSmlDmAdapter::EObjectInUse; - } - else - { - if( !CheckBatteryL() ) - { - retValue = CSmlDmAdapter::EError; - } - else - { - lex.Assign( aObject ); - lex.Val( iPendingCommand ); - iMemCardOpPending = ETrue; - iStatusRef = aStatusRef; - return; // Completed in CompleteOutstandingCmdsL - } - } - } - else if ( leaf == KMemoryCardEncKeyNode ) - { - DFLOG( "CDevEncAdapter: leaf: KMemoryCardEncKeyNode" ); - iPkcs5Key = aObject.AllocL(); - } - else if ( leaf == KUIStateNode ) - { - DFLOG( "CDevEncAdapter: leaf: KUIStateNode" ); - lex.Assign( aObject ); - TInt value; - lex.Val( value ); - iUiCenRep->Set( KDevEncUiDmControl, value ); - } - else - { - retValue = CSmlDmAdapter::ENotFound; - DFLOG( "CDevEncAdapter: Not Found" ); - } - } - else - { - retValue = CSmlDmAdapter::ENotFound; - DFLOG( "CDevEncAdapter: Not Found" ); - } - Callback().SetStatusL( aStatusRef, retValue ); - DFLOG( "CDevEncAdapter::UpdateLeafObjectL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::UpdateLeafObjectL -// Update leaf object, streaming enabled -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::UpdateLeafObjectL( const TDesC8& /* aURI */, - const TDesC8& /* aLUID */, - RWriteStream*& /* aStream */, - const TDesC8& /* aType */, - TInt aStatusRef ) - { - // Not supported - DFLOG( "CDevEncAdapter::UpdateLeafObjectL Begin" ); - Callback().SetStatusL( aStatusRef, CSmlDmAdapter::EError ); - DFLOG( "CDevEncAdapter::UpdateLeafObjectL End" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::StartAtomicL -// Start atomic -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::StartAtomicL() - { - DFLOG( "CDevEncAdapter::StartAtomicL" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::CommitAtomicL -// Commit atomic commands -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::CommitAtomicL() - { - DFLOG( "CDevEncAdapter::CommitAtomicL" ); - } - -// ---------------------------------------------------------------------------- -// CDevEncAdapter::RollbackAtomicL -// Lose all modifications after 'StartAtomicL' command -// (may leave) -// Status : Draft -// ---------------------------------------------------------------------------- -// -void CDevEncAdapter::RollbackAtomicL() - { - DFLOG( "CDevEncAdapter::RollbackAtomicL" ); - } - -TPtrC8 CDevEncAdapter::LastURISeg( const TDesC8& aURI ) - { - DFLOG( "CDevEncAdapter::LastURISeg Begin" ); - TInt i; - for ( i = aURI.Length()-1; i >= 0; i-- ) - { - if ( aURI[i] == '/' ) - { - break; - } - } - DFLOG( "CDevEncAdapter::LastURISeg End" ); - return aURI.Mid( i+1 ); - } - -HBufC8* CDevEncAdapter::AskPassWordL() - { - DFLOG( "CDevEncAdapter::AskPassWordL Begin" ); - RNotifier notif; - TInt err = notif.Connect(); - DFLOG2( "CDevEncAdapter::AskPassWordL notif.Connect(): %d", err ); - User::LeaveIfError( err ); - TBuf8 passwd; - passwd.SetLength(KMaxPasswordLength); - TRequestStatus status = KRequestPending; - DFLOG( "CDevEncAdapter::AskPassWordL StartNotifierAndGetResponse" ); - notif.StartNotifierAndGetResponse( - status, - TUid::Uid( KDevEncPasswdDlgUid ), - KNullDesC8, - passwd ); - User::WaitForRequest( status ); - notif.Close(); - err = status.Int(); - DFLOG2( "CDevEncAdapter::AskPassWordL status.Int(): %d", err ); - User::LeaveIfError( err ); - HBufC8* passwdBuf = passwd.AllocL(); - DFLOG( "CDevEncAdapter::AskPassWordL End" ); - return passwdBuf; - } - -// --------------------------------------------------------------------------- -// CDevEncAdapter::CheckBatteryL() -// Checks if there's enough battery power to update -// --------------------------------------------------------------------------- -// -TBool CDevEncAdapter::CheckBatteryL() - { -#ifdef __WINS__ - - // In the emulator, the battery level is always 0 and the charger is never - // connected, so just return ETrue. - return ETrue; - -#else // __WINS__ - - // Running on target. Check the real battery and charger status - - TInt chargingstatus( EChargingStatusError ); - TInt batterylevel( 1 ); - TBool enoughPower( EFalse ); - - // Read battery - DFLOG( "CDevEncAdapter::CheckBatteryL" ); - RProperty pw; - User::LeaveIfError( pw.Attach( KPSUidHWRMPowerState, KHWRMBatteryLevel ) ); - User::LeaveIfError( pw.Get( batterylevel ) ); - pw.Close(); - - User::LeaveIfError( pw.Attach( KPSUidHWRMPowerState, KHWRMChargingStatus ) ); - User::LeaveIfError( pw.Get( chargingstatus )); - pw.Close(); - - // Too low battery, power insufficient - if ( batterylevel >= EBatteryLevelLevel4 ) - { - enoughPower = ETrue; - } - // But charger is connected, power sufficient - if ( ( chargingstatus != EChargingStatusError ) && - ( chargingstatus != EChargingStatusNotConnected ) ) - { - enoughPower = ETrue; - } - - DFLOG3( "CDevEncAdapter: Battery level: %d (0..7), chargingstatus %d", - batterylevel, chargingstatus ); - DFLOG2( "CDevEncAdapter: CheckBatteryL %d", ( enoughPower ? 1 : 0 ) ); - return enoughPower; - -#endif // __WINS__ - } - -// ========================= OTHER EXPORTED FUNCTIONS ========================= - -// End of File