--- a/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapCertFetcher.cpp Tue Aug 31 15:16:37 2010 +0300
+++ b/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapCertFetcher.cpp Wed Sep 01 12:23:57 2010 +0100
@@ -16,7 +16,7 @@
*/
/*
-* %version: %
+* %version: 31 %
*/
// This is enumeration of EAPOL source code.
@@ -32,8 +32,7 @@
#include "EapTlsPeapCertFetcher.h"
#include <EapTlsPeapUiCertificates.h>
-#include <EapTraceSymbian.h>
-#include <AbsEapCertificateFetcher.h>
+#include "eap_am_trace_symbian.h"
#include <x509cert.h>
#include <X509CertNameParser.h>
@@ -42,11 +41,8 @@
// ================= MEMBER FUNCTIONS =======================
-CEapTlsPeapCertFetcher* CEapTlsPeapCertFetcher::NewL(CAbsEapCertificateFetcher* const aParent)
+CEapTlsPeapCertFetcher* CEapTlsPeapCertFetcher::NewL(CEapTlsPeapUiCertificates* const aParent)
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::NewL(CAbsEapCertificateFetcher)\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::NewL(CAbsEapCertificateFetcher)\n"));
-
CEapTlsPeapCertFetcher* self = new(ELeave) CEapTlsPeapCertFetcher(aParent);
CleanupStack::PushL(self);
self->ConstructL();
@@ -59,9 +55,6 @@
// DON'T USE THIS FUNCTION. THIS IS ONLY FOR EapTlsPeapUtils.
CEapTlsPeapCertFetcher* CEapTlsPeapCertFetcher::NewL()
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::NewL()\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::NewL()\n"));
-
CEapTlsPeapCertFetcher* self = new(ELeave) CEapTlsPeapCertFetcher();
CleanupStack::PushL(self);
@@ -90,18 +83,12 @@
//--------------------------------------------------
-CEapTlsPeapCertFetcher::CEapTlsPeapCertFetcher(CAbsEapCertificateFetcher* const aParent)
+CEapTlsPeapCertFetcher::CEapTlsPeapCertFetcher(CEapTlsPeapUiCertificates* const aParent)
: CActive(CActive::EPriorityStandard)
-, iState(EGetCertificatesNone)
, iParent(aParent)
, iEncodedCertificate(0)
, iCertPtr(0,0)
-, iOwnertype(EUserCertificate)
-, iCertInfoIndex(0)
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::CEapTlsPeapCertFetcher(CAbsEapCertificateFetcher)\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::CEapTlsPeapCertFetcher(CAbsEapCertificateFetcher)\n"));
-
}
//--------------------------------------------------
@@ -109,25 +96,16 @@
// DON'T USE THIS FUNCTION. THIS IS ONLY FOR EapTlsPeapUtils.
CEapTlsPeapCertFetcher::CEapTlsPeapCertFetcher()
: CActive(CActive::EPriorityStandard)
-, iState(EGetCertificatesNone)
, iParent(NULL)
, iEncodedCertificate(0)
, iCertPtr(0,0)
-, iOwnertype(EUserCertificate)
-, iCertInfoIndex(0)
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::CEapTlsPeapCertFetcher()\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::CEapTlsPeapCertFetcher()\n"));
-
}
//--------------------------------------------------
void CEapTlsPeapCertFetcher::ConstructL()
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::ConstructL()\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::ConstructL()\n"));
-
User::LeaveIfError(iFs.Connect());
CActiveScheduler::Add(this);
@@ -141,9 +119,6 @@
CEapTlsPeapCertFetcher::~CEapTlsPeapCertFetcher()
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::~CEapTlsPeapCertFetcher()\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::~CEapTlsPeapCertFetcher()\n"));
-
// Delete iCertInfos
for (TInt i = 0; i < iCertInfos.Count(); i++)
{
@@ -151,19 +126,16 @@
}
iCertInfos.Reset();
- iCACerts.ResetAndDestroy();
-
- iUserCerts.ResetAndDestroy();
-
- delete iCertFilter;
- iCertFilter = 0;
+ iCACerts.Reset();
+ iUserCerts.Reset();
+
+ delete iCertFilter;
+
delete iCertStore;
- iCertStore = 0;
-
- delete iEncodedCertificate;
- iEncodedCertificate = 0;
-
+
+ delete iEncodedCertificate;
+
iFs.Close();
if(IsActive())
@@ -176,13 +148,6 @@
void CEapTlsPeapCertFetcher::GetCertificatesL()
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::GetCertificatesL()\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::GetCertificatesL()\n"));
-
- iCACerts.ResetAndDestroy();
-
- iUserCerts.ResetAndDestroy();
-
iState = EGetCertificatesInitStore;
if (iCertStore == 0)
{
@@ -197,145 +162,149 @@
SetActive();
}
-//--------------------------------------------------
void CEapTlsPeapCertFetcher::DoCancel()
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::DoCancel()\n")));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::DoCancel()\n"));
-
-}
-
-//--------------------------------------------------
-
-void CEapTlsPeapCertFetcher::InitializeQuery()
-{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::InitializeQuery(): iOwnertype=%d\n"),
- iOwnertype));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::InitializeQuery()\n"));
-
- // Delete iCertInfos
- for (TInt i = 0; i < iCertInfos.Count(); i++)
- {
- iCertInfos[i]->Release();
- }
- iCertInfos.Reset();
-
- delete iCertFilter;
- iCertFilter = 0;
-
- TRAPD(error, iCertFilter = CCertAttributeFilter::NewL());
- if (error != KErrNone)
- {
- // Complete with empty lists
- EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapCertFetcher::InitializeQuery() - Complete with empty lists Error:%d, iUserCerts.Count()=%d, iCACerts.Count()=%d\n"),
- error,
- iUserCerts.Count(),
- iCACerts.Count()) );
- TRAP(error, iParent->CompleteReadCertificatesL(iUserCerts, iCACerts));
- return;
- }
- iCertFilter->SetFormat(EX509Certificate);
-
- iCertFilter->SetOwnerType(iOwnertype);
-
- iCertInfoIndex = 0;
-
- iState = EGetCertificatesGetCertList;
-
- iCertStore->List(
- iCertInfos,
- *iCertFilter,
- iStatus);
-
- SetActive();
}
//--------------------------------------------------
void CEapTlsPeapCertFetcher::RunL()
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL(): - iStatus.Int()=%d, iState=%d \n"),
- iStatus.Int() , iState));
- EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapCertFetcher::RunL()\n"));
-
- //int i;
- TInt error(KErrNone);
+ EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL - iStatus.Int()=%d, iState=%d \n"),
+ iStatus.Int() , iState));
+ if( iState == EGetSymbianSubjectKeyId )
+ {
+ // Only for GetSymbianSubjectKeyIdL.
+ iWait.AsyncStop(); // This is needed to continue the execution after Wait.Start()
+ return; // No need to proceed further.
+ }
+
+ if( iState == EGetCertificatesRetrieveCert)
+ {
+ // This is executed when certificate details are being retrieved.
+ iWait.AsyncStop(); // This is needed to continue the execution after Wait.Start()
+ return; // No need to proceed further.
+ }
+
+ int i;
+ TInt err(KErrNone);
// This causes panic if leaves
if (iStatus.Int() != KErrNone)
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL() -- don't leave...")));
+RDebug::Print(_L("CEapTlsPeapCertFetcher::RunL() -- don't leave..."));
}
switch (iState)
{
case EGetCertificatesInitStore:
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL(): - EGetCertificatesInitStore\n")));
+ // Delete iCertInfos
+ for (TInt i = 0; i < iCertInfos.Count(); i++)
+ {
+ iCertInfos[i]->Release();
+ }
+ iCertInfos.Reset();
+
+ delete iCertFilter;
+ iCertFilter = 0;
+
+ TRAP(err, iCertFilter = CCertAttributeFilter::NewL());
+ if (err != KErrNone)
+ {
+ // Complete with empty lists
+ TInt err(KErrNone);
+ TRAP(err, iParent->CompleteReadCertificatesL(iUserCerts, iCACerts));
+ break;
+ }
+ iCertFilter->SetFormat(EX509Certificate);
- // First get the User certificates.
- iOwnertype = EUserCertificate;
- InitializeQuery();
+ iState = EGetCertificatesGetCertList;
+ iCertStore->List(
+ iCertInfos,
+ *iCertFilter,
+ iStatus);
+ SetActive();
}
break;
- case EGetCertificatesRetrieveCert:
+ case EGetCertificatesGetCertList:
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL(): - EGetCertificatesRetrieveCert - Symbian cert store found %d certs in device\n"),
- iCertInfos.Count()));
-
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL() - iWait.Start() returned, iStatus.Int()=%d \n"),iStatus.Int() ) );
-
- CCTCertInfo* CertInfo = iCertInfos[iCertInfoIndex];
- CCertificate* cert = NULL;
+ EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL - EGetCertificatesGetCertList - Symbian cert store found %d certs in device\n"),
+ iCertInfos.Count()));
+
+ if(0 == iCertInfos.Count())
+ {
+ EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR : CEapTlsPeapCertFetcher::RunL - SERIOUS PROBLEM - Symbian cert store couldn't find any certs in device\n")));
+ }
+
+ for (i = 0; i < iCertInfos.Count(); i++)
+ {
+ CCTCertInfo* CertInfo;
+ CertInfo = iCertInfos[i];
+ iEncodedCertificate->Des().SetLength(0);
+
+ TRAPD(err, iEncodedCertificate = iEncodedCertificate->ReAllocL(iCertInfos[i]->Size()));
+ if (err != KErrNone)
+ {
+ EAP_TRACE_DEBUG_SYMBIAN((_L("\nCEapTlsPeapCertFetcher::RunL() - EGetCertificatesGetCertList - leave from iEncodedCertificate->ReAllocL Error:%d\n"), err ) );
+ }
+ iCertPtr.Set(iEncodedCertificate->Des());
- if ( iStatus.Int() == KErrNone )
- {
- switch ( CertInfo->CertificateFormat() )
- {
- case EX509Certificate:
- {
- TRAPD(error, cert = CX509Certificate::NewL( iCertPtr ));
- if (error != KErrNone)
- {
- EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapCertFetcher::RunL() - EGetCertificatesGetCertList - leave from CX509Certificate::NewL Label:%S Error:%d\n"),
- &(CertInfo->Label()),
- error ) );
+ EAP_TRACE_DEBUG_SYMBIAN((_L("\nCEapTlsPeapCertFetcher::RunL() - EGetCertificatesGetCertList - Retreiving cert %d\n"), i ) );
+
+ iCertStore->Retrieve( *CertInfo, iCertPtr, iStatus);
+
+ iState = EGetCertificatesRetrieveCert;
+
+ SetActive();
+ iWait.Start();
+
+ EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL() - iWait.Start() returned, iStatus.Int()=%d \n"),iStatus.Int() ) );
+
+ CCertificate* cert = NULL;
- cert = NULL;
- }
- break;
- }
- default:
- {
- // Only X509 type of certificates are supported at the moment.
- // This won't be happening ever since we have used a filter while getting the certificate list.
- EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapCertFetcher::RunL() - Unsupported Certificate - Not X509\n") ) );
-
- cert = NULL;
- }
- }
- }
- else
- {
- EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapCertFetcher::RunL() - Error from Certificate retrieve, iStatus.Int()=%d\n"), iStatus.Int() ) );
- }
+ if ( iStatus.Int() == KErrNone )
+ {
+ switch ( CertInfo->CertificateFormat() )
+ {
+ case EX509Certificate:
+ {
+ TRAPD(err, cert = CX509Certificate::NewL( iCertPtr ));
+ if (err != KErrNone)
+ EAP_TRACE_DEBUG_SYMBIAN((_L("\nCEapTlsPeapCertFetcher::RunL() - EGetCertificatesGetCertList - leave from CX509Certificate::NewL Label:%S Error:%d\n"),&(CertInfo->Label()), err ) );
+ break;
+ }
+ default:
+ {
+ // Only X509 type of certificates are supported at the moment.
+ // This won't be happening ever since we have used a filter while getting the certificate list.
+ EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL() - Unsupported Certificate - Not X509\n") ) );
+
+ break;
+ }
+ }
+ }
+ else
+ {
+ EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL() - Error from Certificate retrieve, iStatus.Int()=%d\n"), iStatus.Int() ) );
+ }
- if( cert != NULL )
- {
- HBufC* pri = NULL;
- HBufC* sec = NULL;
+ if( cert == NULL )
+ {
+ // Some problem above. Skip the below and go for the next certificate.
+ continue;
+ }
- CleanupStack::PushL(cert);
+ HBufC* pri = NULL;
+ HBufC* sec = NULL;
+
+ CleanupStack::PushL( cert );
- X509CertNameParser::PrimaryAndSecondaryNameL( *((CX509Certificate*)cert), pri, sec, CertInfo->Label());
+ X509CertNameParser::PrimaryAndSecondaryNameL( *((CX509Certificate*)cert), pri, sec, CertInfo->Label());
- CleanupStack::PopAndDestroy(cert);
-
- CleanupStack::PushL(pri);
- CleanupStack::PushL(sec);
-
+ CleanupStack::PopAndDestroy(); // cert
EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL() - Label=%S, Pri name=%S,Length=%d, Sec name=%S,Length=%d\n"),
&(CertInfo->Label()), pri, pri->Length(), sec, sec->Length() ) );
@@ -343,120 +312,45 @@
EAP_TRACE_DATA_DEBUG_SYMBIAN( ( "CEapTlsPeapCertFetcher::RunL() - Sub Key Id:", (CertInfo->SubjectKeyId().Ptr()),
(CertInfo->SubjectKeyId().Size()) ) );
- EapCertificateEntry * const certEntry = new EapCertificateEntry;
- if (certEntry == 0)
- {
- User::Leave(KErrNoMemory);
- }
- CleanupStack::PushL(certEntry);
-
- certEntry->SetLabel(CertInfo->Label());
- certEntry->SetSubjectKeyId(CertInfo->SubjectKeyId());
-
+ SCertEntry certEntry;
+
+ certEntry.iLabel.Copy(iCertInfos[i]->Label());
+ certEntry.iSubjectKeyId.Copy(iCertInfos[i]->SubjectKeyId());
+
// Copy the new fields. Primary and secondary name.
- certEntry->SetPrimaryName(pri->Des().Left(KMaxCertNameLength));
- certEntry->SetSecondaryName(sec->Des().Left(KMaxCertNameLength));
-
- if (CertInfo->CertificateOwnerType() == ECACertificate)
- {
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL(): - CA certificate\n")));
-
- certEntry->SetCertType(EapCertificateEntry::ECA);
- error = iCACerts.Append(certEntry);
- }
- else if (CertInfo->CertificateOwnerType() == EUserCertificate)
+ certEntry.iPrimaryName.Copy( pri->Des().Left(KMaxNameLength ) );
+ certEntry.iSecondaryName.Copy( sec->Des().Left(KMaxNameLength ) );
+
+ delete pri;
+ delete sec;
+
+ if (iCertInfos[i]->CertificateOwnerType() == ECACertificate)
{
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL(): - User certificate\n")));
-
- certEntry->SetCertType(EapCertificateEntry::EUser);
- error = iUserCerts.Append(certEntry);
- }
- else
- {
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL(): - Unknown certificate\n")));
- }
-
- if (error == KErrNone)
- {
- CleanupStack::Pop(certEntry);
+ iCACerts.Append(certEntry);
}
- else
+ else if (iCertInfos[i]->CertificateOwnerType() == EUserCertificate)
{
- CleanupStack::PopAndDestroy(certEntry);
- }
-
- CleanupStack::PopAndDestroy(sec);
- CleanupStack::PopAndDestroy(pri);
-
+ iUserCerts.Append(certEntry);
+ }
}
-
- ++iCertInfoIndex;
- }
-
- // Here MUST NOT be break. State EGetCertificatesGetCertList is run after the state EGetCertificatesRetrieveCert.
+ delete iCertFilter;
+ iCertFilter = 0;
- case EGetCertificatesGetCertList:
- {
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL(): - EGetCertificatesGetCertList - Symbian cert store found %d certs in device, iCertInfoIndex=%d\n"),
- iCertInfos.Count(),
- iCertInfoIndex));
-
- if (iCertInfoIndex < iCertInfos.Count())
- {
- CCTCertInfo* CertInfo = iCertInfos[iCertInfoIndex];
-
- iEncodedCertificate->Des().SetLength(0);
-
- TRAPD(error, iEncodedCertificate = iEncodedCertificate->ReAllocL(CertInfo->Size()));
- if (error != KErrNone)
- {
- EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapCertFetcher::RunL() - EGetCertificatesGetCertList - leave from iEncodedCertificate->ReAllocL Error:%d\n"), error ) );
- }
- iCertPtr.Set(iEncodedCertificate->Des());
-
- EAP_TRACE_DEBUG_SYMBIAN((_L("\nCEapTlsPeapCertFetcher::RunL() - EGetCertificatesGetCertList - Retreiving cert %d\n"), iCertInfoIndex ) );
-
- iState = EGetCertificatesRetrieveCert;
-
- iCertStore->Retrieve( *CertInfo, iCertPtr, iStatus);
-
- SetActive();
+ // Delete iCertInfos
+ for (TInt i = 0; i < iCertInfos.Count(); i++)
+ {
+ iCertInfos[i]->Release();
}
- else if (iOwnertype == EUserCertificate)
- {
- // Next get the CA certificates.
- iOwnertype = ECACertificate;
- InitializeQuery();
- return;
- }
- else
- {
- delete iCertFilter;
- iCertFilter = 0;
-
- // Delete iCertInfos
- for (TInt i = 0; i < iCertInfos.Count(); i++)
- {
- iCertInfos[i]->Release();
- }
- iCertInfos.Reset();
-
- EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapCertFetcher::RunL() - EGetCertificatesGetCertList - Complete list, iUserCerts.Count()=%d, iCACerts.Count()=%d\n"),
- iUserCerts.Count(),
- iCACerts.Count()) );
-
- TRAP(error, iParent->CompleteReadCertificatesL(iUserCerts, iCACerts));
- // Ignore error on purpose.
- }
+ iCertInfos.Reset();
+ TRAP(err, iParent->CompleteReadCertificatesL(iUserCerts, iCACerts));
+ // Ignore error on purpose.
}
break;
default:
- EAP_TRACE_DEBUG_SYMBIAN((_L("WARNING: CEapTlsPeapCertFetcher::RunL(): - default\n")));
break;
}
return;
}
-//--------------------------------------------------
// End of file