eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapUiCipherSuites.cpp
branchRCL_3
changeset 46 c74b3d9f6b9e
parent 45 bad0cc58d154
--- a/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapUiCipherSuites.cpp	Tue Aug 31 15:16:37 2010 +0300
+++ b/eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapUiCipherSuites.cpp	Wed Sep 01 12:23:57 2010 +0100
@@ -16,7 +16,7 @@
 */
 
 /*
-* %version: %
+* %version: 13.1.2 %
 */
 
 // This is enumeration of EAPOL source code.
@@ -30,33 +30,26 @@
 
 // INCLUDE FILES
 #include <e32base.h>
-//#include "EapTlsPeapUtils.h"
+#include "EapTlsPeapUtils.h"
 #include "EapTlsPeapDbParameterNames.h"
 #include "EapTlsPeapDbDefaults.h"
 #include <EapTlsPeapUiConnection.h>
 #include <EapTlsPeapUiCipherSuites.h>
 #include <EapTlsPeapUiCipherSuite.h>
-#include <EapTraceSymbian.h>
-#include <EapType.h>
 
-//const TUint KMaxSqlQueryLength = 256;
+const TUint KMaxSqlQueryLength = 256;
 
 CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites(CEapTlsPeapUiConnection * const aUiConn)
 : iIsOpened(EFalse)
 , iUiConn(aUiConn)
 , iDataPtr(NULL)
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites()\n"));
 }
 
 
 CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()\n"));
-
-	if (iUiConn)
+    if (iUiConn)
     {
         Close();
         iUiConn = NULL;
@@ -66,24 +59,16 @@
 
 TInt CEapTlsPeapUiCipherSuites::Open()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Open()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Open()\n"));
-
     if (iIsOpened)
     {
         return KErrAlreadyExists;
     }
 
-	TEapExpandedType aEapType(iUiConn->GetEapType());
-
-    TRAPD(err, iEapTypeConnection = CEapType::NewL(iUiConn->GetIndexType(), iUiConn->GetIndex(), aEapType));
+    TInt err = iUiConn->GetDatabase(iDatabase);
     if (err != KErrNone)
-        {
-        EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCipherSuites::Open() CEapType::NewL err=%d\n"),err));
+    {
         return err;
-        }
-    
-    iEapTypeConnection->SetTunnelingType(iUiConn->GetTunnelingType());
+    }
 
     iIsOpened = ETrue;
 
@@ -91,11 +76,8 @@
 }
 
 
-TInt CEapTlsPeapUiCipherSuites::GetCipherSuites(RPointerArray<TEapTlsPeapUiCipherSuite> ** aDataPtr)
+TInt CEapTlsPeapUiCipherSuites::GetCipherSuites(CArrayFixFlat<TEapTlsPeapUiCipherSuite> ** aDataPtr)
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::GetCipherSuites()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::GetCipherSuites()\n"));
-
     if (aDataPtr == NULL)
     {
         return KErrArgument;
@@ -109,25 +91,19 @@
     {
     	*aDataPtr = iDataPtr;
     	return KErrNone;
-	}
-
-    iDataPtr = new RPointerArray<TEapTlsPeapUiCipherSuite>(8);
+    }
+    iDataPtr = new CArrayFixFlat<TEapTlsPeapUiCipherSuite>(8);
     if (!iDataPtr)
     {
         return KErrNoMemory;
     }
     
-    TInt i_ind(0);
-	while (available_cipher_suites[i_ind] != 0)
+    TInt i(0);
+	while (available_cipher_suites[i] != 0)
 	{		
-		TEapTlsPeapUiCipherSuite * const tmp = new TEapTlsPeapUiCipherSuite;
-		if (tmp == 0)
-		{
-	        return KErrNoMemory;
-		}
-
-		tmp->SetCipherSuite(available_cipher_suites[i_ind]);
-		tmp->SetIsEnabled(EFalse);
+		TEapTlsPeapUiCipherSuite tmp;
+		tmp.iCipherSuite = available_cipher_suites[i];
+		tmp.iIsEnabled = EFalse;
 
 		TRAPD(err, iDataPtr->AppendL(tmp));
 		if (err != KErrNone)
@@ -135,38 +111,19 @@
 			return err;
 		}
 
-		i_ind++;
+		i++;
 	}
 		
-    EAPSettings aSettings;
     
-	TRAPD(error,iEapTypeConnection->GetConfigurationL(aSettings));
-	if (error)
-	{
-		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCipherSuites::GetCipherSuites() GetConfigurationL(): failed %d\n"), error));
-		return error;
-	}
-
-	if (aSettings.iCipherSuitesPresent)
-	{
-		TInt i_ind(0);
 
-		for (i_ind = 0; i_ind < aSettings.iCipherSuites.Count(); ++i_ind)
-		{
-			TUint aCipherSuite = aSettings.iCipherSuites[i_ind];
-			TInt j_ind(0);
+    TRAPD(err, FetchDataL());
+    
+    if (err != KErrNone)
+    {
+        delete iDataPtr;
+        return err;
+    }
 
-			for (j_ind = 0; j_ind < iDataPtr->Count(); j_ind++)
-			{
-				if ((*iDataPtr)[j_ind]->GetCipherSuite() == aCipherSuite)
-				{
-					(*iDataPtr)[j_ind]->SetIsEnabled(ETrue);
-					break;
-				}
-			}
-		}
-	}
-    
    	*aDataPtr = iDataPtr;
 
     return KErrNone;
@@ -175,41 +132,105 @@
 
 TInt CEapTlsPeapUiCipherSuites::Update()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Update()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Update()\n"));
+	TRAPD(err, UpdateL());
+	return err;
+}
+
+void CEapTlsPeapUiCipherSuites::UpdateL()
+{
+	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");
 
-	EAPSettings aSettings;
+	if (iUiConn->GetEapType() == eap_type_tls)
+	{
+		sqlStatement.Format(KSQLQuery,
+							&KTlsAllowedCipherSuitesDatabaseTableName,
+							&KServiceType,
+							iUiConn->GetIndexType(),
+							&KServiceIndex,
+							iUiConn->GetIndex(),
+							&KTunnelingType, 
+							iUiConn->GetTunnelingType());
+	}
+	else if (iUiConn->GetEapType() == eap_type_peap)
+	{
+		sqlStatement.Format(KSQLQuery,
+							&KPeapAllowedCipherSuitesDatabaseTableName,
+							&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(KSQLQuery,
+							&KTtlsAllowedCipherSuitesDatabaseTableName,
+							&KServiceType,
+							iUiConn->GetIndexType(),
+							&KServiceIndex,
+							iUiConn->GetIndex(),
+							&KTunnelingType, 
+							iUiConn->GetTunnelingType());
+	}
 
-	aSettings.iCipherSuitesPresent = ETrue;
-
-	TInt i_ind(0);
+#ifdef USE_FAST_EAP_TYPE
+	else if (iUiConn->GetEapType() == eap_type_fast)
+	{
+		sqlStatement.Format(KSQLQuery,
+							&KFastAllowedCipherSuitesDatabaseTableName,
+							&KServiceType,
+							iUiConn->GetIndexType(),
+							&KServiceIndex,
+							iUiConn->GetIndex(),
+							&KTunnelingType, 
+							iUiConn->GetTunnelingType());
+	}
+#endif //#ifdef USE_FAST_EAP_TYPE
 	
-	for (i_ind = 0; i_ind < iDataPtr->Count(); i_ind++)
+	// Evaluate view
+	RDbView view;
+	User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement)));
+	CleanupClosePushL(view);
+	User::LeaveIfError(view.EvaluateAll());	
+
+	// Delete old rows
+	if (view.FirstL())
+	{		
+		do {
+			view.DeleteL();
+		} while (view.NextL() != EFalse);
+	}	
+
+	// Get column set so we get the correct column numbers
+	CDbColSet* colSet = view.ColSetL();
+	CleanupStack::PushL(colSet);
+	
+	TInt i(0);
+	
+	for (i = 0; i < iDataPtr->Count(); i++)
 	{
-		if ((*iDataPtr)[i_ind]->GetIsEnabled())
+		if (iDataPtr->At(i).iIsEnabled)
 		{
-			TInt error = aSettings.iCipherSuites.Append((*iDataPtr)[i_ind]->GetCipherSuite());
-			if (error != KErrNone)
-			{
-				return error;
-			}
+			view.InsertL();			
+			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(KCipherSuite), static_cast<TUint>(iDataPtr->At(i).iCipherSuite));
+			view.PutL();
 		}
 	}
-
-	TRAPD(error,iEapTypeConnection->SetConfigurationL(aSettings));
-
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiDataConnection::Update(): error = %d\n"),error));
-
-	return error;
+	CleanupStack::PopAndDestroy(colSet);
+	CleanupStack::PopAndDestroy(); // view
+	CleanupStack::PopAndDestroy(buf);    
 }
 
-
-
 TInt CEapTlsPeapUiCipherSuites::Close()
 {
-	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Close()\n")));
-	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Close()\n"));
-
     if (iIsOpened == EFalse)
     {
         return KErrNone;
@@ -222,4 +243,109 @@
     return KErrNone;
 }
 
+
+void CEapTlsPeapUiCipherSuites::FetchDataL()
+{
+	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
+	TPtr sqlStatement = buf->Des();
+
+	// Form the query. Query everything.
+	_LIT(KSQLQuery, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
+
+	if (iUiConn->GetEapType() == eap_type_tls)
+	{
+		sqlStatement.Format(KSQLQuery,
+							&KCipherSuite,
+							&KTlsAllowedCipherSuitesDatabaseTableName,
+							&KServiceType,
+							iUiConn->GetIndexType(),
+							&KServiceIndex,
+							iUiConn->GetIndex(),
+							&KTunnelingType, 
+							iUiConn->GetTunnelingType());
+	}
+	else if (iUiConn->GetEapType() == eap_type_peap)
+	{
+		sqlStatement.Format(KSQLQuery,
+							&KCipherSuite,
+							&KPeapAllowedCipherSuitesDatabaseTableName,
+							&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(KSQLQuery,
+							&KCipherSuite,
+							&KTtlsAllowedCipherSuitesDatabaseTableName,
+							&KServiceType,
+							iUiConn->GetIndexType(),
+							&KServiceIndex,
+							iUiConn->GetIndex(),
+							&KTunnelingType, 
+							iUiConn->GetTunnelingType());
+	}
+
+#ifdef USE_FAST_EAP_TYPE
+	else if (iUiConn->GetEapType() == eap_type_fast)
+	{
+		sqlStatement.Format(KSQLQuery,
+							&KCipherSuite,
+							&KFastAllowedCipherSuitesDatabaseTableName,
+							&KServiceType,
+							iUiConn->GetIndexType(),
+							&KServiceIndex,
+							iUiConn->GetIndex(),
+							&KTunnelingType, 
+							iUiConn->GetTunnelingType());
+	}
+#endif //#ifdef USE_FAST_EAP_TYPE
+	
+	// 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);
+
+	if (view.FirstL())
+	{		
+		do {
+			view.GetL();
+
+			switch (view.ColType(colSet->ColNo(KCipherSuite)))
+			{
+			case EDbColUint32:
+				{
+					// Find the corresponding cipher suite in the list
+					TInt j(0);
+					TUint id = view.ColUint(colSet->ColNo(KCipherSuite));
+					for (j = 0; j < iDataPtr->Count(); j++)
+					{
+						if (iDataPtr->At(j).iCipherSuite == id)
+						{
+							iDataPtr->At(j).iIsEnabled = ETrue;
+							break;
+						}
+					}
+				}
+				break;
+			default:
+				User::Leave(KErrArgument);
+			}
+		} while (view.NextL() != EFalse);
+	}
+	
+	CleanupStack::PopAndDestroy(colSet);					
+	
+	CleanupStack::PopAndDestroy(); // view
+    CleanupStack::PopAndDestroy(buf);
+}
+
 // End of file