fotaapplication/fotaserver/FotaServer/src/DevEncController.cpp
changeset 50 a36219ae6585
parent 49 689a71addb96
child 51 2e64dc50f295
--- a/fotaapplication/fotaserver/FotaServer/src/DevEncController.cpp	Tue Jul 13 09:26:23 2010 +0530
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,482 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:   CDevEncController definitions Part of ES System Application
-*
-*/
-
-#include <apgcli.h> // for RApaLsSession
-#include <apacmdln.h> // for CApaCommandLine
-#include <centralrepository.h>
-#include <featmgr.h> // for checking DE feature
-#include "DevEncController.h"
-#include "FotaServer.h"
-#include "FotaSrvDebug.h"
-#include "DevEncSession.h"
-#include <DevEncEngineConstants.h>
-#include "DevEncProgressObserver.h"
-#include <fotaserver.rsg>
-#include <DevEncProtectedPSKey.h>
-#define __LEAVE_IF_ERROR(x) if(KErrNone!=x) {FLOG(_L("LEAVE in %s: %d"), __FILE__, __LINE__); User::Leave(x); }
-
-// ================= MEMBER FUNCTIONS =======================
-//
-// ----------------------------------------------------------
-// CDevEncController::NewL
-// Instancies CDevEncController object
-// ----------------------------------------------------------
-//
-CDevEncController* CDevEncController::NewL(CFotaServer* aCallback )
-    {
-    FLOG(_L("CDevEncController::NewL >>"));
-
-    CDevEncController* self = CDevEncController::NewLC(aCallback);
-    CleanupStack::Pop();
-
-    FLOG(_L("CDevEncController::NewL <<"));
-    return self;
-    }
-
-
-// ----------------------------------------------------------
-// CDevEncController::NewL
-// Instancies CDevEncController object
-// ----------------------------------------------------------
-//
-CDevEncController* CDevEncController::NewLC(CFotaServer* aCallback )
-    {
-    FLOG(_L("CDevEncController::NewLC >>"));
-
-    CDevEncController* self = new ( ELeave ) CDevEncController(aCallback);
-    CleanupStack::PushL ( self );
-    self->ConstructL();
-
-    FLOG(_L("CDevEncController::NewC <<"));
-    return self;
-    }
-
-// ----------------------------------------------------------
-// CDevEncController::ConstructL()
-// Initializes data objects
-// ----------------------------------------------------------
-//
-void CDevEncController::ConstructL()
-    {
-    FLOG(_L("CDevEncController::ConstructL >>"));
-
-    if (!IsDeviceEncryptionSupportedL())
-        {
-        FLOG(_L("Device doesn't support encryption!!"));
-        User::Leave(KErrNotSupported);
-        }
-    FLOG(_L("CDevEncController::ConstructL <<"));
-    }
-
-
-TBool CDevEncController::IsDeviceEncryptionSupportedL()
-    {
-    FLOG(_L("CDevEncController::IsDeviceEncryptionSupportedL >>"));
-
-    TBool ret(EFalse);
-
-    FeatureManager::InitializeLibL();
-    ret = FeatureManager::FeatureSupported( KFeatureIdFfDeviceEncryptionFeature);
-    FeatureManager::UnInitializeLib();
-
-    FLOG(_L("CDevEncController::IsDeviceEncryptionSupportedL, ret = %d <<"), ret);
-    return ret;
-    }
-// ----------------------------------------------------------
-// CDevEncController::CDevEncController()
-// Constructor
-// ----------------------------------------------------------
-//
-CDevEncController::CDevEncController(CFotaServer* aCallback): iCallback (aCallback),
-iEncMemorySession(NULL),
-iDevEncObserver (NULL),
-iDevEncOperation(EIdle)
-        {
-
-        }
-
-// ----------------------------------------------------------
-// CDevEncController::CDevEncController()
-// Destructor
-// ----------------------------------------------------------
-//
-CDevEncController::~CDevEncController()
-    {
-    FLOG(_L("CDevEncController::~CDevEncController >>"));
-
-    if (iEncMemorySession)
-        {
-        iEncMemorySession->Close();
-        delete iEncMemorySession;
-        iEncMemorySession = NULL;
-        }
-
-    if (iDevEncObserver)
-        {
-        delete iDevEncObserver;
-        iDevEncObserver = NULL;
-        }
-
-    FLOG(_L("CDevEncController::~CDevEncController <<"));
-    }
-
-TBool CDevEncController::NeedToDecryptL(const TDriveNumber &aDrive)
-    {
-    FLOG(_L("CDevEncController::NeedToDecryptL, drive = %d >>"), (TInt) aDrive);
-
-    TBool ret (EFalse);
-    TInt err (KErrNone);
-    TInt status (KErrNone);
-
-    TInt deoperation (EOpIdle);  
-
-    RProperty::Get(KDevEncProtectedUid, KDevEncOperationKey, deoperation );
-
-    if (deoperation != EOpIdle)
-        {
-        FLOG(_L("Some disk operation is ongoing. Hence Fota is not possible."));
-        User::Leave(KErrNotReady);
-        }
-
-    if (!iEncMemorySession)
-        iEncMemorySession = new (ELeave) CDevEncSession( aDrive );
-
-    err = iEncMemorySession->Connect();
-    if (err != KErrNone)
-        {
-        FLOG(_L("Error in connecting to devencdisk session = %d"), err);
-        User::Leave(err);
-        }
-
-    err = iEncMemorySession->DiskStatus(status);
-
-    if (!err && (status == EEncrypted || status == EEncrypting))
-        {
-        FLOG(_L("Drive %d is encrypted"), (TInt) aDrive);
-        ret = ETrue;
-        }
-    else
-        {
-        CRepository *centrep = CRepository::NewL( KCRUidFotaServer );
-        err = centrep->Set(  KDriveToEncrypt, KErrNotFound );
-        delete centrep; centrep = NULL;
-        }
-
-#if defined(__WINS__)
-    ret = ETrue;
-#endif
-
-    iEncMemorySession->Close();
-    delete iEncMemorySession; iEncMemorySession = NULL;
-
-    FLOG(_L("CDevEncController::NeedToDecrypt, ret = %d <<"), ret);
-    return ret;
-    }
-
-void CDevEncController::DoStartDecryptionL(const TDriveNumber &aDrive)
-    {
-    FLOG(_L("CDevEncController::DoStartDecryptionL >>"));
-
-    TInt deoperation (EOpIdle);  
-
-    RProperty::Get(KDevEncProtectedUid, KDevEncOperationKey, deoperation );
-
-    if (deoperation != EOpIdle)
-        {
-        FLOG(_L("Some disk operation is ongoing. Hence Fota is not possible."));
-        User::Leave(KErrNotReady);
-        }
-
-    iDevEncOperation = EDecryption;
-    iStorageDrive = aDrive;
-
-
-    StartDecryptionL();
-
-    FLOG(_L("CDevEncController::DoStartDecryptionL <<"));
-    }
-
-
-void CDevEncController::StartDecryptionL()
-    {
-    FLOG(_L("CDevEncController::StartDecryptionL >>"));
-
-    TInt status (KErrNone);
-
-    if (!iEncMemorySession)
-        iEncMemorySession = new (ELeave) CDevEncSession( iStorageDrive );
-
-    __LEAVE_IF_ERROR(iEncMemorySession->Connect());
-
-    __LEAVE_IF_ERROR(iEncMemorySession->DiskStatus(status));
-
-    FLOG(_L("Status = %d"), status);
-
-    if (status == EEncrypted)
-        {
-        if (CheckBatteryL())
-            {
-            FLOG(_L("Started decryption of drive %d..."), iStorageDrive);
-
-            if (!iDevEncObserver)
-                iDevEncObserver = CDevEncProgressObserver::NewL(this, R_FOTASERVER_DECRYPTION_PROGRESS_DIALOG);
-
-            __LEAVE_IF_ERROR(iEncMemorySession->StartDiskDecrypt());
-
-            FLOG(_L("Monitor for completion of the decryption operation..."));
-
-            iDevEncObserver->StartMonitoringL(iEncMemorySession);
-            }
-        else
-            {
-            FLOG(_L("Battery low for performing decryption!"));
-
-            iDevEncOperation = EIdle;
-            iEncMemorySession->Close();
-            delete iEncMemorySession;  iEncMemorySession = NULL;
-
-            iCallback->HandleDecryptionCompleteL(KErrBadPower, EBatteryLevelLevel4);
-            }
-        }
-    else if(status == EDecrypted)
-        {
-        FLOG(_L("Device is already decrypted"));
-
-        iDevEncOperation = EIdle;
-        iEncMemorySession->Close();
-        delete iEncMemorySession;  iEncMemorySession = NULL;
-
-        iCallback->HandleDecryptionCompleteL(KErrNone);
-        }
-    else
-        {
-        // status is either unmounted, encrypting, decrypting, wiping or corrupted
-        FLOG(_L("Can't proceed as disk status is %d"), status);
-
-        iDevEncOperation = EIdle;
-        iEncMemorySession->Close();
-        delete iEncMemorySession;  iEncMemorySession = NULL;
-
-        iCallback->HandleDecryptionCompleteL(KErrNotReady);
-        }
-
-    FLOG(_L("CDevEncController::StartDecryptionL <<"));
-    }
-
-void CDevEncController::ReportDevEncOpnCompleteL(TInt aResult)
-    {
-    FLOG(_L("CDevEncController::ReportDevEncOpnCompleteL, result = %d >>"), aResult);
-
-    TInt err (KErrNone);
-
-    if (iEncMemorySession)
-        {
-        iEncMemorySession->Close();
-        delete iEncMemorySession;  iEncMemorySession = NULL;
-        }
-
-    CRepository *centrep = CRepository::NewL( KCRUidFotaServer );
-
-    if (iDevEncOperation == EDecryption)
-        {
-        err = centrep->Set(  KDriveToEncrypt, iStorageDrive );
-        if (err != KErrNone)
-            {
-            FLOG(_L("Setting drive to encrypt as %d after firmware update, error = %d"), (TInt) iStorageDrive, err);
-            }
-        }
-    else if (iDevEncOperation == EEncryption)
-        {
-        err = centrep->Set(  KDriveToEncrypt, KErrNotFound );
-        if (err != KErrNone)
-            {
-            FLOG(_L("Setting no drive, error = %d"), err);
-            }
-        }
-    delete centrep; centrep = NULL;
-
-    if (iDevEncOperation == EDecryption)
-        {
-        FLOG(_L("Starting update..."));
-        iCallback->HandleDecryptionCompleteL(KErrNone);
-        iDevEncOperation = EIdle;
-        }
-    else if (iDevEncOperation == EEncryption)
-        {
-        FLOG(_L("Encryption ended"));
-        iCallback->HandleEncryptionCompleteL(KErrNone);
-        iDevEncOperation = EIdle;
-        }
-    else
-        {
-        //should not land here!
-        }
-
-    FLOG(_L("CDevEncController::ReportDevEncOpnCompleteL <<"));
-    }
-
-TBool CDevEncController::NeedToEncryptL(TDriveNumber &aDrive)
-    {
-    FLOG(_L("CDevEncController::NeedToEncryptL >> "));
-    TBool ret (EFalse);
-
-    CRepository *centrep = CRepository::NewL( KCRUidFotaServer );
-    TInt drive (KErrNotFound);
-    TInt err = centrep->Get(  KDriveToEncrypt, drive );
-    if (drive != KErrNotFound)
-        {
-        aDrive = (TDriveNumber) drive;
-        ret = ETrue;
-        }
-
-    delete centrep; centrep = NULL;
-
-    FLOG(_L("CDevEncController::NeedToEncryptL, ret = %d, err = %d << "), ret, err);
-    return ret;
-    }
-
-void CDevEncController::DoStartEncryptionL(const TDriveNumber &aDrive)
-    {
-    FLOG(_L("CDevEncController::DoStartEncryptionL, drive = %d >>"), (TInt) aDrive);
-
-    iDevEncOperation = EEncryption;
-    iStorageDrive = aDrive;
-    StartEncryptionL();
-
-    FLOG(_L("CDevEncController::DoStartEncryptionL <<"));
-    }
-
-void CDevEncController::StartEncryptionL()
-    {
-    FLOG(_L("CDevEncController::StartEncryptionL >>"));
-
-    TInt status (KErrNone);
-
-    if (!iEncMemorySession)
-        iEncMemorySession = new (ELeave) CDevEncSession( iStorageDrive );
-
-    __LEAVE_IF_ERROR(iEncMemorySession->Connect());
-
-    __LEAVE_IF_ERROR(iEncMemorySession->DiskStatus(status));
-
-    FLOG(_L("Status = %d"), status);
-
-    if (status == EDecrypted)
-        {
-        FLOG(_L("Started encryption of drive %d..."), iStorageDrive);
-
-        if (CheckBatteryL())
-            {
-            if (!iDevEncObserver)
-                iDevEncObserver = CDevEncProgressObserver::NewL(this, R_FOTASERVER_ENCRYPTION_PROGRESS_DIALOG);
-
-            __LEAVE_IF_ERROR(iEncMemorySession->StartDiskEncrypt());
-
-            FLOG(_L("Monitor for completion of the decryption operation..."));
-
-            iDevEncObserver->StartMonitoringL(iEncMemorySession);
-            }
-        else
-            {
-            FLOG(_L("Battery low for performing encryption!"));
-
-            iDevEncOperation = EIdle;
-            iEncMemorySession->Close();
-            delete iEncMemorySession;  iEncMemorySession = NULL;
-
-            iCallback->HandleEncryptionCompleteL(KErrBadPower);
-            }
-        }
-    else if (status == EEncrypted)
-        {
-        FLOG(_L("Memory is already encrypted"));
-
-        iDevEncOperation = EIdle;
-        iEncMemorySession->Close();
-        delete iEncMemorySession;  iEncMemorySession = NULL;
-
-        iCallback->HandleEncryptionCompleteL(KErrNone);
-        }
-    else
-        {
-        //status is either encrypting, decrypting, wiping, corrupted
-        FLOG(_L("Can't proceed as disk status is %d"), status);
-
-        iDevEncOperation = EIdle;
-        iEncMemorySession->Close();
-        delete iEncMemorySession;  iEncMemorySession = NULL;
-
-        iCallback->HandleEncryptionCompleteL(KErrNotReady);
-        }
-    FLOG(_L("CDevEncController::StartEncryptionL <<"));
-    }
-
-TBool CDevEncController::CheckBatteryL()
-    {
-    FLOG(_L("CDevEncController::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
-    FLOG( _L("CDevEncUiEncryptionOperator::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;
-        }
-
-    FLOG( _L("Battery level: %d  (0..7), chargingstatus %d"),
-            batterylevel, chargingstatus );
-    FLOG( _L("CDevEncController::CheckBatteryL, ret=%d <<"), ( enoughPower ? 1 : 0 ) );
-    return enoughPower;
-
-#endif // __WINS__
-    }
-
-TInt CDevEncController::GetDEOperation()
-    {
-    return iDevEncOperation;
-    }
-
-// End of file
-