--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wim/WimPlugin/src/WimAuthenticationObjectList.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,353 @@
+/*
+* Copyright (c) 2002 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: Implementation of authentication object list
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "WimAuthenticationObjectList.h"
+#include "WimAuthenticationObject.h"
+#include "WimPin.h"
+#include "WimClsv.h"
+#include "WimTrace.h"
+#include "WimTokenListener.h"
+#include "WimImplementationUID.hrh"
+#include <mctauthobject.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::CWimAuthenticationObjectList()
+// Default constructor
+// -----------------------------------------------------------------------------
+//
+CWimAuthenticationObjectList::CWimAuthenticationObjectList( CWimToken& aToken ) :
+ CActive( EPriorityHigh ),
+ iToken( aToken )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::NewL()
+// Two phased constructor
+// -----------------------------------------------------------------------------
+//
+CWimAuthenticationObjectList*
+ CWimAuthenticationObjectList::NewL( CWimToken& aToken )
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::NewL()" ) );
+ CWimAuthenticationObjectList* that =
+ new( ELeave ) CWimAuthenticationObjectList( aToken );
+ CleanupStack::PushL( that );
+ that->ConstructL();
+ CleanupStack::Pop( that );
+ return that;
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::ConstructL()
+// Second phase constructor.
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::ConstructL()
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::ConstructL()" ) );
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CWimKeyStore::DoRelease()
+// Deletes this interface on demand.
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::DoRelease()
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::DoRelease()" ) );
+ delete this;
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::~CWimAuthenticationObjectList()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CWimAuthenticationObjectList::~CWimAuthenticationObjectList()
+ {
+ _WIMTRACE (
+ _L( "CWimAuthenticationObjectList::~CWimAuthenticationObjectList()" ) );
+ Cancel();
+ TInt count = iAuthObjects.Count();
+
+ while ( count )
+ {
+ CWimAuthenticationObject* entry = iAuthObjects[count - 1];
+ entry->Release();
+ iAuthObjects.Remove( count - 1 );
+ count--;
+ }
+
+ iAuthObjects.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::Token()
+// Returns a reference to current token (MCTToken) of this authentication
+// object list interface.
+// -----------------------------------------------------------------------------
+//
+MCTToken& CWimAuthenticationObjectList::Token()
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::Token()" ) );
+ return iToken;
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::List()
+// Lists all authentication objects.
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::List(
+ RMPointerArray<MCTAuthenticationObject>& aAuthObjects,
+ TRequestStatus& aStatus )
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::List()" ) );
+
+ if ( TokenRemoved() )
+ {
+ return;
+ }
+
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::List() after TokenRemoved checking" ) );
+ aStatus = KRequestPending;
+ iPhase = ECreateList;
+
+ iClientStatus = &aStatus;
+ iClientAuthObjects = &aAuthObjects;
+
+ iStatus = KRequestPending;
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::List() End" ) );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::DoListL()
+// Fetches first all authentication objects from Wim. After that makes a copy
+// each of them for the client.
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::DoListL(
+ RMPointerArray<MCTAuthenticationObject>& aAuthObjects )
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::DoListL()" ) );
+
+ TInt count = iAuthObjects.Count();
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+
+ //SecModUI will call Status() to get the PIN status later.
+ //We donot need to send PIN status in the phase
+
+ TUint32 status = 0;
+ CWimAuthenticationObject* me =
+ MakeAuthObjectL( iAuthObjects[i]->TokenWider(),
+ iAuthObjects[i]->PinModule(),
+ iAuthObjects[i]->Label(),
+ iAuthObjects[i]->Type(),
+ iAuthObjects[i]->Handle().iObjectId,
+ status );
+ CleanupStack::PushL( me );
+ User::LeaveIfError( aAuthObjects.Append( me ) );
+ CleanupStack::Pop( me );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::CreateListL()
+// This function creates an internal array for authentication objects.
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::CreateListL( TRequestStatus& aStatus )
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::CreateListL()" ) );
+
+ // Delete previous ones
+ TInt count = iAuthObjects.Count();
+
+ while ( count )
+ {
+ CWimAuthenticationObject* entry = iAuthObjects[count - 1];
+ entry->Release();
+ iAuthObjects.Remove( count - 1 );
+ count--;
+ }
+
+ TInt ret = iToken.WimSecModule()->PinNrEntriesL( iPinNRs, aStatus );
+
+ if ( ret != KErrNone )
+ {
+ User::Leave( ret );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::MakeAuthObjectL()
+// This function is called from two different places
+// -----------------------------------------------------------------------------
+//
+CWimAuthenticationObject*
+ CWimAuthenticationObjectList::MakeAuthObjectL( CWimToken& aToken,
+ CWimPin& aPinModule,
+ const TDesC& aLabel,
+ TUid aType,
+ TUint32 aHandle,
+ TUint32 aStatus )
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::MakeAuthObjectL()" ) );
+ CWimAuthenticationObject* me =
+ CWimAuthenticationObject::NewLC( aToken,
+ aPinModule,
+ aLabel,
+ aType,
+ aHandle,
+ aStatus );
+ CleanupStack::Pop( me );
+ return me;
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::CancelList()
+// Because List is synchronous, there is nothing to do here.
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::CancelList()
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::CancelList()" ) );
+ Cancel();
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::TokenRemoved()
+// Returns true or false indicating if token is removed
+// -----------------------------------------------------------------------------
+//
+TBool CWimAuthenticationObjectList::TokenRemoved()
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::TokenRemoved()" ) );
+ // If token listener is not alive, then token is removed
+ if ( iToken.TokenListener()->TokenStatus() != KRequestPending )
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::RunL()
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::RunL()
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::RunL()" ) );
+ switch ( iPhase )
+ {
+ case ECreateList:
+ {
+ iPhase = ECreateListDone;
+ iStatus = KRequestPending;
+ SetActive();
+ //iPinNRs is initialized here
+ CreateListL( iStatus );
+ break;
+ }
+
+ case ECreateListDone:
+ {
+ //Pin type is set here
+
+ if ( iPinNRs ) // If PINs were found
+ {
+ TUid pintype = {WIM_PIN_G_UID}; // The first one is always PIN-G
+ TInt count = iPinNRs->Count();
+ TUint32 status = 0;
+
+ for ( TInt i = 0; i < count; i++ )
+ {
+ CWimAuthenticationObject* me =
+ MakeAuthObjectL( iToken,
+ *( *iPinNRs )[i],
+ ( *iPinNRs )[i]->Label(),
+ pintype,
+ ( *iPinNRs )[i]->PinNumber(),
+ status );
+ CleanupStack::PushL( me );
+ User::LeaveIfError ( iAuthObjects.Append( me ) );
+ CleanupStack::Pop( me );
+ pintype.iUid = WIM_PIN_NR_UID; // The others are always PIN-NR
+ }
+ }
+ iPhase = EDoList;
+ iStatus = KRequestPending;
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ break;
+ }
+
+ case EDoList:
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::RunL(): EDoList" ) );
+ DoListL( *iClientAuthObjects );
+ User::RequestComplete( iClientStatus, KErrNone );
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::DoCancel()
+// -----------------------------------------------------------------------------
+//
+void CWimAuthenticationObjectList::DoCancel()
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::DoCancel()" ) );
+ User::RequestComplete( iClientStatus, KErrCancel );
+ }
+
+// -----------------------------------------------------------------------------
+// CWimAuthenticationObjectList::RunError()
+// -----------------------------------------------------------------------------
+//
+TInt CWimAuthenticationObjectList::RunError( TInt aError )
+ {
+ _WIMTRACE ( _L( "CWimAuthenticationObjectList::RunError()" ) );
+ User::RequestComplete( iClientStatus, aError );
+ return KErrNone;
+ }
+
+
+// End of File