eapol/eapol_framework/eapol_symbian/eap_server/src/PacStoreIf.cpp
changeset 33 938269283a16
child 34 ad1f037f1ac2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eapol/eapol_framework/eapol_symbian/eap_server/src/PacStoreIf.cpp	Fri Jun 11 13:40:22 2010 +0300
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2001-2010 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:  PAC-store interface inside the EAP-server.
+*
+*/
+
+/*
+* %version: 10 %
+*/
+
+#include "eap_am_tools.h"
+#include "eap_am_export.h"
+#include "PacStoreIf.h"
+#include "eap_automatic_variable.h"
+#include "eap_config.h"
+#include "eap_file_config.h"
+#include "abs_eap_am_mutex.h"
+
+
+/** @file */
+
+//--------------------------------------------------
+
+/**
+ * This is the timer ID used with abs_eap_am_tools_c::set_timer() and abs_eap_am_tools_c::cancel_timer().
+ */
+enum pac_store_message_if_timer_id
+{
+    pac_store_message_IF_TIMER_PROCESS_DATA_ID,
+    pac_store_message_IF_TIMER_SEND_DATA_ID,
+};
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT CPacStoreIf::CPacStoreIf(
+    abs_eap_am_tools_c * const tools,
+    eap_am_message_if_c * const server,
+    AbsEapSendInterface * client)
+    : m_am_tools(tools)
+    , m_client_if(client)
+    , m_server_if(server)
+    , m_fileconfig(0)
+    , m_use_asyncronous_test(false)
+    , iIsValid(false)
+{
+	if (m_am_tools == 0 || m_am_tools->get_is_valid() == false)
+		{
+		return;
+		}
+	if (m_client_if == 0)
+		{
+		return;
+		}
+	if (m_server_if == 0 || m_server_if->get_is_valid() == false)
+		{
+		return;
+		}
+		 
+	iIsValid = true;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT CPacStoreIf::~CPacStoreIf()
+{
+	if (m_server_if != 0)
+	{
+		m_server_if->shutdown();
+	}
+    delete m_server_if;
+    m_server_if = 0;
+
+    delete m_fileconfig;
+    m_fileconfig = 0;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT bool CPacStoreIf::get_is_valid()
+{
+    return iIsValid;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT eap_status_e CPacStoreIf::configure(
+	const eap_variable_data_c * const client_configuration)
+{
+	return m_server_if->configure(client_configuration);
+}
+
+// ----------------------------------------------------------------
+
+EAP_FUNC_EXPORT eap_status_e CPacStoreIf::send_data(const void * const data, const u32_t length)
+    {
+    return m_client_if->SendData(data, length, EEapPacStoreSendData);
+    }
+
+// ----------------------------------------------------------------
+
+EAP_FUNC_EXPORT eap_status_e CPacStoreIf::process_data(const void * const data, const u32_t length)
+    {
+    return m_server_if->process_data(data, length);
+    }
+
+//--------------------------------------------------
+
+//
+EAP_FUNC_EXPORT eap_status_e CPacStoreIf::shutdown()
+{
+    EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
+
+    EAP_ASSERT(m_am_tools->get_global_mutex()->get_is_reserved() == true);
+
+    EAP_TRACE_DEBUG(
+        m_am_tools, 
+        EAP_TRACE_FLAGS_MESSAGE_DATA, 
+        (EAPL("CPacStoreIf::shutdown(): this = 0x%08x.\n"),
+        this));
+
+    eap_status_e status(eap_status_ok);
+
+    if (m_server_if != 0)
+    {
+        status = m_server_if->shutdown();
+    }
+
+    EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+    return EAP_STATUS_RETURN(m_am_tools, status);
+}
+
+//--------------------------------------------------
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT eap_pac_store_server_message_if_c * eap_pac_store_server_message_if_c::new_eap_pac_store_server_message_if_c(
+    abs_eap_am_tools_c * const tools)
+{
+    EAP_TRACE_DEBUG(
+        tools,
+        TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
+        (EAPL("eap_pac_store_server_message_if_c::new_eap_pac_store_server_message_if_c()\n")));
+
+    EAP_TRACE_RETURN_STRING(tools, "returns: eap_pac_store_server_message_if_c::new_eap_pac_store_server_message_if_c()");
+
+    eap_pac_store_server_message_if_c * const server = new eap_pac_store_server_message_if_c(
+        tools);
+
+    eap_automatic_variable_c<eap_am_message_if_c> automatic_server(
+        tools,
+        server);
+
+    if (server == 0
+    || server->get_is_valid() == false)
+    {
+        // ERROR.
+        if (server != 0)
+        {
+            EAP_TRACE_DEBUG(
+            tools,
+            TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
+            (EAPL("calls: CPacStoreIf::CPacStoreIf(): server->shutdown()\n")));
+
+            (void) server->shutdown();
+        }
+        return 0;
+    }
+
+    eap_status_e status = server->configure(0);
+    if (status != eap_status_ok)
+    {
+        (void) server->shutdown();
+        return 0;
+    }
+
+    automatic_server.do_not_free_variable();
+
+    return server;
+}
+
+//--------------------------------------------------
+
+EAP_FUNC_EXPORT CPacStoreIf* CPacStoreIf::new_CPacStoreIf(
+    abs_eap_am_tools_c * const tools,
+    const bool is_client_when_true,
+    const u32_t MTU,
+    AbsEapSendInterface * client)
+    {
+    
+    eap_pac_store_server_message_if_c *server =  eap_pac_store_server_message_if_c::new_eap_pac_store_server_message_if_c(
+        tools);
+    
+    eap_automatic_variable_c<eap_am_message_if_c> automatic_server(
+        tools,
+        server);
+
+    if (server == 0
+        || server->get_is_valid() == false)
+        {
+        // ERROR.
+        if (server != 0)
+            {
+            EAP_TRACE_DEBUG(
+                tools,
+                TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
+                (EAPL("calls: CPacStoreIf(): server->shutdown(): %s.\n"),
+                (is_client_when_true == true) ? "client": "server"));
+
+            (void) server->shutdown();
+            }
+        return 0;
+        }
+
+    CPacStoreIf * pacstore_if = new CPacStoreIf(
+        tools,
+        server,
+        client);
+
+    eap_automatic_variable_c<CPacStoreIf> automatic_pacstore_if(
+        tools,
+        pacstore_if);
+
+    if (pacstore_if == 0
+        || pacstore_if->get_is_valid() == false)
+        {
+        // ERROR.
+        if (pacstore_if != 0)
+            {
+            EAP_TRACE_DEBUG(
+                tools,
+                TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
+                (EAPL("calls: CPacStoreIf(): pacstore_if->shutdown(): %s.\n"),
+                (is_client_when_true == true) ? "client": "server"));
+
+			// automatic_pacstore_if will delete pacstore_if and pacstore_if will delete server too.
+			automatic_server.do_not_free_variable();
+
+            (void) pacstore_if->shutdown();
+            }
+        return 0;
+        }
+
+    server->set_partner(pacstore_if);
+
+    automatic_server.do_not_free_variable();
+    automatic_pacstore_if.do_not_free_variable();
+    
+    return pacstore_if;
+    }
+
+//--------------------------------------------------
+// End