eapol/eapol_framework/eapol_symbian/am/type/securid/symbian/plugin/src/EapSecurID.cpp
changeset 0 c8830336c852
child 2 1c7bc153c08e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/am/type/securid/symbian/plugin/src/EapSecurID.cpp	Thu Dec 17 08:47:43 2009 +0200
@@ -0,0 +1,340 @@
+/*
+* Copyright (c) 2001-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  EAP and WLAN authentication protocols.
+*
+*/
+
+
+// This is enumeration of EAPOL source code.
+#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+	#undef EAP_FILE_NUMBER_ENUM
+	#define EAP_FILE_NUMBER_ENUM 347 
+	#undef EAP_FILE_NUMBER_DATE 
+	#define EAP_FILE_NUMBER_DATE 1127594498 
+#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+
+
+// INCLUDE FILES
+
+#include "EapSecurID.h"
+#include "eap_am_type_securid_symbian.h"
+#include "eap_type_securid.h"
+#include "EapSecurIDGlobal.h"
+#include <EapTypeInfo.h>
+#include "EapGtcDbUtils.h"
+
+#include <EapGtcUiConnection.h>
+#include "EapGtcUi.h"
+
+#include "eap_am_tools_symbian.h"
+
+// LOCAL CONSTANTS
+
+// The version number of this interface.
+const TUint KInterfaceVersion = 1;
+
+// ================= MEMBER FUNCTIONS =======================
+
+CEapSecurID::CEapSecurID(
+	const TIndexType aIndexType,	
+	const TInt aIndex,
+	const eap_type_value_e aEapType)
+	: iIndexType(aIndexType)
+	, iIndex(aIndex)
+	, iEapType(aEapType)
+	, iTunnelingType(eap_type_none)
+{
+}
+
+// ----------------------------------------------------------
+
+CEapSecurID* CEapSecurID::NewSecurIdL(SIapInfo *aIapInfo)
+{
+	return new(ELeave) CEapSecurID(aIapInfo->indexType, aIapInfo->index, eap_type_securid);
+}
+
+// ----------------------------------------------------------
+
+CEapSecurID* CEapSecurID::NewGtcL(SIapInfo *aIapInfo)
+{
+	return new(ELeave) CEapSecurID(aIapInfo->indexType, aIapInfo->index, eap_type_generic_token_card);
+}
+
+// ----------------------------------------------------------
+
+CEapSecurID::~CEapSecurID()
+{
+}
+
+// ----------------------------------------------------------
+
+#ifdef USE_EAP_SIMPLE_CONFIG
+
+eap_base_type_c* CEapSecurID::GetStackInterfaceL(abs_eap_am_tools_c* const aTools, 
+											   abs_eap_base_type_c* const aPartner,
+											   const bool is_client_when_true,
+											   const eap_am_network_id_c * const receive_network_id,
+											   abs_eap_configuration_if_c * const /*configuration_if*/)
+	
+#else
+	
+eap_base_type_c* CEapSecurID::GetStackInterfaceL(abs_eap_am_tools_c* const aTools, 
+											abs_eap_base_type_c* const aPartner,
+											const bool is_client_when_true,
+											const eap_am_network_id_c * const receive_network_id)
+	
+#endif // #ifdef USE_EAP_SIMPLE_CONFIG
+{
+	// Create AM
+	eap_am_type_securid_symbian_c* amEapType = eap_am_type_securid_symbian_c::NewL(
+		aTools, 
+		aPartner, 
+		iIndexType, 
+		iIndex, 
+		iTunnelingType, 
+		iEapType,
+		is_client_when_true,
+		receive_network_id);
+	if (amEapType->get_is_valid() == false)
+	{
+		amEapType->shutdown();
+		delete amEapType;
+		User::Leave(KErrGeneral);
+	}	
+	eap_base_type_c* type = 0;
+
+	type = new eap_type_securid_c(
+		aTools,
+		aPartner,
+		amEapType,
+		true /* free_am */,
+		iEapType,
+		is_client_when_true,
+		receive_network_id);
+	
+	if (type == 0)
+	{
+		// Out of memory
+		amEapType->shutdown();
+		delete amEapType;
+		User::Leave(KErrNoMemory);
+	}
+	else if (type->get_is_valid() == false) 
+	{		
+		type->shutdown();
+		// amEapType is freed by eap_type_securid_c
+		delete type;		
+		User::Leave(KErrGeneral);
+	}
+	return type;
+}
+
+// ----------------------------------------------------------
+
+TUint CEapSecurID::GetInterfaceVersion() 
+{ 
+	return KInterfaceVersion; 
+}
+
+// ----------------------------------------------------------
+
+TInt CEapSecurID::InvokeUiL()
+{
+	TInt buttonId(0);
+
+#ifdef USE_EAP_EXPANDED_TYPES
+
+    CEapGtcUiConnection uiConn(iIndexType, iIndex, iTunnelingType.get_vendor_type());
+	
+#else
+
+    CEapGtcUiConnection uiConn(iIndexType, iIndex, iTunnelingType);
+
+#endif //#ifdef USE_EAP_EXPANDED_TYPES
+	
+	CEapGtcUi* ui = CEapGtcUi::NewL(&uiConn);
+	CleanupStack::PushL(ui);
+	buttonId = ui->InvokeUiL();
+	CleanupStack::PopAndDestroy(ui);
+	return buttonId;
+}
+
+// ----------------------------------------------------------
+
+CEapTypeInfo* CEapSecurID::GetInfoLC()
+{
+	CEapTypeInfo* info = new(ELeave) CEapTypeInfo(
+		(TDesC&) KReleaseDate,
+		(TDesC&) KEapTypeVersion,
+		(TDesC&) KManufacturer);
+	CleanupStack::PushL(info);
+	return info;
+}
+
+// ----------------------------------------------------------
+
+void CEapSecurID::DeleteConfigurationL()
+{
+	EapGtcDbUtils::DeleteConfigurationL(iIndexType, iIndex, iTunnelingType);
+}
+
+// ----------------------------------------------------------
+
+void CEapSecurID::SetTunnelingType(const TInt aTunnelingType)
+{
+#ifdef USE_EAP_EXPANDED_TYPES
+
+	// Vendor id is eap_type_vendor_id_ietf always in this plugin.
+	iTunnelingType.set_eap_type_values(eap_type_vendor_id_ietf, aTunnelingType);
+
+#else
+
+	iTunnelingType = static_cast<eap_type_value_e>(aTunnelingType);
+
+#endif //#ifdef USE_EAP_EXPANDED_TYPES
+}
+
+// ----------------------------------------------------------
+void CEapSecurID::SetIndexL(
+		const TIndexType aIndexType, 
+		const TInt aIndex)
+{		
+		// First delete the target configuration
+	TIndexType tmpIndexType = iIndexType;
+	TInt tmpIndex = iIndex;
+		
+	iIndexType = aIndexType;
+	iIndex = aIndex;
+	
+	TInt err(KErrNone);
+	TRAP(err, DeleteConfigurationL());
+	// Ignore error on purpose
+	
+	// Return the indices
+	iIndexType = tmpIndexType;
+	iIndex = tmpIndex;
+
+	RDbNamedDatabase db;
+
+	RDbs session;
+	
+	EapGtcDbUtils::OpenDatabaseL(db, session, iIndexType, iIndex, iTunnelingType);
+	
+	CleanupClosePushL(session);
+	CleanupClosePushL(db);
+		
+	EapGtcDbUtils::SetIndexL(
+		db, 
+		iIndexType, 
+		iIndex, 
+		iTunnelingType, 
+		aIndexType, 
+		aIndex, 
+		iTunnelingType);
+	
+	iIndexType = aIndexType;
+	iIndex = aIndex;
+
+	CleanupStack::PopAndDestroy(2); // db
+	
+		
+}
+
+void CEapSecurID::SetConfigurationL(const EAPSettings& aSettings)
+{
+	RDbNamedDatabase db;
+
+	RDbs session;	
+	
+	// This also creates the IAP entry if it doesn't exist
+	EapGtcDbUtils::OpenDatabaseL(db, session, iIndexType, iIndex, iTunnelingType);
+	
+	CleanupClosePushL(session);
+	CleanupClosePushL(db);
+
+	EapGtcDbUtils::SetConfigurationL(
+		db,
+		aSettings, 
+		iIndexType,
+		iIndex,
+		iTunnelingType);		
+		
+	CleanupStack::PopAndDestroy(2); // db, session
+}
+
+void CEapSecurID::GetConfigurationL(EAPSettings& aSettings)
+{
+	RDbNamedDatabase db;
+
+	RDbs session;
+	
+	// This also creates the IAP entry if it doesn't exist
+	EapGtcDbUtils::OpenDatabaseL(db, session, iIndexType, iIndex, iTunnelingType);
+	
+	CleanupClosePushL(session);
+	CleanupClosePushL(db);
+
+	EapGtcDbUtils::GetConfigurationL(
+		db,
+		aSettings, 
+		iIndexType,
+		iIndex,
+		iTunnelingType);
+		
+	CleanupStack::PopAndDestroy(2); // db, session
+}
+
+void CEapSecurID::CopySettingsL(
+	const TIndexType aDestinationIndexType,
+	const TInt aDestinationIndex)
+{
+	// First delete the target configuration
+	TIndexType tmpIndexType = iIndexType;
+	TInt tmpIndex = iIndex;
+		
+	iIndexType = aDestinationIndexType;
+	iIndex = aDestinationIndex;
+	
+	TInt err(KErrNone);
+	TRAP(err, DeleteConfigurationL());
+	// Ignore error on purpose
+	
+	// Return the indices
+	iIndexType = tmpIndexType;
+	iIndex = tmpIndex;
+
+	RDbNamedDatabase db;
+
+	RDbs session;
+	
+	EapGtcDbUtils::OpenDatabaseL(db, session, iIndexType, iIndex, iTunnelingType);
+	
+	CleanupClosePushL(session);
+	CleanupClosePushL(db);
+		
+	EapGtcDbUtils::CopySettingsL(
+		db,
+		iIndexType,
+		iIndex,
+		iTunnelingType, 
+		aDestinationIndexType, 
+		aDestinationIndex, 
+		iTunnelingType);
+		
+	CleanupStack::PopAndDestroy(2); // db
+	
+}
+
+
+// End of File