remotemgmt_plat/terminal_security_device_lock_api/inc/dmencryptionutil.inl
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 31 Mar 2010 23:00:03 +0300
branchRCL_3
changeset 13 86979fe66c4c
child 21 490439ac0bd4
permissions -rw-r--r--
Revision: 201011 Kit: 201013

/*
* 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:  dmencryptionutil Encryption/Decryption Interface 
*
*/


#include <ecom/implementationproxy.h>
#include <ecom/ecom.h>
#include <ecom/ecomresolverparams.h>

/**
 * C++ Destructor
 */
// Inline functions
CDMEncryptionUtil::~CDMEncryptionUtil()
	{
        // Destroy any instance variables and then
        // inform the framework that this specific 
        // instance of the interface has been destroyed.
        REComSession::DestroyedImplementation(iDtor_ID_Key);
	}
	
/**
 * Cleans up the ECOM plugin array
 * @param aUid , implementation Uid
 * @return Instance of CDMEncryptionUtil
 */
void CleanupEComArray(TAny* aArray)
    {
        (static_cast<RImplInfoPtrArray*> (aArray))->ResetAndDestroy();
        (static_cast<RImplInfoPtrArray*> (aArray))->Close();
    }

/**
* Create instance of CDMEncryptionUtil, this NewL always loads only the secenv hardware encryption plugin.
* @param Nil
* @return Instance of CDMEncryptionUtil
*/
inline CDMEncryptionUtil* CDMEncryptionUtil::NewL()
    {
        RImplInfoPtrArray infoArray;
        // Note that a special cleanup function is required to reset and destroy
        // all items in the array, and then close it.
        TCleanupItem cleanup(CleanupEComArray, &infoArray);
        CleanupStack::PushL(cleanup);        
        
        //Only ROM plugins are filtered & listed.
       TEComResolverParams resolverParams;
       _LIT8(KOperationName,"extdmencryptionutil");
       
       resolverParams.SetDataType(KOperationName());
       resolverParams.SetWildcardMatch(ETrue);     // Allow wildcard matching
       TRAPD(terr, REComSession::ListImplementationsL(KDMEncryptionUtilInterfaceUid, resolverParams,KRomOnlyResolverUid, infoArray));
       REComSession::FinalClose();
       if(terr)
       {
           User::Leave(terr);
       }
       if(infoArray.Count() > 1)
       {
           User::Leave(KErrBadName);
       }
       TUid retUid = infoArray[0]->ImplementationUid();
       CleanupStack::PopAndDestroy(); //cleanup
    
       TAny* ptr = REComSession::CreateImplementationL( retUid, _FOFF(CDMEncryptionUtil, iDtor_ID_Key));
       CDMEncryptionUtil* self = reinterpret_cast<CDMEncryptionUtil*>( ptr );
      
       return self;
    }

/**
* Create instance of CDMEncryptionUtil, this NewL always loads the plugin which matches with the default_data.
* @param aData default_data
* @return Instance of CDMEncryptionUtil
*       Leaves with KErrBadName: if the default_data exists more than 1.                  
*/
inline CDMEncryptionUtil* CDMEncryptionUtil::NewL(const TDesC8& aData)
    {
        RImplInfoPtrArray infoArray;
        // Note that a special cleanup function is required to reset and destroy
        // all items in the array, and then close it.
        TCleanupItem cleanup(CleanupEComArray, &infoArray);
        CleanupStack::PushL(cleanup);        
        
        //Only ROM plugins are filtered & listed.
       TEComResolverParams resolverParams;
       resolverParams.SetDataType(aData);
       resolverParams.SetWildcardMatch(ETrue);     // Allow wildcard matching
       TRAPD(terr, REComSession::ListImplementationsL(KDMEncryptionUtilInterfaceUid, resolverParams,KRomOnlyResolverUid, infoArray));
       REComSession::FinalClose();
       if(terr)
       {
           User::Leave(terr);
       }
       if(infoArray.Count() > 1)
       {
           User::Leave(KErrBadName);
       }
       TUid retUid = infoArray[0]->ImplementationUid();
       CleanupStack::PopAndDestroy(); //cleanup
    
       TAny* ptr = REComSession::CreateImplementationL( retUid, _FOFF(CDMEncryptionUtil, iDtor_ID_Key));
       CDMEncryptionUtil* self = reinterpret_cast<CDMEncryptionUtil*>( ptr );
      
       return self;
    }