eapol/eapol_framework/eapol_symbian/eap_if/src/EapCoreInterfaceImplementation.cpp
changeset 26 9abfd4f00d37
child 34 ad1f037f1ac2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/eap_if/src/EapCoreInterfaceImplementation.cpp	Mon May 24 20:32:47 2010 +0300
@@ -0,0 +1,268 @@
+/*
+* 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.
+*
+*/
+
+/*
+* %version: 21 %
+*/
+
+// INCLUDES
+#include <e32std.h>
+#include <implementationproxy.h>
+#include "EapCoreInterfaceImplementation.h"
+#include "EapolUID.h"
+#include "EapTraceSymbian.h"
+//-----------------------------------------------------------------------------------------
+
+/**
+ * Pairs ECom implementation UIDs with a pointer to the instantiation 
+ * method for that implementation. Required for all ECom implementation
+ * collections.
+ */
+const TImplementationProxy ImplementationTable[] =
+{
+    {{ EAP_CORE_INTERFACEIMPLEMENTATION_IMPLEMENTATION_UID }, reinterpret_cast<TProxyNewLPtr>(CEapCoreInterfaceImplementation::NewL)}
+};
+
+//-----------------------------------------------------------------------------------------
+
+/**
+ * Static constructor.
+ * @param aPartner Pointer to callback instance.
+ * @return Pointer to the constructed instance.
+ */
+CEapProcessInterface* CEapCoreInterfaceImplementation::NewL(MEapSendInterface * aPartner)
+    {
+    EAP_TRACE_DEBUG_SYMBIAN(
+     (_L("CEapCoreInterfaceImplementation::NewL")));  
+
+    CEapCoreInterfaceImplementation* self = new (ELeave) CEapCoreInterfaceImplementation();
+	
+	CleanupStack::PushL(self);
+
+	self->ConstructL(aPartner);
+
+	if (self->get_is_valid() != true)
+	{
+		User::Leave(KErrGeneral);
+	}
+
+	CleanupStack::Pop(self);
+
+    EAP_TRACE_DEBUG_SYMBIAN(
+     (_L("CEapCoreInterfaceImplementation::NewL end")));  
+	return self;
+    }
+
+//-----------------------------------------------------------------------------------------
+
+/**
+ * C++ default constructor.
+*/ 
+CEapCoreInterfaceImplementation::CEapCoreInterfaceImplementation()
+	{
+    EAP_TRACE_DEBUG_SYMBIAN(
+     (_L("CEapCoreInterfaceImplementation::CEapCoreInterfaceImplementation")));  
+	m_partner = 0;
+	m_is_valid = false;
+	iMTU = 0;
+	iTools = 0;
+	}
+
+//-----------------------------------------------------------------------------------------
+
+/**
+ * Destructor.
+ */
+CEapCoreInterfaceImplementation::~CEapCoreInterfaceImplementation()
+    {
+    EAP_TRACE_DEBUG_SYMBIAN(
+     (_L("CEapCoreInterfaceImplementation::~CEapCoreInterfaceImplementation")));  
+	m_partner = 0;
+	iTools = 0;
+	iMTU = 0;
+//	iSession.Close();
+    }
+
+//-----------------------------------------------------------------------------------------
+TInt CEapCoreInterfaceImplementation::SetEnv(abs_eap_am_tools_c * const tools, const u32_t MTU)
+    {
+    EAP_TRACE_DEBUG_SYMBIAN(
+     (_L("CEapCoreInterfaceImplementation::SetEnv")));  
+	iTools = tools;
+	iMTU = MTU;
+	return KErrNone;
+    }
+
+/**
+ * Configure plugin implementation.
+ *
+ * @since S60 v3.2
+ * @param aHeaderOffset Offset of EAP-header in packet_send.
+ * @param aMTU Maximum transfer unit (MTU).
+ * @param aTrailerLength Length of trailer needed by lower levels..
+ * @return Return value is specified in interface specification.
+ */
+TInt CEapCoreInterfaceImplementation::Configure(
+	const TInt aHeaderOffset,
+	const TInt aMTU,
+	const TInt aTrailerLength,
+	const void * const aConfigurationData,
+	const TInt aConfigurationDataLength)
+	{
+	EAP_TRACE_DEBUG_SYMBIAN(
+	(_L("CEapCoreInterfaceImplementation::Configure")));  
+
+	TBuf<KMaxServerExe> ServerName;
+	TBuf<KMaxServerExe> ServerExe;
+
+	GetServerNameAndExe(&ServerName, &ServerExe);
+
+	TRAPD(err, iSession.ConnectL(iTools, this, ServerName, ServerExe, aConfigurationData, aConfigurationDataLength, EEapCoreIfNew));
+
+	if(err)
+	{
+		EAP_TRACE_DEBUG(
+			iTools,
+			TRACE_FLAGS_DEFAULT,
+			(EAPL("CEapCoreInterfaceImplementation::Configure - iSession.ConnectL err=%d\n"), err ));
+		return err;
+	}
+
+	EAP_TRACE_DEBUG_SYMBIAN((_L("CEapCoreInterfaceImplementation::Configure end")));
+
+	return err;
+	}
+
+//-----------------------------------------------------------------------------------------
+
+/**
+ * Shutdown plugin implementation.
+ *
+ * @since S60 v3.2
+ * @return Return value is specified in interface specification.
+ */        
+TInt CEapCoreInterfaceImplementation::Shutdown()
+    {
+    EAP_TRACE_DEBUG_SYMBIAN(
+     (_L("CEapCoreInterfaceImplementation::Shutdown")));  
+    iSession.Close();
+
+	return 0;
+    }
+
+//-----------------------------------------------------------------------------------------
+
+/**
+ * Send data to EAPOL.
+ *
+ * @since S60 v3.2
+ * @param aData Pointer to the data to be sent.
+ * @param aLength Length of the data to be sent.
+ * @return Return value is specified in interface specification.
+ */
+TInt CEapCoreInterfaceImplementation::ProcessData(
+        const void * const aData, 
+        const TInt aLength )
+    {
+    EAP_TRACE_DEBUG(
+            iTools,
+        TRACE_FLAGS_DEFAULT,
+        (EAPL("CEapCoreInterfaceImplementation::ProcessData()\n")));
+
+	EAP_TRACE_DATA_DEBUG(
+		iTools,
+		TRACE_FLAGS_DEFAULT,
+		(EAPL("CEapCoreInterfaceImplementation::ProcessData()"),
+		aData,
+		aLength));
+
+    return iSession.process_data(EEapCoreProcessData, aData, aLength);
+    }
+
+//-----------------------------------------------------------------------------------------
+
+/**
+ * Symbian 2nd phase constructor.
+ */
+void CEapCoreInterfaceImplementation::ConstructL(MEapSendInterface * aPartner)
+    {
+	m_partner = aPartner;
+	m_is_valid = true;
+    EAP_TRACE_DEBUG_SYMBIAN(
+     (_L("CEapCoreInterfaceImplementation::ConstructL")));  
+	
+//    RWapiSession session;
+//    __UHEAP_MARK;
+//    CTestPacketHandler* tph = new (ELeave) CTestPacketHandler;
+//    CleanupStack::PushL( tph );
+
+//    CleanupStack::Pop( tph );
+    
+//    delete tph;
+
+    }
+
+//-----------------------------------------------------------------------------------------
+
+bool CEapCoreInterfaceImplementation::get_is_valid()
+    {
+    EAP_TRACE_DEBUG_SYMBIAN(
+      (_L("CEapCoreInterfaceImplementation::get_is_valid = %d"),m_is_valid ));  
+    
+	return m_is_valid;
+    }
+
+//-----------------------------------------------------------------------------------------
+
+/// Function sends the data message to lower layer.
+/// Data is formatted to Attribute-Value Pairs.
+/// Look at eap_tlv_header_c and eap_tlv_message_data_c.
+eap_status_e CEapCoreInterfaceImplementation::send_data(const TDesC8& message)
+    {
+    EAP_TRACE_DEBUG(
+            iTools,
+        TRACE_FLAGS_DEFAULT,
+    (EAPL("CEapCoreInterfaceImplementation::send_data \n")));
+
+	return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(
+		m_partner->SendData(
+            message.Ptr(), 
+            message.Length())));
+    }
+
+//-----------------------------------------------------------------------------------------
+
+// ======== GLOBAL FUNCTIONS ========
+
+// ---------------------------------------------------------
+// Returns an instance of the proxy table.
+// Returns: KErrNone
+// ---------------------------------------------------------
+//
+EAP_FUNC_EXPORT const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount )
+    {
+    EAP_TRACE_DEBUG_SYMBIAN(
+            (_L("TImplementationProxy* ImplementationGroupProxy")));  
+
+    aTableCount = sizeof( ImplementationTable) / sizeof( TImplementationProxy );
+    return ImplementationTable;
+    }
+
+//-----------------------------------------------------------------------------------------
+
+// End of file.
+