eapol/eapol_framework/eapol_symbian/eap_if/src/EapCoreInterface.cpp
author hgs
Thu, 16 Sep 2010 13:07:04 +0300
changeset 49 43351a4f2da3
parent 34 ad1f037f1ac2
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  EAP and WLAN authentication protocols.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
/*
49
hgs
parents: 34
diff changeset
    19
* %version: 22 %
26
hgs
parents:
diff changeset
    20
*/
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "EapCoreInterface.h"
hgs
parents:
diff changeset
    23
#include "eap_am_tools.h"
hgs
parents:
diff changeset
    24
#include "EapolUID.h"
34
hgs
parents: 26
diff changeset
    25
#include "EapPluginTools.h"
49
hgs
parents: 34
diff changeset
    26
#include "eap_am_message_if.h"
26
hgs
parents:
diff changeset
    27
49
hgs
parents: 34
diff changeset
    28
EAP_FUNC_EXPORT CEapCoreInterface::CEapCoreInterface(const u32_t MTU):
26
hgs
parents:
diff changeset
    29
  iClient(NULL)
hgs
parents:
diff changeset
    30
  ,iIsValid(FALSE)
hgs
parents:
diff changeset
    31
  ,iTools(0)
hgs
parents:
diff changeset
    32
  ,iEapCoreInterface(0)
hgs
parents:
diff changeset
    33
  ,iServer(0)
hgs
parents:
diff changeset
    34
  ,iMTU(MTU)
hgs
parents:
diff changeset
    35
     {
hgs
parents:
diff changeset
    36
     }
hgs
parents:
diff changeset
    37
49
hgs
parents: 34
diff changeset
    38
EAP_FUNC_EXPORT CEapCoreInterface::~CEapCoreInterface()
26
hgs
parents:
diff changeset
    39
    {
hgs
parents:
diff changeset
    40
    delete iEapCoreInterface;
hgs
parents:
diff changeset
    41
    }
hgs
parents:
diff changeset
    42
hgs
parents:
diff changeset
    43
EAP_FUNC_EXPORT CEapProcessInterface* CEapCoreInterface::ConstrucL(abs_eap_am_tools_c * const tools)
hgs
parents:
diff changeset
    44
    {
hgs
parents:
diff changeset
    45
    iTools = tools;
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
    //TInt implementationUid( EAP_CORE_INTERFACEIMPLEMENTATION_IMPLEMENTATION_UID );
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
	const TUid KimplementationInterfaceUid = { EAP_CORE_INTERFACEIMPLEMENTATION_INTERFACE_UID };
hgs
parents:
diff changeset
    50
		
hgs
parents:
diff changeset
    51
    RImplInfoPtrArray aImplInfoArray;
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
	CleanupStack::PushL( TCleanupItem( EapPluginTools::CleanupImplArray, &aImplInfoArray ) );
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
    REComSession::ListImplementationsL(KimplementationInterfaceUid,
hgs
parents:
diff changeset
    56
            aImplInfoArray);
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
	   	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    59
	      tools, 
hgs
parents:
diff changeset
    60
	      TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    61
	      (EAPL("CEapCoreInterface::ConstrucL Implementation %d\n"),aImplInfoArray[0]->ImplementationUid().iUid));
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    iServer = CEapProcessInterface::NewL(
hgs
parents:
diff changeset
    64
            aImplInfoArray[0]->ImplementationUid().iUid,
hgs
parents:
diff changeset
    65
            this);
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    68
      tools, 
hgs
parents:
diff changeset
    69
      TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    70
      (EAPL("CEapCoreInterface::ConstrucL CEapProcessInterface::NewL done\n")));
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    iIsValid = TRUE;
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
	CleanupStack::PopAndDestroy(&aImplInfoArray);
hgs
parents:
diff changeset
    75
hgs
parents:
diff changeset
    76
    return iServer;
hgs
parents:
diff changeset
    77
    
hgs
parents:
diff changeset
    78
    }
hgs
parents:
diff changeset
    79
49
hgs
parents: 34
diff changeset
    80
hgs
parents: 34
diff changeset
    81
EAP_C_FUNC_EXPORT eap_am_message_if_c * new_eap_am_client_message_if_c(
26
hgs
parents:
diff changeset
    82
        abs_eap_am_tools_c * const tools,
34
hgs
parents: 26
diff changeset
    83
        const bool /* is_client_when_true */,
26
hgs
parents:
diff changeset
    84
        const u32_t MTU)
hgs
parents:
diff changeset
    85
    {   
hgs
parents:
diff changeset
    86
     CEapCoreInterface * aEapCoreInterface = 0;
hgs
parents:
diff changeset
    87
     CEapProcessInterface* aServer =0;
hgs
parents:
diff changeset
    88
     
hgs
parents:
diff changeset
    89
	   	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    90
	      tools, 
hgs
parents:
diff changeset
    91
	      TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    92
	      (EAPL("new_eap_am_client_message_if_c()\n")));
hgs
parents:
diff changeset
    93
	      
hgs
parents:
diff changeset
    94
     aEapCoreInterface = new CEapCoreInterface(MTU);
hgs
parents:
diff changeset
    95
     if (aEapCoreInterface != 0)
hgs
parents:
diff changeset
    96
         {
hgs
parents:
diff changeset
    97
		 TRAPD( err, aServer = aEapCoreInterface->ConstrucL(tools));
hgs
parents:
diff changeset
    98
         if (err)
hgs
parents:
diff changeset
    99
             {    
hgs
parents:
diff changeset
   100
             	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   101
				        tools, 
hgs
parents:
diff changeset
   102
				        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   103
				        (EAPL("new_eap_am_client_message_if_c() NO SERVER IF, err = %d\n"),err));
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
               return 0;
hgs
parents:
diff changeset
   106
             }
hgs
parents:
diff changeset
   107
         else if(aServer == NULL)
hgs
parents:
diff changeset
   108
            {
hgs
parents:
diff changeset
   109
             	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   110
				        tools, 
hgs
parents:
diff changeset
   111
				        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   112
				        (EAPL("new_eap_am_client_message_if_c() SERVER IF == 0\n")));
hgs
parents:
diff changeset
   113
          	}   
hgs
parents:
diff changeset
   114
         else
hgs
parents:
diff changeset
   115
  	       {
hgs
parents:
diff changeset
   116
	    	   aServer->SetEnv(tools, MTU);
hgs
parents:
diff changeset
   117
  	       }
hgs
parents:
diff changeset
   118
          
hgs
parents:
diff changeset
   119
         }
hgs
parents:
diff changeset
   120
       else
hgs
parents:
diff changeset
   121
       		{
hgs
parents:
diff changeset
   122
          EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   123
				        tools, 
hgs
parents:
diff changeset
   124
				        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   125
				        (EAPL("new_eap_am_client_message_if_c() new(ELeave) CEapCoreInterface(MTU) failed\n")));
hgs
parents:
diff changeset
   126
       	 	return 0;
hgs
parents:
diff changeset
   127
					}
hgs
parents:
diff changeset
   128
     return aEapCoreInterface;
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
    }
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
EAP_FUNC_EXPORT bool CEapCoreInterface::get_is_valid()
hgs
parents:
diff changeset
   133
    {
hgs
parents:
diff changeset
   134
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   135
             iTools, 
hgs
parents:
diff changeset
   136
             TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   137
             (EAPL("CEapCoreInterface::get_is_valid() = %d\n"),iIsValid ));
hgs
parents:
diff changeset
   138
      return iIsValid;
hgs
parents:
diff changeset
   139
    }
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::process_data(const void * const data, const u32_t length)
hgs
parents:
diff changeset
   142
    {
hgs
parents:
diff changeset
   143
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   144
            iTools, 
hgs
parents:
diff changeset
   145
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   146
            (EAPL("CEapCoreInterface::process_data()\n")));
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
    TInt err = iServer->ProcessData(data, length);
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
hgs
parents:
diff changeset
   151
    }
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::configure(
hgs
parents:
diff changeset
   155
	const eap_variable_data_c * const client_configuration)
hgs
parents:
diff changeset
   156
    {
hgs
parents:
diff changeset
   157
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   158
            iTools, 
hgs
parents:
diff changeset
   159
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   160
            (EAPL("CEapCoreInterface::configure()\n")));
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    TInt err = iServer->Configure(0,0,0, client_configuration->get_data(), client_configuration->get_data_length());
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
hgs
parents:
diff changeset
   165
    }
hgs
parents:
diff changeset
   166
hgs
parents:
diff changeset
   167
// This is documented in abs_eap_stack_interface_c::shutdown().
hgs
parents:
diff changeset
   168
EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::shutdown()
hgs
parents:
diff changeset
   169
    {
hgs
parents:
diff changeset
   170
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   171
            iTools, 
hgs
parents:
diff changeset
   172
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   173
            (EAPL("CEapCoreInterface::shutdown()\n")));
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    TInt err = iServer->Shutdown();
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
EAP_FUNC_EXPORT void CEapCoreInterface::set_partner(abs_eap_am_message_if_c * const client)
hgs
parents:
diff changeset
   181
    {
hgs
parents:
diff changeset
   182
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   183
            iTools, 
hgs
parents:
diff changeset
   184
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   185
            (EAPL("CEapCoreInterface::set_partner()\n")));
hgs
parents:
diff changeset
   186
    iClient = client;
hgs
parents:
diff changeset
   187
    }
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
EAP_FUNC_EXPORT TInt CEapCoreInterface::SendData(
hgs
parents:
diff changeset
   190
    const void * const aData, 
hgs
parents:
diff changeset
   191
    const TInt aLength )
hgs
parents:
diff changeset
   192
    {
hgs
parents:
diff changeset
   193
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   194
            iTools, 
hgs
parents:
diff changeset
   195
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   196
            (EAPL("CEapCoreInterface::SendData()\n")));
hgs
parents:
diff changeset
   197
    if (iClient != NULL)
hgs
parents:
diff changeset
   198
        {
hgs
parents:
diff changeset
   199
        return iClient->send_data( aData, aLength);
hgs
parents:
diff changeset
   200
        }
hgs
parents:
diff changeset
   201
    else
hgs
parents:
diff changeset
   202
        {
hgs
parents:
diff changeset
   203
        return KErrNone;
hgs
parents:
diff changeset
   204
        }
hgs
parents:
diff changeset
   205
    }
hgs
parents:
diff changeset
   206