diff -r f18401adf8e1 -r 641f389e9157 authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/authenticationservices/authenticationserver/test/reftestplugin/pinplugin/pinplugin.cpp Tue Aug 31 17:00:08 2010 +0300 @@ -0,0 +1,257 @@ +/* +* Copyright (c) 2006-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: +* CPinPlugin implementation +* +*/ + + +/** + @file +*/ + + +#include "pinplugin.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace AuthServer; + +_LIT(KPinPluginResourceFile, "z:\\Resource\\pinplugin\\pinpluginconfig.rsc"); + +const TPluginId KPinPluginImplementationUid = 0x200032E5; + +CPinPlugin* CPinPlugin::NewL() + { + CPinPlugin* self = CPinPlugin::NewLC(); + CleanupStack::Pop(); + return self; + } + +CPinPlugin* CPinPlugin::NewLC() + { + CPinPlugin* self = new(ELeave) CPinPlugin(); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +CPinPlugin::~CPinPlugin() + { + delete iPinPluginAO; + delete iPinName; + delete iPinDescription; + } + +CPinPlugin::CPinPlugin() + { + iActive = ETrue; + } + +void CPinPlugin::ConstructL() + { + TInt retryCount, pinSize, pinMinSize, pinMaxSize; + TReal val; + + // Verifies the UID/SID of the Authentication server + // to make sure pinplugin is loaded from Authentication server. + RProcess process; + + ReadResourceL(retryCount, pinSize, pinMinSize, pinMaxSize); + + __ASSERT_ALWAYS(retryCount >= 0 && pinSize >= 0 && pinMinSize >= 0 && + pinMaxSize >= 0 && pinSize >= pinMinSize && pinSize <= pinMaxSize, + User::Panic(KPinPluginPanicString(), EPinPanicInvalidConfigValues)); + + iName.Set(iPinName->Des()); + iDescription.Set(iPinDescription->Des()); + Math::Pow10(val, pinMinSize); + // since pinMinSize is always a Int value, val never have a floating point + // in future if entropy is changed to have real value also, it will work + // now in our case, compiler do the default truncation. + iMinEntropy = val; + iFalsePositiveRate = 0; + iFalseNegativeRate = 0; + iType = AuthServer::EAuthKnowledge; + + //Create a new implementation object + iPinPluginAO = CPinPluginAO::NewL(pinSize, pinMinSize, pinMaxSize, retryCount); + + SetPluginStateL(); + + } + + +//Implement CAuthPluginInterface definitions + +void CPinPlugin::Identify(TIdentityId& aId,const TDesC& aClientMessage, + HBufC8*& aResult, TRequestStatus& aRequest) + { + iPinPluginAO->Identify(aId, aClientMessage, aResult, aRequest); + } + +void CPinPlugin::Cancel() + { + iPinPluginAO->Cancel(); + } + +void CPinPlugin::Train(TIdentityId aId, HBufC8*& aResult, TRequestStatus& aRequest) + { + iPinPluginAO->Train(aId, aResult, aRequest); + } + +TInt CPinPlugin::Forget(TIdentityId aId) + { + return iPinPluginAO->Forget(aId); + } + +TBool CPinPlugin::IsActive() const + { + return iActive; + } + +TInt CPinPlugin::DefaultData(TIdentityId aId, HBufC8*& aOutputBuf) + { + return iPinPluginAO->DefaultData(aId, aOutputBuf); + } + +TInt CPinPlugin::Reset(TIdentityId aIdentityId, const TDesC& aRegistrationData, HBufC8*& aResult) + { + TRAPD(err, iPinPluginAO->ResetL(aIdentityId, aRegistrationData, aResult)); + return err; + } + +TPluginId CPinPlugin::Id() const + { + return KPinPluginImplementationUid; + } + +void CPinPlugin::ReadResourceL(TInt& aRetryCount, TInt& aPinSize, TInt& aPinMinSize, + TInt& aPinMaxSize) + { + RFs fs; + TFileName fileName(KPinPluginResourceFile); + User::LeaveIfError(fs.Connect()); + CleanupClosePushL(fs); + BaflUtils::NearestLanguageFile(fs,fileName); + RResourceFile resourceFile; + resourceFile.OpenL(fs,fileName); + CleanupClosePushL(resourceFile); + resourceFile.ConfirmSignatureL(0); + resourceFile.Offset(); + + aRetryCount = ResourceValueL(resourceFile, R_IDENTIFY_DIALOG_RETRY_COUNT); + aPinSize = ResourceValueL(resourceFile, R_PIN_SIZE); + aPinMinSize = ResourceValueL(resourceFile, R_PIN_MIN_SIZE); + aPinMaxSize = ResourceValueL(resourceFile, R_PIN_MAX_SIZE); + + HBufC8* res = resourceFile.AllocReadLC(R_PLUGIN_INFO); + TResourceReader reader; + reader.SetBuffer(res); + iPinName = reader.ReadTPtrC().AllocL(); + iPinDescription = reader.ReadTPtrC().AllocL(); + CleanupStack::PopAndDestroy(3, &fs); + } + +TInt CPinPlugin::ResourceValueL(RResourceFile& aResFile, const TInt aResourceID) + { + TResourceReader reader; + HBufC8* res = aResFile.AllocReadLC(aResourceID); + reader.SetBuffer(res); + TInt val = reader.ReadInt8(); + CleanupStack::PopAndDestroy(res); + return val; + } + +void CPinPlugin::SetPluginStateL() + { + // identifies the pinplugins state by looking for a file + // in system drive. + _LIT(KPinPlugin,"pinplugin_inactive.txt"); + TFileName filename; + filename.Copy(KPinPlugin); // convert from 8 -> 16 bit descriptor + + TDriveUnit sysDrive = RFs::GetSystemDrive(); + TDriveName sysDriveName (sysDrive.Name()); + filename.Insert(0,sysDriveName); + filename.Insert(2,_L("\\")); + + RFs fs; + User::LeaveIfError(fs.Connect()); + TEntry entry; + TInt err = fs.Entry(filename, entry); + if(err == KErrNone) + { + iActive = EFalse; + } + else if( err == KErrNotFound ) + { + iActive = ETrue; + } + else + { + User::LeaveIfError(err); + } + } + +// Map the interface UIDs to implementation factory functions +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(KPinPluginImplementationUid, CPinPlugin::NewL) + }; + +// Exported proxy function to resolve intstantiation methods for an ECOM plugin dll +EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } + + +const TPtrC& CPinPlugin::Name() const + { + return iName; + } +const TPtrC& CPinPlugin::Description() const + { + return iDescription; + } +TAuthPluginType CPinPlugin::Type() const + { + return iType; + } + +TEntropy CPinPlugin::MinEntropy() const + { + return iMinEntropy; + } + +TPercentage CPinPlugin::FalsePositiveRate() const + { + return iFalsePositiveRate; + } + +TPercentage CPinPlugin::FalseNegativeRate() const + { + return iFalseNegativeRate; + } + + + +