wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_iap_data.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 15 Mar 2010 12:46:48 +0200
branchRCL_3
changeset 6 e0f767079796
parent 0 c40eb8fe8501
child 16 5fb7af913dfd
permissions -rw-r--r--
Revision: 201009 Kit: 201010

/*
* Copyright (c) 2005-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:  Class holding all IAP related data
*
*/

/*
* %version: 14.1.1 %
*/

#include "core_iap_data.h"
#include "core_tools.h"
#include "am_debug.h"

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//   
core_iap_data_c::core_iap_data_c(
    const core_iap_data_s& iap_data ) :
    iap_data_m( iap_data ),
    iap_whitelist_m( ),
    iap_blacklist_m( )
    {
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
core_iap_data_c::~core_iap_data_c()
    {
    iap_whitelist_m.clear();
    iap_blacklist_m.clear();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u32_t core_iap_data_c::id() const
    {
    return iap_data_m.id;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u32_t core_iap_data_c::iap_id() const
    {
    return iap_data_m.iap_id;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
core_operating_mode_e core_iap_data_c::operating_mode() const
    {
    return iap_data_m.op_mode;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
const core_ssid_s& core_iap_data_c::ssid() const
    {
    return iap_data_m.ssid;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_hidden() const
    {
    return iap_data_m.is_hidden;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
const core_wep_key_s& core_iap_data_c::wep_key(
    u32_t key_index ) const
    {
    switch ( key_index )
        {
        case WEP_KEY1:
            return iap_data_m.wep_key1;
        case WEP_KEY2:
            return iap_data_m.wep_key2;
        case WEP_KEY3:
            return iap_data_m.wep_key3;
        default:
            return iap_data_m.wep_key4;
        }
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u32_t core_iap_data_c::default_wep_key_index() const
    {
    return iap_data_m.default_wep_key;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
core_security_mode_e core_iap_data_c::security_mode() const
    {
    return iap_data_m.security_mode;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
core_authentication_mode_e core_iap_data_c::authentication_mode() const
    {
    return iap_data_m.authentication_mode;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_iap_data_c::set_authentication_mode(
    core_authentication_mode_e mode )
    {
    iap_data_m.authentication_mode = mode;    
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_psk_used() const
    {
    return iap_data_m.wpa_preshared_key_in_use;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_psk_overridden() const
    {
    return iap_data_m.is_wpa_overriden;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
const core_wpa_preshared_key_s& core_iap_data_c::psk_key() const
    {
    return iap_data_m.wpa_preshared_key;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
u32_t core_iap_data_c::adhoc_channel() const
    {
    return iap_data_m.used_adhoc_channel;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_dynamic_ip_addr() const
    {
    return iap_data_m.is_dynamic_ip_addr;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_roaming_allowed() const
    {
    return iap_data_m.is_roaming_allowed;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_eap_used() const
    {
    if ( iap_data_m.security_mode == core_security_mode_802dot1x ||
        iap_data_m.security_mode == core_security_mode_wpa ||
        iap_data_m.security_mode == core_security_mode_wpa2only ||
        iap_data_m.security_mode == core_security_mode_protected_setup )
        {
        return true_t;
        }
    
    return false_t;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_wapi_used() const
    {
    return( iap_data_m.security_mode == core_security_mode_wapi );
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_802dot1x_used() const
    {
    return iap_data_m.security_mode == core_security_mode_802dot1x;
    }
    
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_iap_whitelist_empty() const
    {
    return !iap_whitelist_m.count();
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_mac_in_iap_whitelist(
    const core_mac_address_s& mac )
    {
    core_mac_address_s* addr = iap_whitelist_m.first();    
    while ( addr )
        {
        if ( *addr == mac )
            {
            return true_t;
            }
        
        addr = iap_whitelist_m.next();
        }        
    
    return false_t;    
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_mac_in_iap_blacklist(
    const core_mac_address_s& mac )
    {
    core_mac_address_s* addr = iap_blacklist_m.first();    
    while ( addr )
        {
        if ( *addr == mac )
            {
            return true_t;
            }
        
        addr = iap_blacklist_m.next();
        }        

    return false_t;
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_iap_data_c::add_mac_to_iap_whitelist(
    const core_mac_address_s& mac )
    {
    if ( !is_mac_in_iap_whitelist( mac ) )
        {
        core_mac_address_s* entry = new core_mac_address_s;
        if ( entry )
            {
            *entry = mac;
            iap_whitelist_m.append( entry );
            }                        
        }
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_iap_data_c::remove_mac_from_iap_whitelist(
    const core_mac_address_s& mac )
    {
    core_mac_address_s* addr = iap_whitelist_m.first();    
    while ( addr )
        {
        if ( *addr == mac )
            {
            iap_whitelist_m.remove( addr );
            delete addr;

            return;
            }
        
        addr = iap_whitelist_m.next();
        }
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_iap_data_c::add_mac_to_iap_blacklist(
    const core_mac_address_s& mac )
    {
    if ( !is_mac_in_iap_blacklist( mac ) )
        {
        core_mac_address_s* entry = new core_mac_address_s;
        if ( entry )
            {
            *entry = mac;
            iap_blacklist_m.append( entry );
            }                        
        }       
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
void core_iap_data_c::remove_mac_from_iap_blacklist(
    const core_mac_address_s& mac )
    {
    core_mac_address_s* addr = iap_blacklist_m.first();    
    while ( addr )
        {
        if ( *addr == mac )
            {
            iap_blacklist_m.remove( addr );
            delete addr;

            return;
            }
        
        addr = iap_blacklist_m.next();
        }       
    }

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
bool_t core_iap_data_c::is_valid() const
    {
    if( iap_data_m.security_mode == core_security_mode_wep )
        {
        if( !iap_data_m.wep_key1.key_length &&
            !iap_data_m.wep_key2.key_length &&
            !iap_data_m.wep_key3.key_length &&
            !iap_data_m.wep_key4.key_length )
            {
            DEBUG( "core_iap_data_c::is_valid() - security mode is WEP but no keys defined" );

            return false_t;
            }

        if( ( iap_data_m.default_wep_key > WEP_KEY4 ) ||             
            ( iap_data_m.default_wep_key == WEP_KEY1 &&
              !iap_data_m.wep_key1.key_length ) ||
            ( iap_data_m.default_wep_key == WEP_KEY2 &&
              !iap_data_m.wep_key2.key_length ) ||
            ( iap_data_m.default_wep_key == WEP_KEY3 &&
              !iap_data_m.wep_key3.key_length ) ||
            ( iap_data_m.default_wep_key == WEP_KEY4 &&
              !iap_data_m.wep_key4.key_length ) )
            {
            DEBUG( "core_iap_data_c::is_valid() - security mode is WEP but default key not defined" );

            return false_t;
            }
        }

    if( iap_data_m.wpa_preshared_key_in_use &&
        !iap_data_m.wpa_preshared_key.key_length )
        {
        DEBUG( "core_iap_data_c::is_valid() - security mode is WPA-PSK but key is not defined" );

        return false_t;   
        }
    
    if( iap_data_m.op_mode == core_operating_mode_ibss &&
        ( iap_data_m.security_mode != core_security_mode_allow_unsecure &&
          iap_data_m.security_mode != core_security_mode_wep ) )
        {
        DEBUG1( "core_iap_data_c::is_valid() - IBSS mode with security mode %u not supported",
            iap_data_m.security_mode );

        return false_t;        
        }

    return true_t;
    }