eapol/eapol_framework/eapol_symbian/am/type/protected_setup/EapProtectedSetupInterface.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/protected_setup/EapProtectedSetupInterface.cpp	Thu Dec 17 08:47:43 2009 +0200
@@ -0,0 +1,290 @@
+/*
+* 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 174 
+	#undef EAP_FILE_NUMBER_DATE 
+	#define EAP_FILE_NUMBER_DATE 1127594498 
+#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
+
+// INCLUDE FILES
+#include "EapProtectedSetupInterface.h"
+#include "eap_am_type_protected_setup_symbian.h"
+
+#include <mmtsy_names.h>
+#include <etelmmerr.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+CEapProtectedSetupInterface::CEapProtectedSetupInterface(abs_eap_am_tools_c* const aTools, eap_am_type_protected_setup_symbian_c* const aParent)
+: CActive(CActive::EPriorityStandard)
+, iParent(aParent)
+, m_am_tools(aTools)
+, iQueryId(EQueryNone)
+, iMMETELConnectionStatus(EFalse)
+{
+	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+}
+
+//--------------------------------------------------
+
+CEapProtectedSetupInterface* CEapProtectedSetupInterface::NewL(abs_eap_am_tools_c* const aTools, 
+											   eap_am_type_protected_setup_symbian_c* const aParent)
+{
+	CEapProtectedSetupInterface* self = new(ELeave) CEapProtectedSetupInterface(aTools, aParent);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop();
+	return self;
+}
+
+//--------------------------------------------------
+
+void CEapProtectedSetupInterface::ConstructL()
+{
+	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+	
+	CActiveScheduler::Add(this);	
+	
+	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+}
+
+//--------------------------------------------------
+
+CEapProtectedSetupInterface::~CEapProtectedSetupInterface()
+{
+	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+
+	if(IsActive())
+	{
+		Cancel();		
+	}
+	
+	DisconnectMMETel();	
+	
+	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+}
+
+//--------------------------------------------------
+
+void CEapProtectedSetupInterface::QueryDeviceParametersL()
+{	
+	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ProtectedSetup interface: Querying Device Parametes.\n")));
+	
+	iQueryId = EQueryDeviceParams;
+		
+	// Create MMETEl connection.
+	User::LeaveIfError( CreateMMETelConnectionL() );
+	
+  iPhone.GetPhoneId( iStatus, iDeviceId ); 
+ 	
+	if( !IsActive() )
+	{
+		SetActive();
+	}  
+
+	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+}
+
+//--------------------------------------------------
+ 
+void CEapProtectedSetupInterface::DoCancel()
+{
+	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::DoCancel() - Cancelling MMETEL query.\n") ) );
+
+	if(iQueryId == EQueryDeviceParams)
+	{
+		// Cancel the request for device id.
+		iPhone.CancelAsyncRequest(EMobilePhoneGetPhoneId);
+	}
+	else
+	{
+		// This should not happen.
+		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::DoCancel(): SOME BIG PROBLEM \n")));	
+	}
+	
+	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::DoCancel(): CANCELLED the REQUEST \n")));
+}
+
+//--------------------------------------------------
+
+void CEapProtectedSetupInterface::RunL()
+{
+	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+	
+	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::RunL(). iStatus.Int() =%d \n"), iStatus.Int() ));
+	
+	TInt error = KErrNone;
+	eap_status_e completion_status(eap_status_ok);
+	
+	if (iStatus.Int() == KErrNone)
+	{	
+		switch( iQueryId )
+		{
+			case EQueryDeviceParams:
+				EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("CEapProtectedSetupInterface::RunL():: Got Device ID reply.\n")));
+						
+				EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Manufacturer"),
+						iDeviceId.iManufacturer.Ptr(),
+						iDeviceId.iManufacturer.Size()));
+
+				EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Model"),
+						iDeviceId.iModel.Ptr(),
+						iDeviceId.iModel.Size()));
+
+				EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Revision"),
+						iDeviceId.iRevision.Ptr(),
+						iDeviceId.iRevision.Size()));
+
+				EAP_TRACE_DATA_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("SerialNumber"),
+						iDeviceId.iSerialNumber .Ptr(),
+						iDeviceId.iSerialNumber .Size()));
+						
+				// Complete. This happens only if completion_status is eap_status_ok so far.
+				TRAP(error, iParent->complete_protected_setup_device_paramsL(iDeviceId, completion_status));
+			
+				break;
+			
+			default:
+			
+				// Some problem 
+				// This should not happen.
+				EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Unknown query completed.\n")));	
+				break;
+		}
+	} 
+	else 
+	{
+		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Got error reply.\n")));	
+	
+		switch( iQueryId )
+		{
+			case EQueryDeviceParams:
+			
+				// Error with Device id request. Complete the request with error.			
+				EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Error in device parameters query.\n")));
+							
+				TRAP(error, iParent->complete_protected_setup_device_paramsL(
+					iDeviceId, 
+					m_am_tools->convert_am_error_to_eapol_error(iStatus.Int())));
+				break;
+			
+			default:
+			
+				// Some problem 
+				// This should not happen.
+				EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("ERROR: CEapProtectedSetupInterface::RunL(): Unknown query failed.\n")));	
+				
+			break;
+			
+		}
+	}
+
+	DisconnectMMETel();
+	
+	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+}
+
+//--------------------------------------------------
+
+TInt CEapProtectedSetupInterface::CreateMMETelConnectionL()
+{
+	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+	EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Creating MMETel connection.\n")));
+
+	TInt errorCode = KErrNone;
+	
+	// MMETel need to be connected only once.    
+  if( !iMMETELConnectionStatus )
+  {
+		RTelServer::TPhoneInfo phoneInfo;
+		TInt phoneCount = 0;
+
+		// Connect to ETel server
+		User::LeaveIfError( iServer.Connect() ); 	
+	
+    EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Connected to ETel server.\n")));	
+
+		// This function loads an ETel TSY module, mmtsy.
+		errorCode = iServer.LoadPhoneModule( KMmTsyModuleName );	
+	
+    EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Loaded phone module.\n")));	    
+	
+		if ( errorCode != KErrNone && errorCode != KErrAlreadyExists )
+		{
+			User::Leave( errorCode );
+		}
+
+		iServer.SetExtendedErrorGranularity( RTelServer::EErrorExtended );
+
+		// This function retrieves the total number of phones supported by all 
+		// the currently loaded ETel (TSY) modules.
+		User::LeaveIfError( iServer.EnumeratePhones( phoneCount ) );	
+	
+		EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Number of phones supported by the loaded ETel = %d.\n"), phoneCount));
+	
+		// This function retrieves information associated with the specified phone
+		while ( ( phoneCount-- ) && ( phoneInfo.iName != KMmTsyPhoneName ) ) 
+		{ 
+			User::LeaveIfError( iServer.GetPhoneInfo( phoneCount, phoneInfo ) );		
+	    EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Got phone info.\n")));
+		} 
+
+		// This function opens a phone subsession by name. ("DefaultPhone").
+		User::LeaveIfError( iPhone.Open( iServer, phoneInfo.iName ) );	
+    EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Opened phone subsession.\n")));
+	
+		// MMETel connected and the phone module loaded fine.	
+		iMMETELConnectionStatus = ETrue; 	
+  }
+  else
+  {
+  	// MMETel already connected.
+    EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("MMETel connected once already.\n")));
+  }
+	    
+	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+  return errorCode;	
+}
+
+//--------------------------------------------------
+
+void CEapProtectedSetupInterface::DisconnectMMETel()
+{
+    if( iMMETELConnectionStatus )
+    {
+			EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("Closing RMobilePhone and MMETEL.\n")));
+			
+			iPhone.Close();
+			iServer.Close(); // Phone module is unloaded automatically when RTelServer session is closed
+			
+			iMMETELConnectionStatus = EFalse;
+    }
+    else
+    {
+			EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("RMobilePhone and MMETEL already closed.\n")));    	
+    }	
+}
+
+//--------------------------------------------------
+
+// End of file.