eapol/eapol_framework/eapol_symbian/eap_if/src/EapCoreInterface.cpp
author hgs
Mon, 24 May 2010 20:32:47 +0300
changeset 26 9abfd4f00d37
child 34 ad1f037f1ac2
permissions -rw-r--r--
201021
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
/*
hgs
parents:
diff changeset
    19
* %version: 19 %
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"
hgs
parents:
diff changeset
    25
#include <EapPluginTools.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
CEapCoreInterface::CEapCoreInterface(const u32_t MTU):
hgs
parents:
diff changeset
    28
  iClient(NULL)
hgs
parents:
diff changeset
    29
  ,iIsValid(FALSE)
hgs
parents:
diff changeset
    30
  ,iTools(0)
hgs
parents:
diff changeset
    31
  ,iEapCoreInterface(0)
hgs
parents:
diff changeset
    32
  ,iServer(0)
hgs
parents:
diff changeset
    33
  ,iMTU(MTU)
hgs
parents:
diff changeset
    34
     {
hgs
parents:
diff changeset
    35
     }
hgs
parents:
diff changeset
    36
hgs
parents:
diff changeset
    37
CEapCoreInterface::~CEapCoreInterface()
hgs
parents:
diff changeset
    38
    {
hgs
parents:
diff changeset
    39
    delete iEapCoreInterface;
hgs
parents:
diff changeset
    40
    }
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
EAP_FUNC_EXPORT CEapProcessInterface* CEapCoreInterface::ConstrucL(abs_eap_am_tools_c * const tools)
hgs
parents:
diff changeset
    43
    {
hgs
parents:
diff changeset
    44
    iTools = tools;
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    //TInt implementationUid( EAP_CORE_INTERFACEIMPLEMENTATION_IMPLEMENTATION_UID );
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
	const TUid KimplementationInterfaceUid = { EAP_CORE_INTERFACEIMPLEMENTATION_INTERFACE_UID };
hgs
parents:
diff changeset
    49
		
hgs
parents:
diff changeset
    50
    RImplInfoPtrArray aImplInfoArray;
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
	CleanupStack::PushL( TCleanupItem( EapPluginTools::CleanupImplArray, &aImplInfoArray ) );
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
    REComSession::ListImplementationsL(KimplementationInterfaceUid,
hgs
parents:
diff changeset
    55
            aImplInfoArray);
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
	   	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    58
	      tools, 
hgs
parents:
diff changeset
    59
	      TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    60
	      (EAPL("CEapCoreInterface::ConstrucL Implementation %d\n"),aImplInfoArray[0]->ImplementationUid().iUid));
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
    iServer = CEapProcessInterface::NewL(
hgs
parents:
diff changeset
    63
            aImplInfoArray[0]->ImplementationUid().iUid,
hgs
parents:
diff changeset
    64
            this);
hgs
parents:
diff changeset
    65
hgs
parents:
diff changeset
    66
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    67
      tools, 
hgs
parents:
diff changeset
    68
      TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    69
      (EAPL("CEapCoreInterface::ConstrucL CEapProcessInterface::NewL done\n")));
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
    iIsValid = TRUE;
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
	CleanupStack::PopAndDestroy(&aImplInfoArray);
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
    return iServer;
hgs
parents:
diff changeset
    76
    
hgs
parents:
diff changeset
    77
    }
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
EAP_FUNC_EXPORT eap_am_message_if_c * new_eap_am_client_message_if_c(
hgs
parents:
diff changeset
    80
        abs_eap_am_tools_c * const tools,
hgs
parents:
diff changeset
    81
        const bool is_client_when_true,
hgs
parents:
diff changeset
    82
        const u32_t MTU)
hgs
parents:
diff changeset
    83
    {   
hgs
parents:
diff changeset
    84
     CEapCoreInterface * aEapCoreInterface = 0;
hgs
parents:
diff changeset
    85
     CEapProcessInterface* aServer =0;
hgs
parents:
diff changeset
    86
     
hgs
parents:
diff changeset
    87
	   	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    88
	      tools, 
hgs
parents:
diff changeset
    89
	      TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    90
	      (EAPL("new_eap_am_client_message_if_c()\n")));
hgs
parents:
diff changeset
    91
	      
hgs
parents:
diff changeset
    92
     aEapCoreInterface = new CEapCoreInterface(MTU);
hgs
parents:
diff changeset
    93
     if (aEapCoreInterface != 0)
hgs
parents:
diff changeset
    94
         {
hgs
parents:
diff changeset
    95
		 TRAPD( err, aServer = aEapCoreInterface->ConstrucL(tools));
hgs
parents:
diff changeset
    96
         if (err)
hgs
parents:
diff changeset
    97
             {    
hgs
parents:
diff changeset
    98
             	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    99
				        tools, 
hgs
parents:
diff changeset
   100
				        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   101
				        (EAPL("new_eap_am_client_message_if_c() NO SERVER IF, err = %d\n"),err));
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
               return 0;
hgs
parents:
diff changeset
   104
             }
hgs
parents:
diff changeset
   105
         else if(aServer == NULL)
hgs
parents:
diff changeset
   106
            {
hgs
parents:
diff changeset
   107
             	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   108
				        tools, 
hgs
parents:
diff changeset
   109
				        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   110
				        (EAPL("new_eap_am_client_message_if_c() SERVER IF == 0\n")));
hgs
parents:
diff changeset
   111
          	}   
hgs
parents:
diff changeset
   112
         else
hgs
parents:
diff changeset
   113
  	       {
hgs
parents:
diff changeset
   114
	    	   aServer->SetEnv(tools, MTU);
hgs
parents:
diff changeset
   115
  	       }
hgs
parents:
diff changeset
   116
          
hgs
parents:
diff changeset
   117
         }
hgs
parents:
diff changeset
   118
       else
hgs
parents:
diff changeset
   119
       		{
hgs
parents:
diff changeset
   120
          EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   121
				        tools, 
hgs
parents:
diff changeset
   122
				        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   123
				        (EAPL("new_eap_am_client_message_if_c() new(ELeave) CEapCoreInterface(MTU) failed\n")));
hgs
parents:
diff changeset
   124
       	 	return 0;
hgs
parents:
diff changeset
   125
					}
hgs
parents:
diff changeset
   126
     return aEapCoreInterface;
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
    }
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
EAP_FUNC_EXPORT bool CEapCoreInterface::get_is_valid()
hgs
parents:
diff changeset
   131
    {
hgs
parents:
diff changeset
   132
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   133
             iTools, 
hgs
parents:
diff changeset
   134
             TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   135
             (EAPL("CEapCoreInterface::get_is_valid() = %d\n"),iIsValid ));
hgs
parents:
diff changeset
   136
      return iIsValid;
hgs
parents:
diff changeset
   137
    }
hgs
parents:
diff changeset
   138
hgs
parents:
diff changeset
   139
EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::process_data(const void * const data, const u32_t length)
hgs
parents:
diff changeset
   140
    {
hgs
parents:
diff changeset
   141
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   142
            iTools, 
hgs
parents:
diff changeset
   143
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   144
            (EAPL("CEapCoreInterface::process_data()\n")));
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    TInt err = iServer->ProcessData(data, length);
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
hgs
parents:
diff changeset
   149
    }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::configure(
hgs
parents:
diff changeset
   153
	const eap_variable_data_c * const client_configuration)
hgs
parents:
diff changeset
   154
    {
hgs
parents:
diff changeset
   155
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   156
            iTools, 
hgs
parents:
diff changeset
   157
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   158
            (EAPL("CEapCoreInterface::configure()\n")));
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    TInt err = iServer->Configure(0,0,0, client_configuration->get_data(), client_configuration->get_data_length());
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
hgs
parents:
diff changeset
   163
    }
hgs
parents:
diff changeset
   164
hgs
parents:
diff changeset
   165
// This is documented in abs_eap_stack_interface_c::shutdown().
hgs
parents:
diff changeset
   166
EAP_FUNC_EXPORT eap_status_e CEapCoreInterface::shutdown()
hgs
parents:
diff changeset
   167
    {
hgs
parents:
diff changeset
   168
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   169
            iTools, 
hgs
parents:
diff changeset
   170
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   171
            (EAPL("CEapCoreInterface::shutdown()\n")));
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    TInt err = iServer->Shutdown();
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    return EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(err));
hgs
parents:
diff changeset
   176
    }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
EAP_FUNC_EXPORT void CEapCoreInterface::set_partner(abs_eap_am_message_if_c * const client)
hgs
parents:
diff changeset
   179
    {
hgs
parents:
diff changeset
   180
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   181
            iTools, 
hgs
parents:
diff changeset
   182
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   183
            (EAPL("CEapCoreInterface::set_partner()\n")));
hgs
parents:
diff changeset
   184
    iClient = client;
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
hgs
parents:
diff changeset
   187
EAP_FUNC_EXPORT TInt CEapCoreInterface::SendData(
hgs
parents:
diff changeset
   188
    const void * const aData, 
hgs
parents:
diff changeset
   189
    const TInt aLength )
hgs
parents:
diff changeset
   190
    {
hgs
parents:
diff changeset
   191
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   192
            iTools, 
hgs
parents:
diff changeset
   193
            TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   194
            (EAPL("CEapCoreInterface::SendData()\n")));
hgs
parents:
diff changeset
   195
    if (iClient != NULL)
hgs
parents:
diff changeset
   196
        {
hgs
parents:
diff changeset
   197
        return iClient->send_data( aData, aLength);
hgs
parents:
diff changeset
   198
        }
hgs
parents:
diff changeset
   199
    else
hgs
parents:
diff changeset
   200
        {
hgs
parents:
diff changeset
   201
        return KErrNone;
hgs
parents:
diff changeset
   202
        }
hgs
parents:
diff changeset
   203
    }
hgs
parents:
diff changeset
   204