authenticationservices/authenticationserver/source/common/plugindesc.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 24 Nov 2009 09:06:03 +0200
changeset 29 ece3df019add
permissions -rw-r--r--
Revision: 200948 Kit: 200948

/*
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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: 
* CPluginDesc class definition
*
*/


/**
 @file 
*/

#include "authcommon_impl.h"

using namespace AuthServer;


// -------- factory functions --------


/**
	Factory function allocates a new instance of CPluginDesc
	from the supplied arguments.

	The supplied values are arbitrary and need not correlate with
	the actual plugins on the device.
	
	@param	aId				The plugin's ID.  This value is used
							to specify the plugin in an authentication
							expression.
							actually available on the system.
	@param	aName			The plugin's name.  The newly-created
							description object allocates its own copy
							of this name, so aName does not have to remain
							in scope after the object has been created.
	@param	aType			The plugin's type.
	@param	aTrainingStatus	The plugin's training status.
	@param	aMinEntropy		The plugin's minimum entropy as a percentage.
	@param	aFalsePositiveRate	The plugin's false positive rate as a
							percentage.
	@param	aFalseNegativeRate	The plugin's false negative rate as a
							percentage.
 */
EXPORT_C CPluginDesc* CPluginDesc::NewL(
	TPluginId aId, const TDesC& aName,
	TAuthPluginType aType, TAuthTrainingStatus aTrainingStatus,
	TEntropy aMinEntropy, TPercentage aFalsePositiveRate,
	TPercentage aFalseNegativeRate)

	{
	CPluginDesc* self = new(ELeave) CPluginDesc(
		aId, aType, aTrainingStatus, aMinEntropy,
		aFalsePositiveRate, aFalseNegativeRate);
	
	CleanupStack::PushL(self);
	self->ConstructL(aName);
	CleanupStack::Pop(self);
	
	return self;
	}

/**
	Record supplied information in this new object,
	See NewL for argument descriptions.
	
	@see NewL
 */
CPluginDesc::CPluginDesc(
	TPluginId aId, TAuthPluginType aType,
	TAuthTrainingStatus aTrainingStatus, TEntropy aMinEntropy,
	TPercentage aFalsePositiveRate, TPercentage aFalseNegativeRate)
:	iId(aId),
	iType(aType),
	iTrainingStatus(aTrainingStatus),
	iMinEntropy(aMinEntropy),
	iFalsePositiveRate(aFalsePositiveRate),
	iFalseNegativeRate(aFalseNegativeRate)
	{
	// empty.
	}


/**
	Allocate a copy of the supplied name.  The
	copy is freed in the destructor.
	
	@param	aName			This plugin's name.
 */
void CPluginDesc::ConstructL(const TDesC& aName)
	{
	iName = aName.AllocL();
	}


/**
	Free resources allocated in ConstructL.
	
	@see ConstructL
 */
CPluginDesc::~CPluginDesc()
    {
    delete iName;
    }


// -------- persistence --------

/**
	Recreate an instance of CPluginDesc from the supplied
	stream.  On success the object is placed on the cleanup stack.
	
	@param	aIn				Stream containing persisted plugin
							description.
	@return					New instance of CPluginDesc, created
							from information in the supplied stream.
 */
EXPORT_C CPluginDesc* CPluginDesc::NewLC(RReadStream& aIn)
	{
	CPluginDesc* self = new(ELeave) CPluginDesc;
	CleanupStack::PushL(self);
	self->InternalizeL(aIn);
	return self;
	}

/**
	Initialize this object from the supplied stream.
	This function is used to copy plugin descriptions
	across IPC boundaries.
	
	@param	aIn				Stream which contains externalized
							plugin descriptor.
	@see ExternalizeL
 */
void CPluginDesc::InternalizeL(RReadStream& aIn)
	{
	iId = aIn.ReadUint32L();
	iName = HBufC::NewL(aIn, KMaxNameLength);
	iType = static_cast<TAuthPluginType>(aIn.ReadUint32L());
	iTrainingStatus = static_cast<TAuthTrainingStatus>(aIn.ReadUint32L());
	iMinEntropy = aIn.ReadUint32L();
	iFalsePositiveRate = aIn.ReadUint32L();
	iFalseNegativeRate = aIn.ReadUint32L();
	}


/**
	Write information about this object to the supplied stream
	so it can be reconstructed later.
	
	This function is used to copy plugin descriptions
	across IPC boundaries.
	
	@see InternalizeL
 */
EXPORT_C void CPluginDesc::ExternalizeL(RWriteStream& aOut) const
	{
	aOut << iId;
	aOut << *iName;
	aOut.WriteInt32L(iType);
	aOut.WriteInt32L(iTrainingStatus);
	aOut << iMinEntropy;
	aOut << iFalsePositiveRate;
	aOut << iFalseNegativeRate;
	}


// -------- accessors --------

    
/**
 * The plugin id.
 * @return The plugin id
 **/
EXPORT_C TPluginId CPluginDesc::Id() const
  {
  return iId;
  }

/**
 * The plugin name.
 *
 * @return The plugin name, ownership of the returned pointer remains the
 * plugin description
 **/
EXPORT_C const TDesC* CPluginDesc::Name() const
  {
  return iName;
  }

/**
 * The plugin type.
 * @return the plugin type
 **/
EXPORT_C TAuthPluginType CPluginDesc::Type() const
  {
  return iType;
  }
	
/**
 * Indicates whether the plugin is trained for none, some or all known
 * identities.
 *
 * @return the training status
 **/
EXPORT_C TAuthTrainingStatus CPluginDesc::TrainingStatus() const
  {
  return iTrainingStatus;
  }

/**
 * How many unique identities the plugin supports.
 * @return The minumum entropy provided by the plugin.
 **/
EXPORT_C TEntropy CPluginDesc::MinEntropy() const
  {
  return iMinEntropy;
  }
	
/**
 * The percentage of times an device holder is falsely identified as an
 * known identity.
 *
 * @return The false positive rate of the plugin
 **/
EXPORT_C TPercentage CPluginDesc::FalsePositiveRate() const
  {
  return iFalsePositiveRate;
  }

/**
 * The percentage of times a known identity is not identified. 
 *
 * @return The false negative rate of the plugin.
 **/
EXPORT_C TPercentage CPluginDesc::FalseNegativeRate() const
  {
  return iFalseNegativeRate;
  }