eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapUiCertificates.cpp
branchRCL_3
changeset 46 c74b3d9f6b9e
parent 45 bad0cc58d154
--- a/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapUiCertificates.cpp	Tue Aug 31 15:16:37 2010 +0300
+++ b/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapUiCertificates.cpp	Wed Sep 01 12:23:57 2010 +0100
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: 52 %
+* %version: 18.1.2 %
 */
 
 // This is enumeration of EAPOL source code.
@@ -28,24 +28,22 @@
 #endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
 
 #include <e32base.h>
-//#include "EapTlsPeapUtils.h"
+#include "EapTlsPeapUtils.h"
 #include "EapTlsPeapDbDefaults.h"
 #include "EapTlsPeapDbParameterNames.h"
 #include <EapTlsPeapUiConnection.h>
 #include <EapTlsPeapUiCertificates.h>
-#include <EapGeneralSettings.h>
+#include <EapTlsPeapUiCertificate.h>
+#include "EapTlsPeapCertFetcher.h"
 #include <AbsEapTlsPeapUiCertificates.h>
-#include <EapTraceSymbian.h>
-#include "EapConversion.h"
-#include <EapType.h>
+#include "eap_am_trace_symbian.h"
 
 #include <unifiedcertstore.h>
 #include <mctwritablecertstore.h>
 
+const TUint KMaxSqlQueryLength = 256;
 const TUint KCertArrayGranularity = 16;
 
-// ----------------------------------------------------------
-
 CEapTlsPeapUiCertificates::CEapTlsPeapUiCertificates(
 	CEapTlsPeapUiConnection * const aUiConn,
 	MEapTlsPeapUiCertificates * const aParent)
@@ -53,117 +51,83 @@
 , iUiConn(aUiConn)
 , iUserCerts(0)
 , iCACerts(0)
-, iEapGeneralSettings(0)
 , iParent(aParent)
-, iEapTypeConnection(0)
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::CEapTlsPeapUiCertificates()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::CEapTlsPeapUiCertificates()\n"));
-
 }
 
-// ----------------------------------------------------------
 
 CEapTlsPeapUiCertificates::~CEapTlsPeapUiCertificates()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::~CEapTlsPeapUiCertificates()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::~CEapTlsPeapUiCertificates()\n"));
-
-	Close();
+    if (iUiConn)
+    {
+        Close();
+        iUiConn = NULL;
+    }
 }
 
-// ----------------------------------------------------------
 
 TInt CEapTlsPeapUiCertificates::Open()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::Open()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::Open()\n"));
-
     if (iIsOpened)
     {
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::Open(): KErrAlreadyExists\n")));
         return KErrAlreadyExists;
     }
 
-	TEapExpandedType aEapType(iUiConn->GetEapType());
+    TInt err = iUiConn->GetDatabase(iDatabase);
+    if (err != KErrNone)
+    {
+        return err;
+    }
 
-	TRAPD(error, iEapTypeConnection = CEapType::NewL(iUiConn->GetIndexType(), iUiConn->GetIndex(), aEapType));
-	if (error != KErrNone)
+	TRAP(err, iCertFetcher = CEapTlsPeapCertFetcher::NewL(this));
+	if (err != KErrNone)
 	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::Open(): CEapType::NewL() error=%d\n"),error));
-		return error;
+		return err;
 	}
-    
-    iEapTypeConnection->SetTunnelingType(iUiConn->GetTunnelingType());
-
-    TRAP(error, iEapGeneralSettings = CEapGeneralSettings::NewL(iUiConn->GetIndexType(), iUiConn->GetIndex()));
-    if (error != KErrNone)
-        {
-        EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::Open(): CEapGeneralSettings::NewL() error=%d\n"),error));
-        return error;
-        }
 
     iIsOpened = ETrue;
 
     return KErrNone;
 }
 
-// ----------------------------------------------------------
 
 TInt CEapTlsPeapUiCertificates::Close()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::Close()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::Close()\n"));
-
-	if (iIsOpened == EFalse)
-	{
-		return KErrNone;
-	}
-
-	delete iUserCerts;
-	iUserCerts = 0;
+    if (iIsOpened == EFalse)
+    {
+        return KErrNone;
+    }
 
-	delete iCACerts;
-	iCACerts = 0;
-
-	delete iEapGeneralSettings;
-	iEapGeneralSettings = 0;
-
-	iUiConn = NULL;
-
-	iIsOpened = EFalse;
-
-	return KErrNone;
+    delete iUserCerts;
+    iUserCerts = 0;
+    
+    delete iCACerts;
+    iCACerts = 0;
+    
+    delete iCertFetcher;
+	iCertFetcher = 0;
+	    
+    iUiConn = NULL;
+    return KErrNone;
 }
 
-// ----------------------------------------------------------
-
-TInt CEapTlsPeapUiCertificates::GetCertificates(
-	RPointerArray<EapCertificateEntry> ** aUserCerts,
-	RPointerArray<EapCertificateEntry> ** aCACerts)
+TInt CEapTlsPeapUiCertificates::GetCertificates(CArrayFixFlat<TEapTlsPeapUiCertificate> ** aUserCerts,
+					CArrayFixFlat<TEapTlsPeapUiCertificate> ** aCACerts)
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::GetCertificates()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::GetCertificates()\n"));
-
 	if (aUserCerts == NULL
 		|| aCACerts == NULL)
     {
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::GetCertificates(): KErrArgument\n")));
         return KErrArgument;
     }
-
     if (iIsOpened == EFalse)
     {
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::GetCertificates(): KErrSessionClosed\n")));
         return KErrSessionClosed;
     }
-
     if (iUserCerts == 0)
     {
-    	iUserCerts = new RPointerArray<EapCertificateEntry>(KCertArrayGranularity);
+    	iUserCerts = new CArrayFixFlat<TEapTlsPeapUiCertificate>(KCertArrayGranularity);
     	if (!iUserCerts)
     	{
-			EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::GetCertificates(): iUserCerts, KErrNoMemory\n")));
 	        return KErrNoMemory;
 	    }	
     }
@@ -172,236 +136,460 @@
     
     if (iCACerts == 0)
     {
-	    iCACerts = new RPointerArray<EapCertificateEntry>(KCertArrayGranularity);
+	    iCACerts = new CArrayFixFlat<TEapTlsPeapUiCertificate>(KCertArrayGranularity);
 	    if (!iUserCerts)
 	    {
-			EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::GetCertificates(): iCACerts, KErrNoMemory\n")));
 	        return KErrNoMemory;
 	    }
     }
     *aCACerts = iCACerts;
     
-	TInt error(KErrNone);
-
-	error = iEapGeneralSettings->GetCertificateLists(
-		*iUserCerts,
-		*iCACerts);
-
-	if (error != KErrNone)
-	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::GetCertificates(): GetCertificateLists() error=%d\n"),
-			error));
-		iParent->CompleteReadCertificates(error);
-	    return error;
-	}
-
-	TRAP(error, SelectActiveCertificatesL());
+	TRAPD(err, iCertFetcher->GetCertificatesL());
 	
-	return error;
+	return err;
 }
-
-// ----------------------------------------------------------
+						 
 
-void CEapTlsPeapUiCertificates::SelectCertificatesL(
-	const EapCertificateEntry::TCertType aCertType,
-	const EAPSettings & aSettings,
-	RPointerArray<EapCertificateEntry>& aAvailableCerts)
+void CEapTlsPeapUiCertificates::CompleteReadCertificatesL(
+		const RArray<SCertEntry>& aAvailableUserCerts, 
+		const RArray<SCertEntry>& aAvailableCACerts)
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::SelectCertificatesL(): - Available cert count in device aAvailableCerts.Count()=%d, aSettings.iCertificates.Count()=%d\n"),
-		aAvailableCerts.Count(),
-		aSettings.iCertificates.Count()));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::SelectCertificatesL()\n"));
+
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::CompleteReadCertificatesL - Available cert count in device - USER=%d, CA=%d \n"),
+	aAvailableUserCerts.Count(), aAvailableCACerts.Count()));
 
-	// Loop through available certs
-	TInt avail_ind(0);
-
-	for (avail_ind = 0; avail_ind < aAvailableCerts.Count(); ++avail_ind)
+	// Now all available certificates have been read.
+	// Get the allowed certs from the database and set their iIsEnabled flag -> ETrue.
+    TInt err(KErrNone);
+	if (iUiConn->GetEapType() == eap_type_tls)
 	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::SelectCertificatesL(): loops aAvailableCerts avail_ind=%d, aAvailableCerts.Count()=%d, aSettings.iCertificates.Count()=%d\n"),
-			avail_ind,
-			aAvailableCerts.Count(),
-			aSettings.iCertificates.Count()) );
-
-		EapCertificateEntry * const avail_cert = aAvailableCerts[avail_ind];
-
-		EAP_TRACE_SETTINGS(avail_cert);
-
-		avail_cert->SetIsEnabled(EFalse);
-
-		if (aSettings.iCertificatesPresent)
+		TRAP(err, FetchDataL(KTlsAllowedUserCertsDatabaseTableName, aAvailableUserCerts, iUserCerts));
+		if (err != KErrNone)
 		{
-			TInt select_ind(0);
+			EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::CompleteReadCertificatesL -TLS- USER cert - LEAVE from FetchDataL err=%d\n"),
+			err));
+		
+			iParent->CompleteReadCertificates(err);
+			return;
+		}
+		TRAP(err, FetchDataL(KTlsAllowedCACertsDatabaseTableName, aAvailableCACerts, iCACerts));
+		if (err != KErrNone)
+		{
+			EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::CompleteReadCertificatesL -TLS- CA cert - LEAVE from FetchDataL err=%d\n"),
+			err));
 
-			for (select_ind = 0; select_ind < aSettings.iCertificates.Count(); ++select_ind)
-			{
-				EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::SelectCertificatesL(): loops aSettings.iCertificates select_ind=%d\n"),
-					select_ind ) );
-
-				EapCertificateEntry * const conf_cert = aSettings.iCertificates[select_ind];
-
-				EAP_TRACE_SETTINGS(conf_cert);
-
-				if (aCertType == conf_cert->GetCertType()
-					&& avail_cert->GetSubjectKeyId() == conf_cert->GetSubjectKeyId())
-				{
-					avail_cert->SetIsEnabled(ETrue);
-
-					EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::SelectCertificatesL(): - Reading certificate details from the DB - Label=%S \n"),
-						avail_cert->GetLabel() ) );
-
-					EAP_TRACE_DATA_DEBUG_SYMBIAN(("Subject Key Id:",
-						avail_cert->GetSubjectKeyId().Ptr(),
-						avail_cert->GetSubjectKeyId().Length()));
-				}
-			}
+			iParent->CompleteReadCertificates(err);
+			return;
+		}
+		
+	}
+	else if (iUiConn->GetEapType() == eap_type_peap)
+	{	
+	
+		TRAP(err, FetchDataL(KPeapAllowedUserCertsDatabaseTableName, aAvailableUserCerts, iUserCerts));
+		if (err != KErrNone)
+		{
+			EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::CompleteReadCertificatesL -PEAP- USER cert - LEAVE from FetchDataL err=%d\n"),
+			err));
+		
+			iParent->CompleteReadCertificates(err);
+			return;
+		}
+		TRAP(err, FetchDataL(KPeapAllowedCACertsDatabaseTableName, aAvailableCACerts, iCACerts));
+		if (err != KErrNone)
+		{
+			EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::CompleteReadCertificatesL -PEAP- CA cert - LEAVE from FetchDataL err=%d\n"),
+			err));
+		
+			iParent->CompleteReadCertificates(err);
+			return;
 		}
 	}
-}
-
-// ----------------------------------------------------------
-
-void CEapTlsPeapUiCertificates::SelectActiveCertificatesL()
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::SelectActiveCertificatesL(): - Available cert count in device - USER=%d, CA=%d \n"),
-		iUserCerts->Count(), iCACerts->Count()));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::SelectActiveCertificatesL()\n"));
-
-	// Now all available certificates have been read.
-	// Get the allowed certs from the server and set their iIsEnabled flag -> ETrue.
-
-    EAPSettings aSettings;
-    
-	TRAPD(error, iEapTypeConnection->GetConfigurationL(aSettings));
-	if (error)
+	else if (iUiConn->GetEapType() == eap_type_ttls || iUiConn->GetEapType() == eap_type_ttls_plain_pap)
+	{	
+	
+		TRAP(err, FetchDataL(KTtlsAllowedUserCertsDatabaseTableName, aAvailableUserCerts, iUserCerts));
+		if (err != KErrNone)
+		{
+			EAP_TRACE_DEBUG_SYMBIAN((_L(
+			"CEapTlsPeapUiCertificates::CompleteReadCertificatesL -TTLS- USER cert - LEAVE from FetchDataL err=%d\n"),
+			err));
+		
+			iParent->CompleteReadCertificates(err);
+			return;
+		}
+		TRAP(err, FetchDataL(KTtlsAllowedCACertsDatabaseTableName, aAvailableCACerts, iCACerts));
+		if (err != KErrNone)
+		{
+			EAP_TRACE_DEBUG_SYMBIAN((_L(
+			"CEapTlsPeapUiCertificates::CompleteReadCertificatesL -TTLS- CA cert - LEAVE from FetchDataL err=%d\n"),
+			err));
+		
+			iParent->CompleteReadCertificates(err);
+			return;
+		}
+	}
+	
+#ifdef USE_FAST_EAP_TYPE
+	else if (iUiConn->GetEapType() == eap_type_fast)
+	{	
+	
+		TRAP(err, FetchDataL(KFastAllowedUserCertsDatabaseTableName, aAvailableUserCerts, iUserCerts));
+		if (err != KErrNone)
+		{
+			EAP_TRACE_DEBUG_SYMBIAN((_L(
+			"CEapTlsPeapUiCertificates::CompleteReadCertificatesL -FAST- USER cert - LEAVE from FetchDataL err=%d\n"),
+			err));
+		
+			iParent->CompleteReadCertificates(err);
+			return;
+		}
+		TRAP(err, FetchDataL(KFastAllowedCACertsDatabaseTableName, aAvailableCACerts, iCACerts));
+		if (err != KErrNone)
+		{
+			EAP_TRACE_DEBUG_SYMBIAN((_L(
+			"CEapTlsPeapUiCertificates::CompleteReadCertificatesL -FAST- CA cert - LEAVE from FetchDataL err=%d\n"),
+			err));
+		
+			iParent->CompleteReadCertificates(err);
+			return;
+		}
+	}
+#endif //#ifdef USE_FAST_EAP_TYPE
+	
+	else 
 	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::SelectActiveCertificatesL(): GetConfigurationL(): failed %d\n"), error));
-		iParent->CompleteReadCertificates(error);
-		User::Leave(error);
+		iParent->CompleteReadCertificates(KErrNotSupported);
+		return;
 	}
-
-	TRAP(error, SelectCertificatesL(EapCertificateEntry::EUser, aSettings, *iUserCerts));
-	if (error)
-	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::SelectActiveCertificatesL(): SelectCertificatesL(iUserCerts): failed %d\n"), error));
-		iParent->CompleteReadCertificates(error);
-		User::Leave(error);
-	}
-
-	TRAP(error, SelectCertificatesL(EapCertificateEntry::ECA, aSettings, *iCACerts));
-	if (error)
-	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::SelectActiveCertificatesL(): SelectCertificatesL(iCACerts): failed %d\n"), error));
-		iParent->CompleteReadCertificates(error);
-		User::Leave(error);
-	}
-
+	
 	// Operation was successful
 	iParent->CompleteReadCertificates(KErrNone);
 }
 
-// ----------------------------------------------------------
+void CEapTlsPeapUiCertificates::FetchDataL(
+	const TDesC& aTableName,
+	const RArray<SCertEntry>& aAvailableCerts,
+	CArrayFixFlat<TEapTlsPeapUiCertificate>* const aArray)
+{
+
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::FetchDataL - Fetching & comparing cert details from table:%S\n"),
+	&aTableName));
+
+	aArray->Reset();
+	
+	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
+	TPtr sqlStatement = buf->Des();
+
+	// Form the query. Query everything.
+	_LIT(KSQLQuery, "SELECT * FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
 
-void CEapTlsPeapUiCertificates::SaveCertificatesL(
-	const EapCertificateEntry::TCertType /* aCertType */,
-	const RPointerArray<EapCertificateEntry>* const aAvailableCerts,
-	EAPSettings & aSettings)
+	sqlStatement.Format(KSQLQuery,						
+						&aTableName,
+						&KServiceType,
+						iUiConn->GetIndexType(),
+						&KServiceIndex,
+						iUiConn->GetIndex(),
+						&KTunnelingType, 
+						iUiConn->GetTunnelingType());
+	
+	// Evaluate view
+	RDbView view;
+	User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement)));
+	CleanupClosePushL(view);
+	User::LeaveIfError(view.EvaluateAll());	
+	
+	// Get column set so we get the correct column numbers
+	CDbColSet* colSet = view.ColSetL();
+	CleanupStack::PushL(colSet);
+	
+	TEapTlsPeapUiCertificate tmp;
+	
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::FetchDataL - Available certs=%d\n"),
+	aAvailableCerts.Count()));
+	
+	// Loop through available certs
+	TInt i(0);
+	for (i = 0; i < aAvailableCerts.Count(); i++)
+	{
+		SCertEntry cert = aAvailableCerts[i];
+		
+		tmp.iCertEntry = cert;
+		tmp.iIsEnabled = EFalse;
+		
+		// Try to find the cert from the database rows
+		if (view.FirstL())
+		{
+			do 
+			{
+				view.GetL();
+				if ((view.ColDes(colSet->ColNo(KCertLabel)) == cert.iLabel 
+					|| view.IsColNull(colSet->ColNo(KCertLabel)))
+					&& view.ColDes8(colSet->ColNo(KSubjectKeyIdentifier)) == cert.iSubjectKeyId)
+				{
+					tmp.iIsEnabled = ETrue;
+					
+					EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::FetchDataL - Reading certificate details from the DB - Label=%S \n"),
+					&(cert.iLabel) ) );
+					
+					EAP_TRACE_DATA_DEBUG_SYMBIAN( ( "Subject Key Id:", cert.iSubjectKeyId.Ptr(), 
+																cert.iSubjectKeyId.Size() ) );					
+					break;
+				}
+			} while (view.NextL() != EFalse);
+		}
+		
+		aArray->AppendL(tmp);
+	}
+	CleanupStack::PopAndDestroy(); // colset
+	CleanupStack::PopAndDestroy(); // view
+    CleanupStack::PopAndDestroy(buf);
+}
+
+TInt CEapTlsPeapUiCertificates::Update()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::SaveCertificatesL(): - Available cert count %d \n"),
-		aAvailableCerts->Count()));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::SaveCertificatesL()\n"));
+	TRAPD(err, UpdateL());
+	
+	if(KErrNone != err)
+	{
+		EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::Update - UpdateL LEAVES with error =%d \n"),
+		err));		
+	}
 
-	TInt avail_ind(0);
-	for (avail_ind = 0; avail_ind < aAvailableCerts->Count(); avail_ind++)
+	return err;
+}
+
+
+void CEapTlsPeapUiCertificates::UpdateL()
+{
+	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
+	TPtr sqlStatement = buf->Des();
+
+	// USER CERTIFICATES
+	_LIT(KSQL, "SELECT * FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
+	
+	if (iUiConn->GetEapType() == eap_type_tls)
+	{
+		sqlStatement.Format(
+			KSQL, 
+			&KTlsAllowedUserCertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}
+	else if (iUiConn->GetEapType() == eap_type_peap)
+	{
+		sqlStatement.Format(
+			KSQL, 
+			&KPeapAllowedUserCertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}	
+	else if (iUiConn->GetEapType() == eap_type_ttls || iUiConn->GetEapType() == eap_type_ttls_plain_pap)
 	{
-		if ((*aAvailableCerts)[avail_ind]->GetIsEnabled())
+		sqlStatement.Format(
+			KSQL, 
+			&KTtlsAllowedUserCertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}
+	
+#ifdef USE_FAST_EAP_TYPE	
+	else if (iUiConn->GetEapType() == eap_type_fast)
+	{
+		sqlStatement.Format(
+			KSQL, 
+			&KFastAllowedUserCertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}
+#endif //#ifdef USE_FAST_EAP_TYPE	
+
+	RDbView view;	
+	User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement), TDbWindow::EUnlimited));	
+	CleanupClosePushL(view);
+	User::LeaveIfError(view.EvaluateAll());
+
+	// Get column set so we get the correct column numbers
+	CDbColSet* colSet;
+	colSet = view.ColSetL();
+	CleanupStack::PushL(colSet);
+
+	// Delete old rows
+	if (view.FirstL())
+	{		
+		do {
+			view.DeleteL();
+		} while (view.NextL() != EFalse);
+	}
+	
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::UpdateL - About to update cert details in the DB - User cert count=%d \n"),
+	iUserCerts->Count()));
+	
+	TInt i(0);
+	for (i = 0; i < iUserCerts->Count(); i++)
+	{
+		if ((*iUserCerts)[i].iIsEnabled)
 		{
-			EAP_TRACE_SETTINGS((*aAvailableCerts)[avail_ind]);
-
 			// Validate data lengths.
-			if((*aAvailableCerts)[avail_ind]->GetLabel()->Length() > KMaxCertLabelLengthInDB 
-				|| (*aAvailableCerts)[avail_ind]->GetSubjectKeyId().Length() > KMaxSubjectKeyIdLengthInDB)
+			if((*iUserCerts)[i].iCertEntry.iLabel.Length() > KMaxCertLabelLengthInDB 
+				|| (*iUserCerts)[i].iCertEntry.iSubjectKeyId.Length() > KMaxSubjectKeyIdLengthInDB)
 			{
 				// Too long data. Can not be stored in DB.
 
-				EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::UpdateL(): User : Too long Label or SubjectKeyId. Length: Label=%d, SubjectKeyId=%d \n"),
-					(*aAvailableCerts)[avail_ind]->GetLabel()->Length(),
-					(*aAvailableCerts)[avail_ind]->GetSubjectKeyId().Length()));
+				EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::UpdateL: User : Too long Label or SubjectKeyId. Length: Label=%d, SubjectKeyId=%d \n"),
+				(*iUserCerts)[i].iCertEntry.iLabel.Length(), (*iUserCerts)[i].iCertEntry.iSubjectKeyId.Length()));
 								
 				User::Leave(KErrArgument);
 			}
-
-#if 1
-
-			EapCertificateEntry * const aCertEntry = (*aAvailableCerts)[avail_ind]->Copy();
-			if (aCertEntry == 0)
-			{
-				User::Leave(KErrNoMemory);
-			}
-			CleanupStack::PushL(aCertEntry);
-
-#else
-
-			EapCertificateEntry * const aCertEntry = new EapCertificateEntry;
-			if (aCertEntry == 0)
-			{
-				User::Leave(KErrNoMemory);
-			}
-			CleanupStack::PushL(aCertEntry);
-
-			aCertEntry->SetCertType(aCertType);
-			aCertEntry->GetSubjectKeyIdWritable()->Copy(*((*aAvailableCerts)[avail_ind]->GetSubjectKeyId()));
-
-#endif
-
-			EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::UpdateL(): - Wrote User cert details to the DB - Label=%S \n"),
-				aCertEntry->GetLabel() ) );
+						
+			view.InsertL();
+			// Set the default values. The other three tables (certs, ca certs & cipher suites) are empty by default.
+			view.SetColL(colSet->ColNo(KServiceType), static_cast<TUint>(iUiConn->GetIndexType()));
+			view.SetColL(colSet->ColNo(KServiceIndex), static_cast<TUint>(iUiConn->GetIndex()));
+			view.SetColL(colSet->ColNo(KTunnelingType), static_cast<TUint>(iUiConn->GetTunnelingType()));
+			view.SetColL(colSet->ColNo(KCertLabel), (*iUserCerts)[i].iCertEntry.iLabel);
+			view.SetColL(colSet->ColNo(KSubjectKeyIdentifier), (*iUserCerts)[i].iCertEntry.iSubjectKeyId);
+			view.SetColL(colSet->ColNo(KActualSubjectKeyIdentifier), (*iUserCerts)[i].iCertEntry.iSubjectKeyId);
+			view.PutL();
 			
-			EAP_TRACE_DATA_DEBUG_SYMBIAN( ( "Subject Key Id:",
-				aCertEntry->GetSubjectKeyId().Ptr(),
-				aCertEntry->GetSubjectKeyId().Length() ) );
-
-			EAP_TRACE_SETTINGS(aCertEntry);
-
-			aSettings.iCertificates.AppendL(aCertEntry);
-
-			aSettings.iCertificatesPresent = ETrue;
-
-			CleanupStack::Pop(aCertEntry);
+			EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::UpdateL - Wrote User cert details to the DB - Label=%S \n"),
+			&((*iUserCerts)[i].iCertEntry.iLabel) ) );
+			
+			EAP_TRACE_DATA_DEBUG_SYMBIAN( ( "Subject Key Id:", (*iUserCerts)[i].iCertEntry.iSubjectKeyId.Ptr(), 
+			(*iUserCerts)[i].iCertEntry.iSubjectKeyId.Size() ) );			
 		}
 	}
+	
+	CleanupStack::PopAndDestroy(colSet);
+	CleanupStack::PopAndDestroy(); // view	
+	
+	// CA CERTIFICATES
+	_LIT(KSQL2, "SELECT * FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
+	
+	if (iUiConn->GetEapType() == eap_type_tls)
+	{
+		sqlStatement.Format(
+			KSQL2, 
+			&KTlsAllowedCACertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}
+	else if (iUiConn->GetEapType() == eap_type_peap)
+	{
+		sqlStatement.Format(
+			KSQL2, 
+			&KPeapAllowedCACertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}	
+	else if (iUiConn->GetEapType() == eap_type_ttls || iUiConn->GetEapType() == eap_type_ttls_plain_pap)
+	{
+		sqlStatement.Format(
+			KSQL2, 
+			&KTtlsAllowedCACertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}
+
+#ifdef USE_FAST_EAP_TYPE
+	else if (iUiConn->GetEapType() == eap_type_fast)
+	{
+		sqlStatement.Format(
+			KSQL2, 
+			&KFastAllowedCACertsDatabaseTableName, 
+			&KServiceType, 
+			iUiConn->GetIndexType(), 
+			&KServiceIndex,
+			iUiConn->GetIndex(), 
+			&KTunnelingType, 
+			iUiConn->GetTunnelingType());
+	}	
+#endif // #ifdef USE_FAST_EAP_TYPE	
+			
+	User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement), TDbWindow::EUnlimited));	
+	CleanupClosePushL(view);
+	User::LeaveIfError(view.EvaluateAll());
+
+	// Get column set so we get the correct column numbers
+	colSet = view.ColSetL();
+	CleanupStack::PushL(colSet);
+
+	// Delete old rows
+	if (view.FirstL())
+	{		
+		do {
+			view.DeleteL();
+		} while (view.NextL() != EFalse);
+	}
+	
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::UpdateL - About to update cert details in the DB - CA cert count=%d \n"),
+	iCACerts->Count()));
+	
+	for (i = 0; i < iCACerts->Count(); i++)
+	{
+		if ((*iCACerts)[i].iIsEnabled)
+		{
+			// Validate data lengths.
+			if((*iCACerts)[i].iCertEntry.iLabel.Length() > KMaxCertLabelLengthInDB 
+				|| (*iCACerts)[i].iCertEntry.iSubjectKeyId.Length() > KMaxSubjectKeyIdLengthInDB)
+			{
+				// Too long data. Can not be stored in DB.
+
+				EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::UpdateL: CA : Too long Label or SubjectKeyId. Length: Label=%d, SubjectKeyId=%d \n"),
+				(*iCACerts)[i].iCertEntry.iLabel.Length(), (*iCACerts)[i].iCertEntry.iSubjectKeyId.Length()));
+				
+				User::Leave(KErrArgument);
+			}
+		
+			view.InsertL();
+			// Set the default values. The other three tables (certs, ca certs & cipher suites) are empty by default.
+			view.SetColL(colSet->ColNo(KServiceType), static_cast<TUint>(iUiConn->GetIndexType()));
+			view.SetColL(colSet->ColNo(KServiceIndex), static_cast<TUint>(iUiConn->GetIndex()));
+			view.SetColL(colSet->ColNo(KTunnelingType), static_cast<TUint>(iUiConn->GetTunnelingType()));
+			view.SetColL(colSet->ColNo(KCertLabel), (*iCACerts)[i].iCertEntry.iLabel);
+			view.SetColL(colSet->ColNo(KSubjectKeyIdentifier), (*iCACerts)[i].iCertEntry.iSubjectKeyId);			
+			view.SetColL(colSet->ColNo(KActualSubjectKeyIdentifier), (*iCACerts)[i].iCertEntry.iSubjectKeyId);
+			view.PutL();
+
+			EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::UpdateL - Wrote CA cert details to the DB - Label=%S \n"),
+			&((*iCACerts)[i].iCertEntry.iLabel) ) );
+			
+			EAP_TRACE_DATA_DEBUG_SYMBIAN( ( "Subject Key Id:", (*iCACerts)[i].iCertEntry.iSubjectKeyId.Ptr(), 
+			(*iCACerts)[i].iCertEntry.iSubjectKeyId.Size() ) );
+		}
+	}
+	CleanupStack::PopAndDestroy(colSet);
+	CleanupStack::PopAndDestroy(); // view
+	
+	CleanupStack::PopAndDestroy(buf);
 }
 
-// ----------------------------------------------------------
-
-TInt CEapTlsPeapUiCertificates::Update()
-{
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::Update()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCertificates::Update()\n"));
-
-    EAPSettings aSettings;
-    
-	TRAPD(error, SaveCertificatesL(EapCertificateEntry::EUser, iUserCerts, aSettings));
-	if (error)
-	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::Update() SaveCertificatesL(iUserCerts): failed %d\n"), error));
-		iParent->CompleteReadCertificates(error);
-		return error;
-	}
-
-	TRAP(error, SaveCertificatesL(EapCertificateEntry::ECA, iCACerts, aSettings));
-	if (error)
-	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCertificates::Update() SaveCertificatesL(iCACerts): failed %d\n"), error));
-		iParent->CompleteReadCertificates(error);
-		return error;
-	}
-
-	TRAP(error,iEapTypeConnection->SetConfigurationL(aSettings));
-
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCertificates::Update(): error = %d\n"),error));
-
-	return error;
-}
-
-// ----------------------------------------------------------
 // End of file