javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcertextrasreader.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javamanager/javacaptain/extensionplugins/javacertstore/src.s60/smartcardcertextrasreader.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2007-2007 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:
+*
+*/
+
+
+#include "smartcardcertextrasreader.h"
+
+using namespace std;
+
+namespace java
+{
+namespace security
+{
+
+SmartCardCertExtrasReader* SmartCardCertExtrasReader::NewL()
+{
+ SmartCardCertExtrasReader* self = new(ELeave) SmartCardCertExtrasReader();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+}
+
+void SmartCardCertExtrasReader::GetCertTrustedUsages(TDesC8& aSmartCardCertId, RCPointerArray<HBufC>& aSmartCardCertTrustedUsages)
+{
+ // make a copy of the cert id
+ if (iSmartCardCertId)
+ {
+ delete iSmartCardCertId;
+ iSmartCardCertId = NULL;
+ }
+ iSmartCardCertId = aSmartCardCertId.Alloc();
+
+ // keep a pointer to the provided array (this will be
+ // filled with the smart card cert's trusted usages)
+ iSmartCardCertTrustedUsages = &aSmartCardCertTrustedUsages;
+
+ // issue& complete the first request, so that we enter the state machine
+ //(implemented inside RunL method)
+ SetActive();
+ CompleteRequest(KErrNone);
+
+ // start the active scheduler
+ CActiveScheduler::Start();
+}
+
+void SmartCardCertExtrasReader::RunL()
+{
+ if (iStatus.Int() != KErrNone)
+ {
+ iState = EFinish;
+ }
+ switch (iState)
+ {
+ case EStart:
+ NextState(Initialize());
+ break;
+ case EGetExtras:
+ NextState(GetExtras());
+ break;
+ case EFinish:
+ NextState(Finish());
+ return;
+ }
+ // re-issue a new request
+ SetActive();
+}
+
+void SmartCardCertExtrasReader::DoCancel()
+{
+ switch (iState)
+ {
+ case EStart:
+ CancelInitialize();
+ break;
+ case EGetExtras:
+ CancelGetExtras();
+ break;
+ }
+}
+
+TInt SmartCardCertExtrasReader::RunError(TInt /*aError*/)
+{
+ CActiveScheduler::Stop();
+ return KErrNone;
+}
+
+
+bool SmartCardCertExtrasReader::Initialize()
+{
+ // do the initialization
+ iSmartCardCertExtras->Initialize(iStatus);
+ // the operation did succeed
+ return true;
+}
+
+bool SmartCardCertExtrasReader::GetExtras()
+{
+ // retrieve the certificate's extra info
+ iSmartCardCertExtras->GetExtras(iSmartCardCertId->Des(), *iSmartCardCertTrustedUsages, iSmartCardCertLocation, iStatus);
+ // the operation did succeed
+ return true;
+}
+
+bool SmartCardCertExtrasReader::Finish()
+{
+ // this is the final state
+ CActiveScheduler::Stop();
+ // the operation did succeed
+ return true;
+}
+
+
+
+void SmartCardCertExtrasReader::CancelInitialize()
+{
+ iSmartCardCertExtras->CancelInitialize();
+}
+
+void SmartCardCertExtrasReader::CancelGetExtras()
+{
+ iSmartCardCertExtras->CancelGetExtras();
+}
+
+void SmartCardCertExtrasReader::ConstructL()
+{
+ CActiveScheduler* CurrentActiveScheduler = CActiveScheduler::Current();
+ if (CurrentActiveScheduler == NULL)
+ {
+ iActiveScheduler = new(ELeave) CActiveScheduler;
+ CActiveScheduler::Install(iActiveScheduler);
+ }
+ CActiveScheduler::Add(this);
+ iSmartCardCertExtras = CWimCert::NewL();
+}
+
+SmartCardCertExtrasReader::SmartCardCertExtrasReader()
+ : CActive(EPriorityNormal), iState(EStart), iSmartCardCertTrustedUsages(NULL), iSmartCardCertExtras(NULL), iSmartCardCertId(NULL), iActiveScheduler(NULL)
+{
+}
+
+SmartCardCertExtrasReader::~SmartCardCertExtrasReader()
+{
+ if (iSmartCardCertExtras)
+ {
+ delete iSmartCardCertExtras;
+ iSmartCardCertExtras = NULL;
+ }
+ if (iSmartCardCertId)
+ {
+ delete iSmartCardCertId;
+ iSmartCardCertId = NULL;
+ }
+ if (iActiveScheduler)
+ {
+ delete iActiveScheduler;
+ iActiveScheduler = NULL;
+ }
+}
+
+void SmartCardCertExtrasReader::CompleteRequest(TInt aCompletionCode)
+{
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete(status,aCompletionCode);
+}
+
+void SmartCardCertExtrasReader::NextState(bool aCurrentOperationSucceeded)
+{
+ if (!aCurrentOperationSucceeded)
+ {
+ // cancel the outstanding request
+ CompleteRequest(KErrCancel);
+ // move on to the last state
+ iState = EFinish;
+ return;
+ }
+ switch (iState)
+ {
+ case EStart:
+ iState = EGetExtras;
+ break;
+ case EGetExtras:
+ iState = EFinish;
+ break;
+ case EFinish:
+ // reset the state to getextras
+ // (not to EStart, since we are already initialized)
+ iState = EGetExtras;
+ break;
+ }
+}
+
+} //end namespace security
+} //end namespace java