wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_connection_data.cpp
changeset 0 c40eb8fe8501
child 24 e717b8f55620
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_connection_data.cpp	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,909 @@
+/*
+* Copyright (c) 2005-2009 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 connection related data
+*
+*/
+
+/*
+* %version: 37 %
+*/
+
+#include "core_connection_data.h"
+#include "core_tools.h"
+#include "am_debug.h"
+
+const u8_t CORE_FAILURE_NONE = 0;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+core_connection_data_c::core_connection_data_c(
+    const core_iap_data_s& iap_data,
+    const core_device_settings_s& device_settings ) :
+    iap_data_m( iap_data ),
+    device_settings_m( device_settings ),
+    connect_status_m( core_connect_undefined ),
+    previous_ap_m( NULL ),
+    current_ap_m( NULL ),
+    ssid_m( BROADCAST_SSID ),
+    temp_blacklist_m( ),
+    last_rcp_class_m( core_rcp_normal ),
+    last_tx_level_m( MAX_TX_POWER_LEVEL_NOT_DEFINED ),
+    last_bssid_m( ZERO_MAC_ADDR ),
+    last_connection_state_m( core_connection_state_notconnected ),
+    association_failure_count_m( ),
+    deauthentication_count_m( ),
+    last_eap_type_m( EAP_TYPE_NONE ),
+    last_eap_error_code_m( EAP_ERROR_NONE ),
+    adjacent_ap_channels_m( ),
+    is_eapol_authentication_started_m( false_t ),
+    is_eapol_authenticating_m( false_t ),
+    eapol_auth_bssid_m( ZERO_MAC_ADDR ),
+    traffic_stream_list_m( ),
+    virtual_traffic_stream_list_m( ),
+    is_eapol_connecting_m( false_t ),
+    is_disconnecting_m( false_t ),
+    last_roam_reason_m( core_roam_reason_none ),
+    last_roam_failed_reason_m( core_roam_failed_reason_none ),
+    is_eapol_require_immediate_reconnect_m( false_t ),
+    is_voice_call_on_m( false_t ),
+    previous_rrm_measurement_request_time_m( 0 )
+    {
+    DEBUG( "core_connection_data_c::core_connection_data_c()" );
+
+    for( u8_t idx( 0 ); idx < MAX_QOS_ACCESS_CLASS; ++idx )
+        {
+        ac_traffic_status_m[idx] = core_access_class_traffic_status_admitted;
+        ac_traffic_mode_m[idx] = core_access_class_traffic_mode_automatic;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_connection_data_c::~core_connection_data_c()
+    {
+    DEBUG( "core_connection_data_c::~core_connection_data_c()" );
+    delete current_ap_m;
+    delete previous_ap_m;
+    temp_blacklist_m.clear();
+    association_failure_count_m.clear();
+    deauthentication_count_m.clear();
+    power_save_test_verdict_m.clear();
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+core_iap_data_c& core_connection_data_c::iap_data()
+    {
+    return iap_data_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+core_connect_status_e core_connection_data_c::connect_status() const
+    {
+    return connect_status_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+void core_connection_data_c::set_connect_status(
+    core_connect_status_e connect_status )
+    {
+    connect_status_m = connect_status;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+void core_connection_data_c::set_current_ap_data(
+    const core_ap_data_c& ap_data )
+    {
+    DEBUG( "core_connection_data_c::set_current_ap_data()" );
+    
+    delete current_ap_m;
+    current_ap_m = NULL;
+    
+    current_ap_m = core_ap_data_c::instance( ap_data );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_ap_data_c* core_connection_data_c::current_ap_data()
+    {
+    return current_ap_m;
+    }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_previous_ap_data(
+    const core_ap_data_c& ap_data )
+    {
+    delete previous_ap_m;
+    previous_ap_m = NULL;
+    
+    previous_ap_m = core_ap_data_c::instance( ap_data );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_ap_data_c* core_connection_data_c::previous_ap_data()
+    {
+    return previous_ap_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+const core_ssid_s& core_connection_data_c::ssid() const
+    {
+    return ssid_m;
+    }
+    
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_ssid(
+    const core_ssid_s& ssid )
+    {
+    ssid_m = ssid;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::is_mac_in_temporary_blacklist(
+    const core_mac_address_s& mac )
+    {
+    core_ap_blacklist_entry_s* addr = temp_blacklist_m.first();    
+    while ( addr )
+        {
+        if ( addr->bssid == mac )
+            {
+            return true_t;
+            }
+        
+        addr = temp_blacklist_m.next();
+        }        
+
+    return false_t;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::add_mac_to_temporary_blacklist(
+    const core_mac_address_s& mac,
+    core_ap_blacklist_reason_e reason )
+    {
+    if ( !is_mac_in_temporary_blacklist( mac ) )
+        {
+        core_ap_blacklist_entry_s* entry = new core_ap_blacklist_entry_s;
+        if ( entry )
+            {
+            entry->bssid = mac;
+            entry->reason = reason;
+            temp_blacklist_m.append( entry );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::remove_mac_from_temporary_blacklist(
+    const core_mac_address_s& mac )
+    {
+    core_ap_blacklist_entry_s* addr = temp_blacklist_m.first();    
+    while ( addr )
+        {
+        if ( addr->bssid == mac )
+            {
+            temp_blacklist_m.remove( addr );
+            delete addr;
+            addr = NULL;
+
+            return;
+            }
+        
+        addr = temp_blacklist_m.next();
+        }       
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_type_list_c<core_ap_blacklist_entry_s>& core_connection_data_c::temporary_blacklist()
+    {
+    return temp_blacklist_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::remove_temporary_blacklist_entries(
+    u32_t reasons )
+    {
+    core_ap_blacklist_entry_s* addr = temp_blacklist_m.first();    
+    while( addr )
+        {
+        if( reasons & addr->reason )
+            {
+            DEBUG6( "core_connection_data_c::remove_temporary_blacklist_entries() - removing entry with BSSID %02X:%02X:%02X:%02X:%02X:%02X",
+                addr->bssid.addr[0], addr->bssid.addr[1], addr->bssid.addr[2], 
+                addr->bssid.addr[3], addr->bssid.addr[4], addr->bssid.addr[5] );
+
+            temp_blacklist_m.remove( addr );
+            delete addr;
+            addr = NULL;
+
+            return;
+            }
+
+        addr = temp_blacklist_m.next();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_rcp_class_e core_connection_data_c::last_rcp_class() const
+    {
+    return last_rcp_class_m;  
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+void core_connection_data_c::set_last_rcp_class(
+    core_rcp_class_e type )
+    {
+    last_rcp_class_m = type;
+    };
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+u32_t core_connection_data_c::last_tx_level() const
+    {
+    return last_tx_level_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//      
+void core_connection_data_c::set_last_tx_level(
+    u32_t tx_level )
+    {
+    last_tx_level_m = tx_level;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+const core_mac_address_s& core_connection_data_c::last_bssid() const
+    {
+    return last_bssid_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_last_bssid(
+    const core_mac_address_s& bssid )
+    {
+    last_bssid_m = bssid;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_connection_state_e core_connection_data_c::connection_state() const
+    {
+    core_operating_mode_e mode =
+        iap_data_m.operating_mode();
+        
+    if( mode == core_operating_mode_ibss )
+        {
+        if( iap_data_m.security_mode() == core_security_mode_allow_unsecure )
+            {
+            return core_connection_state_ibss;
+            }
+        else
+            {
+            return core_connection_state_secureibss;
+            }
+        }
+    else
+        {
+        if( iap_data_m.security_mode() == core_security_mode_allow_unsecure )
+            {
+            return core_connection_state_infrastructure;
+            }
+        else
+            {
+            return core_connection_state_secureinfra;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_connection_state_e core_connection_data_c::last_connection_state() const
+    {
+    return last_connection_state_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_last_connection_state(
+    core_connection_state_e state )
+    {
+    last_connection_state_m = state;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+u8_t core_connection_data_c::ap_association_failure_count(
+    const core_mac_address_s& bssid )
+    {    
+    core_ap_failure_count_s* iter = association_failure_count_m.first();    
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            return iter->count;
+            }
+
+        iter = association_failure_count_m.next();
+        }
+
+    return CORE_FAILURE_NONE;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::increase_ap_association_failure_count(
+    const core_mac_address_s& bssid )
+    {
+    core_ap_failure_count_s* iter = association_failure_count_m.first();    
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            iter->count++;
+            return;
+            }
+
+        iter = association_failure_count_m.next();
+        }
+
+    iter = new core_ap_failure_count_s;
+    if ( iter )
+        {
+        iter->bssid = bssid;
+        iter->count = CORE_FAILURE_NONE + 1;
+        association_failure_count_m.append( iter );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::clear_ap_association_failure_count(
+    const core_mac_address_s& bssid )
+    {
+    core_ap_failure_count_s* iter = association_failure_count_m.first();    
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            DEBUG1( "core_connection_data_c::clear_ap_failure_count() - this AP had %u previous failures",
+                iter->count );
+
+            association_failure_count_m.remove( iter );
+
+            delete iter;
+            iter = NULL;
+
+            return;
+            }
+
+        iter = association_failure_count_m.next();
+        }
+
+    DEBUG( "core_connection_data_c::clear_ap_failure_count() - this AP had no previous failures" );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+u8_t core_connection_data_c::ap_authentication_failure_count(
+    const core_mac_address_s& bssid )
+    {    
+    core_ap_auth_failure_count_s* iter = authentication_failure_count_m.first();    
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            return iter->count;
+            }
+
+        iter = authentication_failure_count_m.next();
+        }
+
+    return CORE_FAILURE_NONE;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::increase_ap_authentication_failure_count(
+    const core_mac_address_s& bssid )
+    {
+    core_ap_auth_failure_count_s* iter = authentication_failure_count_m.first();    
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            iter->count++;
+            return;
+            }
+
+        iter = authentication_failure_count_m.next();
+        }
+
+    iter = new core_ap_auth_failure_count_s;
+    if ( iter )
+        {
+        iter->bssid = bssid;
+        iter->count = CORE_FAILURE_NONE + 1;
+        authentication_failure_count_m.append( iter );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::clear_all_authentication_failure_counts()
+    {
+    DEBUG( "core_connection_data_c::clear_all_authentication_failure_counts()" );
+    
+    core_ap_auth_failure_count_s* iter = authentication_failure_count_m.first();    
+    while ( iter )
+        {
+        DEBUG1( "core_connection_data_c::clear_all_authentication_failure_counts() - this AP had %u previous failures",
+            iter->count );
+
+        authentication_failure_count_m.remove( iter );
+
+        delete iter;
+        iter = NULL;
+            
+        iter = authentication_failure_count_m.next();
+        }
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+u8_t core_connection_data_c::ap_deauthentication_count(
+    const core_mac_address_s& bssid )
+    {
+    core_ap_failure_count_s* iter = deauthentication_count_m.first();    
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            return iter->count;
+            }
+
+        iter = deauthentication_count_m.next();
+        }
+
+    return CORE_FAILURE_NONE;    
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::increase_ap_deauthentication_count(
+    const core_mac_address_s& bssid )
+    {
+    core_ap_failure_count_s* iter = deauthentication_count_m.first();    
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            iter->count++;
+            return;
+            }
+
+        iter = deauthentication_count_m.next();
+        }
+
+    iter = new core_ap_failure_count_s;
+    if ( iter )
+        {
+        iter->bssid = bssid;
+        iter->count = CORE_FAILURE_NONE + 1;
+        deauthentication_count_m.append( iter );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+u32_t core_connection_data_c::last_failed_eap_type() const
+    {
+    return last_eap_type_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_last_failed_eap_type(
+    u32_t type )
+    {
+    last_eap_type_m = type;   
+    }
+    
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//  
+u32_t core_connection_data_c::last_eap_error() const
+    {
+    return last_eap_error_code_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_last_eap_error(
+    u32_t error )
+    {
+    last_eap_error_code_m = error;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+const core_scan_channels_c& core_connection_data_c::adjacent_ap_channels() const
+    {
+    return adjacent_ap_channels_m; 
+    }
+    
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_adjacent_ap_channels(
+    const core_scan_channels_c& channels )
+    {
+    adjacent_ap_channels_m.set( channels );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::merge_adjacent_ap_channels(
+    const core_scan_channels_c& channels )
+    {
+    adjacent_ap_channels_m.merge( channels );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::is_eapol_authentication_started() const
+    {
+    return is_eapol_authentication_started_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_eapol_authentication_started(
+    bool_t is_authentication_started )
+    {
+    is_eapol_authentication_started_m = is_authentication_started;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::is_eapol_authenticating() const
+    {
+    return is_eapol_authenticating_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_eapol_authenticating(
+    bool_t is_authenticating )
+    {
+    is_eapol_authenticating_m = is_authenticating;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+const core_mac_address_s& core_connection_data_c::eapol_auth_bssid() const
+    {
+    return eapol_auth_bssid_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_eapol_auth_bssid(
+    const core_mac_address_s& bssid )
+    {
+    eapol_auth_bssid_m = bssid;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_traffic_stream_list_c& core_connection_data_c::traffic_stream_list()
+    {
+    return traffic_stream_list_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_virtual_traffic_stream_list_c& core_connection_data_c::virtual_traffic_stream_list()
+    {
+    return virtual_traffic_stream_list_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::is_eapol_connecting() const
+    {
+    return is_eapol_connecting_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_eapol_connecting(
+    bool_t is_eapol_connecting )
+    {
+    is_eapol_connecting_m = is_eapol_connecting;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::is_disconnecting() const
+    {
+    return is_disconnecting_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_disconnecting(
+    bool_t is_disconnecting )
+    {
+    is_disconnecting_m = is_disconnecting;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+const core_rcpi_roam_interval_s& core_connection_data_c::rcpi_roam_interval() const
+    {
+    return rcpi_roam_interval_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::reset_rcpi_roam_interval()
+    {
+    rcpi_roam_interval_m.count = 0;
+    rcpi_roam_interval_m.interval = device_settings_m.rcpi_roam_min_interval;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_core_rcpi_roam_interval(
+    const core_rcpi_roam_interval_s& interval )
+    {
+    rcpi_roam_interval_m = interval;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//    
+core_roam_reason_e core_connection_data_c::last_roam_reason() const
+    {
+    return last_roam_reason_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//    
+void core_connection_data_c::set_last_roam_reason(
+    core_roam_reason_e reason )
+    {
+    last_roam_reason_m = reason;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//    
+core_roam_failed_reason_e core_connection_data_c::last_roam_failed_reason() const
+    {
+    return last_roam_failed_reason_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//    
+void core_connection_data_c::set_last_roam_failed_reason(
+    core_roam_failed_reason_e reason )
+    {
+    last_roam_failed_reason_m = reason;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::is_ap_power_save_test_run(
+    const core_mac_address_s& bssid,
+    bool_t& is_success )
+    {
+    core_ap_power_save_test_verdict_s* iter = power_save_test_verdict_m.first();
+    while ( iter )
+        {
+        if ( iter->bssid == bssid )
+            {
+            is_success = iter->is_success;
+
+            return true_t;
+            }
+
+        iter = power_save_test_verdict_m.next();
+        }
+
+    return false_t;    
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::add_ap_power_save_test_verdict(
+    const core_mac_address_s& bssid,
+    bool_t is_success )
+    {
+    core_ap_power_save_test_verdict_s* iter = new core_ap_power_save_test_verdict_s;
+    if ( iter )
+        {
+        iter->bssid = bssid;
+        iter->is_success = is_success;
+
+        power_save_test_verdict_m.append( iter );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::is_eapol_require_immediate_reconnect() const
+    {
+    return is_eapol_require_immediate_reconnect_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_eapol_require_immediate_reconnect(
+    bool_t is_immediate_reconnect_required )
+    {
+    is_eapol_require_immediate_reconnect_m = is_immediate_reconnect_required;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_connection_data_c::voice_call_state() const
+    {
+    DEBUG1( "core_connection_data_c::voice_call_state() - returning %u", is_voice_call_on_m );
+    return is_voice_call_on_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_voice_call_state( const bool_t& is_voice_call_on ) 
+    {
+    DEBUG1( "core_connection_data_c::set_voice_call_state( %u )", is_voice_call_on );
+    is_voice_call_on_m = is_voice_call_on;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+const u64_t& core_connection_data_c::get_previous_rrm_measurement_request_time() const
+    {
+    return previous_rrm_measurement_request_time_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_previous_rrm_measurement_request_time( const u64_t& timestamp)
+    {
+    previous_rrm_measurement_request_time_m = timestamp;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_access_class_traffic_status_e core_connection_data_c::ac_traffic_status(
+    core_access_class_e access_class ) const
+    {
+    return ac_traffic_status_m[access_class];
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_connection_data_c::set_ac_traffic_status(
+    core_access_class_e access_class,
+    core_access_class_traffic_status_e status )
+    {
+    ac_traffic_status_m[access_class] = status;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_access_class_traffic_mode_e core_connection_data_c::ac_traffic_mode(
+    core_access_class_e access_class ) const
+    {
+    return ac_traffic_mode_m[access_class];
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//   
+void core_connection_data_c::set_ac_traffic_mode(
+    core_access_class_e access_class,
+    core_access_class_traffic_mode_e mode )
+    {
+    ac_traffic_mode_m[access_class] = mode;
+    }