eapol/eapol_framework/eapol_symbian/am/type/tls_peap/symbian/plugin/src/EapTlsPeapUiCipherSuites.cpp
branchRCL_3
changeset 46 c74b3d9f6b9e
parent 45 bad0cc58d154
equal deleted inserted replaced
45:bad0cc58d154 46:c74b3d9f6b9e
    14 * Description:  EAP and WLAN authentication protocols.
    14 * Description:  EAP and WLAN authentication protocols.
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 /*
    18 /*
    19 * %version: %
    19 * %version: 13.1.2 %
    20 */
    20 */
    21 
    21 
    22 // This is enumeration of EAPOL source code.
    22 // This is enumeration of EAPOL source code.
    23 #if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
    23 #if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
    24 	#undef EAP_FILE_NUMBER_ENUM
    24 	#undef EAP_FILE_NUMBER_ENUM
    28 #endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
    28 #endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
    29 
    29 
    30 
    30 
    31 // INCLUDE FILES
    31 // INCLUDE FILES
    32 #include <e32base.h>
    32 #include <e32base.h>
    33 //#include "EapTlsPeapUtils.h"
    33 #include "EapTlsPeapUtils.h"
    34 #include "EapTlsPeapDbParameterNames.h"
    34 #include "EapTlsPeapDbParameterNames.h"
    35 #include "EapTlsPeapDbDefaults.h"
    35 #include "EapTlsPeapDbDefaults.h"
    36 #include <EapTlsPeapUiConnection.h>
    36 #include <EapTlsPeapUiConnection.h>
    37 #include <EapTlsPeapUiCipherSuites.h>
    37 #include <EapTlsPeapUiCipherSuites.h>
    38 #include <EapTlsPeapUiCipherSuite.h>
    38 #include <EapTlsPeapUiCipherSuite.h>
    39 #include <EapTraceSymbian.h>
    39 
    40 #include <EapType.h>
    40 const TUint KMaxSqlQueryLength = 256;
    41 
       
    42 //const TUint KMaxSqlQueryLength = 256;
       
    43 
    41 
    44 CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites(CEapTlsPeapUiConnection * const aUiConn)
    42 CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites(CEapTlsPeapUiConnection * const aUiConn)
    45 : iIsOpened(EFalse)
    43 : iIsOpened(EFalse)
    46 , iUiConn(aUiConn)
    44 , iUiConn(aUiConn)
    47 , iDataPtr(NULL)
    45 , iDataPtr(NULL)
    48 {
    46 {
    49 	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites()\n")));
       
    50 	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::CEapTlsPeapUiCipherSuites()\n"));
       
    51 }
    47 }
    52 
    48 
    53 
    49 
    54 CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()
    50 CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()
    55 {
    51 {
    56 	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()\n")));
    52     if (iUiConn)
    57 	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::~CEapTlsPeapUiCipherSuites()\n"));
       
    58 
       
    59 	if (iUiConn)
       
    60     {
    53     {
    61         Close();
    54         Close();
    62         iUiConn = NULL;
    55         iUiConn = NULL;
    63     }
    56     }
    64 }
    57 }
    65 
    58 
    66 
    59 
    67 TInt CEapTlsPeapUiCipherSuites::Open()
    60 TInt CEapTlsPeapUiCipherSuites::Open()
    68 {
    61 {
    69 	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Open()\n")));
       
    70 	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Open()\n"));
       
    71 
       
    72     if (iIsOpened)
    62     if (iIsOpened)
    73     {
    63     {
    74         return KErrAlreadyExists;
    64         return KErrAlreadyExists;
    75     }
    65     }
    76 
    66 
    77 	TEapExpandedType aEapType(iUiConn->GetEapType());
    67     TInt err = iUiConn->GetDatabase(iDatabase);
    78 
       
    79     TRAPD(err, iEapTypeConnection = CEapType::NewL(iUiConn->GetIndexType(), iUiConn->GetIndex(), aEapType));
       
    80     if (err != KErrNone)
    68     if (err != KErrNone)
    81         {
    69     {
    82         EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCipherSuites::Open() CEapType::NewL err=%d\n"),err));
       
    83         return err;
    70         return err;
    84         }
    71     }
    85     
       
    86     iEapTypeConnection->SetTunnelingType(iUiConn->GetTunnelingType());
       
    87 
    72 
    88     iIsOpened = ETrue;
    73     iIsOpened = ETrue;
    89 
    74 
    90     return KErrNone;
    75     return KErrNone;
    91 }
    76 }
    92 
    77 
    93 
    78 
    94 TInt CEapTlsPeapUiCipherSuites::GetCipherSuites(RPointerArray<TEapTlsPeapUiCipherSuite> ** aDataPtr)
    79 TInt CEapTlsPeapUiCipherSuites::GetCipherSuites(CArrayFixFlat<TEapTlsPeapUiCipherSuite> ** aDataPtr)
    95 {
    80 {
    96 	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::GetCipherSuites()\n")));
       
    97 	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::GetCipherSuites()\n"));
       
    98 
       
    99     if (aDataPtr == NULL)
    81     if (aDataPtr == NULL)
   100     {
    82     {
   101         return KErrArgument;
    83         return KErrArgument;
   102     }
    84     }
   103     if (iIsOpened == EFalse)
    85     if (iIsOpened == EFalse)
   107     
    89     
   108     if (iDataPtr != 0)
    90     if (iDataPtr != 0)
   109     {
    91     {
   110     	*aDataPtr = iDataPtr;
    92     	*aDataPtr = iDataPtr;
   111     	return KErrNone;
    93     	return KErrNone;
   112 	}
    94     }
   113 
    95     iDataPtr = new CArrayFixFlat<TEapTlsPeapUiCipherSuite>(8);
   114     iDataPtr = new RPointerArray<TEapTlsPeapUiCipherSuite>(8);
       
   115     if (!iDataPtr)
    96     if (!iDataPtr)
   116     {
    97     {
   117         return KErrNoMemory;
    98         return KErrNoMemory;
   118     }
    99     }
   119     
   100     
   120     TInt i_ind(0);
   101     TInt i(0);
   121 	while (available_cipher_suites[i_ind] != 0)
   102 	while (available_cipher_suites[i] != 0)
   122 	{		
   103 	{		
   123 		TEapTlsPeapUiCipherSuite * const tmp = new TEapTlsPeapUiCipherSuite;
   104 		TEapTlsPeapUiCipherSuite tmp;
   124 		if (tmp == 0)
   105 		tmp.iCipherSuite = available_cipher_suites[i];
   125 		{
   106 		tmp.iIsEnabled = EFalse;
   126 	        return KErrNoMemory;
       
   127 		}
       
   128 
       
   129 		tmp->SetCipherSuite(available_cipher_suites[i_ind]);
       
   130 		tmp->SetIsEnabled(EFalse);
       
   131 
   107 
   132 		TRAPD(err, iDataPtr->AppendL(tmp));
   108 		TRAPD(err, iDataPtr->AppendL(tmp));
   133 		if (err != KErrNone)
   109 		if (err != KErrNone)
   134 		{
   110 		{
   135 			return err;
   111 			return err;
   136 		}
   112 		}
   137 
   113 
   138 		i_ind++;
   114 		i++;
   139 	}
   115 	}
   140 		
   116 		
   141     EAPSettings aSettings;
   117     
   142     
   118 
   143 	TRAPD(error,iEapTypeConnection->GetConfigurationL(aSettings));
   119     TRAPD(err, FetchDataL());
   144 	if (error)
   120     
   145 	{
   121     if (err != KErrNone)
   146 		EAP_TRACE_DEBUG_SYMBIAN((_L("ERROR: CEapTlsPeapUiCipherSuites::GetCipherSuites() GetConfigurationL(): failed %d\n"), error));
   122     {
   147 		return error;
   123         delete iDataPtr;
   148 	}
   124         return err;
   149 
   125     }
   150 	if (aSettings.iCipherSuitesPresent)
   126 
   151 	{
   127    	*aDataPtr = iDataPtr;
   152 		TInt i_ind(0);
   128 
   153 
   129     return KErrNone;
   154 		for (i_ind = 0; i_ind < aSettings.iCipherSuites.Count(); ++i_ind)
   130 }
       
   131 
       
   132 
       
   133 TInt CEapTlsPeapUiCipherSuites::Update()
       
   134 {
       
   135 	TRAPD(err, UpdateL());
       
   136 	return err;
       
   137 }
       
   138 
       
   139 void CEapTlsPeapUiCipherSuites::UpdateL()
       
   140 {
       
   141 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
       
   142 	TPtr sqlStatement = buf->Des();
       
   143 
       
   144 	// Form the query. Query everything.
       
   145 	_LIT(KSQLQuery, "SELECT * FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
       
   146 
       
   147 	if (iUiConn->GetEapType() == eap_type_tls)
       
   148 	{
       
   149 		sqlStatement.Format(KSQLQuery,
       
   150 							&KTlsAllowedCipherSuitesDatabaseTableName,
       
   151 							&KServiceType,
       
   152 							iUiConn->GetIndexType(),
       
   153 							&KServiceIndex,
       
   154 							iUiConn->GetIndex(),
       
   155 							&KTunnelingType, 
       
   156 							iUiConn->GetTunnelingType());
       
   157 	}
       
   158 	else if (iUiConn->GetEapType() == eap_type_peap)
       
   159 	{
       
   160 		sqlStatement.Format(KSQLQuery,
       
   161 							&KPeapAllowedCipherSuitesDatabaseTableName,
       
   162 							&KServiceType,
       
   163 							iUiConn->GetIndexType(),
       
   164 							&KServiceIndex,
       
   165 							iUiConn->GetIndex(),
       
   166 							&KTunnelingType, 
       
   167 							iUiConn->GetTunnelingType());
       
   168 	}
       
   169 	else if (iUiConn->GetEapType() == eap_type_ttls || iUiConn->GetEapType() == eap_type_ttls_plain_pap)
       
   170 	{
       
   171 		sqlStatement.Format(KSQLQuery,
       
   172 							&KTtlsAllowedCipherSuitesDatabaseTableName,
       
   173 							&KServiceType,
       
   174 							iUiConn->GetIndexType(),
       
   175 							&KServiceIndex,
       
   176 							iUiConn->GetIndex(),
       
   177 							&KTunnelingType, 
       
   178 							iUiConn->GetTunnelingType());
       
   179 	}
       
   180 
       
   181 #ifdef USE_FAST_EAP_TYPE
       
   182 	else if (iUiConn->GetEapType() == eap_type_fast)
       
   183 	{
       
   184 		sqlStatement.Format(KSQLQuery,
       
   185 							&KFastAllowedCipherSuitesDatabaseTableName,
       
   186 							&KServiceType,
       
   187 							iUiConn->GetIndexType(),
       
   188 							&KServiceIndex,
       
   189 							iUiConn->GetIndex(),
       
   190 							&KTunnelingType, 
       
   191 							iUiConn->GetTunnelingType());
       
   192 	}
       
   193 #endif //#ifdef USE_FAST_EAP_TYPE
       
   194 	
       
   195 	// Evaluate view
       
   196 	RDbView view;
       
   197 	User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement)));
       
   198 	CleanupClosePushL(view);
       
   199 	User::LeaveIfError(view.EvaluateAll());	
       
   200 
       
   201 	// Delete old rows
       
   202 	if (view.FirstL())
       
   203 	{		
       
   204 		do {
       
   205 			view.DeleteL();
       
   206 		} while (view.NextL() != EFalse);
       
   207 	}	
       
   208 
       
   209 	// Get column set so we get the correct column numbers
       
   210 	CDbColSet* colSet = view.ColSetL();
       
   211 	CleanupStack::PushL(colSet);
       
   212 	
       
   213 	TInt i(0);
       
   214 	
       
   215 	for (i = 0; i < iDataPtr->Count(); i++)
       
   216 	{
       
   217 		if (iDataPtr->At(i).iIsEnabled)
   155 		{
   218 		{
   156 			TUint aCipherSuite = aSettings.iCipherSuites[i_ind];
   219 			view.InsertL();			
   157 			TInt j_ind(0);
   220 			view.SetColL(colSet->ColNo(KServiceType), static_cast<TUint>(iUiConn->GetIndexType()));
   158 
   221 			view.SetColL(colSet->ColNo(KServiceIndex), static_cast<TUint>(iUiConn->GetIndex()));
   159 			for (j_ind = 0; j_ind < iDataPtr->Count(); j_ind++)
   222 			view.SetColL(colSet->ColNo(KTunnelingType), static_cast<TUint>(iUiConn->GetTunnelingType()));
   160 			{
   223 			view.SetColL(colSet->ColNo(KCipherSuite), static_cast<TUint>(iDataPtr->At(i).iCipherSuite));
   161 				if ((*iDataPtr)[j_ind]->GetCipherSuite() == aCipherSuite)
   224 			view.PutL();
   162 				{
       
   163 					(*iDataPtr)[j_ind]->SetIsEnabled(ETrue);
       
   164 					break;
       
   165 				}
       
   166 			}
       
   167 		}
   225 		}
   168 	}
   226 	}
   169     
   227 	CleanupStack::PopAndDestroy(colSet);
   170    	*aDataPtr = iDataPtr;
   228 	CleanupStack::PopAndDestroy(); // view
   171 
   229 	CleanupStack::PopAndDestroy(buf);    
   172     return KErrNone;
   230 }
   173 }
       
   174 
       
   175 
       
   176 TInt CEapTlsPeapUiCipherSuites::Update()
       
   177 {
       
   178 	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Update()\n")));
       
   179 	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Update()\n"));
       
   180 
       
   181 	EAPSettings aSettings;
       
   182 
       
   183 	aSettings.iCipherSuitesPresent = ETrue;
       
   184 
       
   185 	TInt i_ind(0);
       
   186 	
       
   187 	for (i_ind = 0; i_ind < iDataPtr->Count(); i_ind++)
       
   188 	{
       
   189 		if ((*iDataPtr)[i_ind]->GetIsEnabled())
       
   190 		{
       
   191 			TInt error = aSettings.iCipherSuites.Append((*iDataPtr)[i_ind]->GetCipherSuite());
       
   192 			if (error != KErrNone)
       
   193 			{
       
   194 				return error;
       
   195 			}
       
   196 		}
       
   197 	}
       
   198 
       
   199 	TRAPD(error,iEapTypeConnection->SetConfigurationL(aSettings));
       
   200 
       
   201 	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiDataConnection::Update(): error = %d\n"),error));
       
   202 
       
   203 	return error;
       
   204 }
       
   205 
       
   206 
       
   207 
   231 
   208 TInt CEapTlsPeapUiCipherSuites::Close()
   232 TInt CEapTlsPeapUiCipherSuites::Close()
   209 {
   233 {
   210 	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapTlsPeapUiCipherSuites::Close()\n")));
       
   211 	EAP_TRACE_RETURN_STRING_SYMBIAN(_L("returns: CEapTlsPeapUiCipherSuites::Close()\n"));
       
   212 
       
   213     if (iIsOpened == EFalse)
   234     if (iIsOpened == EFalse)
   214     {
   235     {
   215         return KErrNone;
   236         return KErrNone;
   216     }
   237     }
   217 
   238 
   220     
   241     
   221     iUiConn = NULL;
   242     iUiConn = NULL;
   222     return KErrNone;
   243     return KErrNone;
   223 }
   244 }
   224 
   245 
       
   246 
       
   247 void CEapTlsPeapUiCipherSuites::FetchDataL()
       
   248 {
       
   249 	HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
       
   250 	TPtr sqlStatement = buf->Des();
       
   251 
       
   252 	// Form the query. Query everything.
       
   253 	_LIT(KSQLQuery, "SELECT %S FROM %S WHERE %S=%d AND %S=%d AND %S=%d");
       
   254 
       
   255 	if (iUiConn->GetEapType() == eap_type_tls)
       
   256 	{
       
   257 		sqlStatement.Format(KSQLQuery,
       
   258 							&KCipherSuite,
       
   259 							&KTlsAllowedCipherSuitesDatabaseTableName,
       
   260 							&KServiceType,
       
   261 							iUiConn->GetIndexType(),
       
   262 							&KServiceIndex,
       
   263 							iUiConn->GetIndex(),
       
   264 							&KTunnelingType, 
       
   265 							iUiConn->GetTunnelingType());
       
   266 	}
       
   267 	else if (iUiConn->GetEapType() == eap_type_peap)
       
   268 	{
       
   269 		sqlStatement.Format(KSQLQuery,
       
   270 							&KCipherSuite,
       
   271 							&KPeapAllowedCipherSuitesDatabaseTableName,
       
   272 							&KServiceType,
       
   273 							iUiConn->GetIndexType(),
       
   274 							&KServiceIndex,
       
   275 							iUiConn->GetIndex(),
       
   276 							&KTunnelingType, 
       
   277 							iUiConn->GetTunnelingType());
       
   278 	}
       
   279 	else if (iUiConn->GetEapType() == eap_type_ttls || iUiConn->GetEapType() == eap_type_ttls_plain_pap)
       
   280 	{
       
   281 		sqlStatement.Format(KSQLQuery,
       
   282 							&KCipherSuite,
       
   283 							&KTtlsAllowedCipherSuitesDatabaseTableName,
       
   284 							&KServiceType,
       
   285 							iUiConn->GetIndexType(),
       
   286 							&KServiceIndex,
       
   287 							iUiConn->GetIndex(),
       
   288 							&KTunnelingType, 
       
   289 							iUiConn->GetTunnelingType());
       
   290 	}
       
   291 
       
   292 #ifdef USE_FAST_EAP_TYPE
       
   293 	else if (iUiConn->GetEapType() == eap_type_fast)
       
   294 	{
       
   295 		sqlStatement.Format(KSQLQuery,
       
   296 							&KCipherSuite,
       
   297 							&KFastAllowedCipherSuitesDatabaseTableName,
       
   298 							&KServiceType,
       
   299 							iUiConn->GetIndexType(),
       
   300 							&KServiceIndex,
       
   301 							iUiConn->GetIndex(),
       
   302 							&KTunnelingType, 
       
   303 							iUiConn->GetTunnelingType());
       
   304 	}
       
   305 #endif //#ifdef USE_FAST_EAP_TYPE
       
   306 	
       
   307 	// Evaluate view
       
   308 	RDbView view;
       
   309 	User::LeaveIfError(view.Prepare(iDatabase, TDbQuery(sqlStatement)));
       
   310 	CleanupClosePushL(view);
       
   311 	User::LeaveIfError(view.EvaluateAll());	
       
   312 	
       
   313 	// Get column set so we get the correct column numbers
       
   314 	CDbColSet* colSet = view.ColSetL();
       
   315 	CleanupStack::PushL(colSet);
       
   316 
       
   317 	if (view.FirstL())
       
   318 	{		
       
   319 		do {
       
   320 			view.GetL();
       
   321 
       
   322 			switch (view.ColType(colSet->ColNo(KCipherSuite)))
       
   323 			{
       
   324 			case EDbColUint32:
       
   325 				{
       
   326 					// Find the corresponding cipher suite in the list
       
   327 					TInt j(0);
       
   328 					TUint id = view.ColUint(colSet->ColNo(KCipherSuite));
       
   329 					for (j = 0; j < iDataPtr->Count(); j++)
       
   330 					{
       
   331 						if (iDataPtr->At(j).iCipherSuite == id)
       
   332 						{
       
   333 							iDataPtr->At(j).iIsEnabled = ETrue;
       
   334 							break;
       
   335 						}
       
   336 					}
       
   337 				}
       
   338 				break;
       
   339 			default:
       
   340 				User::Leave(KErrArgument);
       
   341 			}
       
   342 		} while (view.NextL() != EFalse);
       
   343 	}
       
   344 	
       
   345 	CleanupStack::PopAndDestroy(colSet);					
       
   346 	
       
   347 	CleanupStack::PopAndDestroy(); // view
       
   348     CleanupStack::PopAndDestroy(buf);
       
   349 }
       
   350 
   225 // End of file
   351 // End of file