diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_timer_counter_measures.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_timer_counter_measures.cpp Tue Feb 02 02:03:13 2010 +0200 @@ -0,0 +1,133 @@ +/* +* Copyright (c) 2006-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: Timer for handling WPA TKIP counter measures +* +*/ + + +#include "core_timer_factory.h" +#include "core_timer_counter_measures.h" +#include "core_callback.h" +#include "am_debug.h" + +/** Wait time for the next secure connection failure (60 sec). */ +const uint_t CORE_CM_FAIL_WAIT_TIME = 60000000; + +/** Blocking time for WPA connections (60 sec). */ +const uint_t CORE_CM_BLOCKING_TIME = 60000000; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +core_timer_counter_measures_c::core_timer_counter_measures_c() : + state_m( core_state_not_running ), + timer_m( NULL ) + { + DEBUG( "core_timer_counter_measures_c::core_timer_counter_measures_c()" ); + + core_callback_c* timer_callback = + new core_callback_c( &(core_timer_counter_measures_c::timer_expired), this ); + if( !timer_callback ) + { + DEBUG( "core_timer_counter_measures_c::core_timer_counter_measures_c() - unable to create callbacks" ); + } + + timer_m = core_timer_factory_c::create_timer( timer_callback ); + if( !timer_m ) + { + delete timer_callback; + DEBUG( "core_timer_counter_measures_c::core_timer_counter_measures_c() - unable to create timer" ); + } + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +core_timer_counter_measures_c::~core_timer_counter_measures_c() + { + DEBUG( "core_timer_counter_measures_c::~core_timer_counter_measures_c()" ); + + if ( timer_m ) + { + timer_m->stop(); + core_timer_factory_c::destroy_timer( timer_m ); + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +bool_t core_timer_counter_measures_c::is_wpa_allowed() + { + return ( state_m != core_state_blocked ); + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void core_timer_counter_measures_c::mic_failure() + { + DEBUG( "core_timer_counter_measures_c::mic_failure()" ); + + switch ( state_m ) + { + case core_state_not_running: + DEBUG( "core_timer_counter_measures_c::mic_failure() - new state is core_state_activated" ); + state_m = core_state_activated; + if ( timer_m ) + { + timer_m->start( CORE_CM_FAIL_WAIT_TIME ); + } + break; + case core_state_activated: + DEBUG( "core_timer_counter_measures_c::mic_failure() - new state is core_state_blocked" ); + state_m = core_state_blocked; + if ( timer_m ) + { + timer_m->stop(); + timer_m->start( CORE_CM_BLOCKING_TIME ); + } + break; + default: + DEBUG( "core_timer_counter_measures_c::mic_failure() - indication in wrong state" ); + ASSERT( false_t ); + break; + } + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +void core_timer_counter_measures_c::timer_expired( + void* this_ptr ) + { + DEBUG( "core_timer_counter_measures_c::timer_expired()" ); + + core_timer_counter_measures_c* self = + static_cast( this_ptr ); + + switch ( self->state_m ) + { + case core_state_activated: + /** Falls through on purpose. */ + case core_state_blocked: + DEBUG( "core_timer_counter_measures_c::timer_expired() - new state is core_state_not_running" ); + self->state_m = core_state_not_running; + break; + default: + DEBUG( "core_timer_counter_measures_c::timer_expired() - expiration in wrong state" ); + ASSERT( false_t ); + break; + } + }