diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_scan_list_iterator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_scan_list_iterator.cpp Tue Feb 02 02:03:13 2010 +0200 @@ -0,0 +1,282 @@ +/* +* 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: Implementations for the scan list iterators +* +*/ + + +#include "core_scan_list_iterator.h" +#include "core_scan_list.h" +#include "core_tools.h" +#include "core_am_tools.h" +#include "am_debug.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_tag_c::core_scan_list_iterator_by_tag_c( + core_scan_list_c& scan_list, + u8_t tag ) : + scan_list_m( scan_list ), + tag_m( tag ) + { + DEBUG( "core_scan_list_iterator_by_tag_c::core_scan_list_iterator_by_tag_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_tag_c::~core_scan_list_iterator_by_tag_c() + { + DEBUG( "core_scan_list_iterator_by_tag_c::~core_scan_list_iterator_by_tag_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_tag_c::first() + { + for( core_scan_list_c::core_scan_list_entry_s* iter = scan_list_m.scan_list_m.first(); iter; iter = scan_list_m.scan_list_m.next() ) + { + if ( !( iter->tags & tag_m ) ) + { + return iter->ap_data; + } + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_tag_c::next() + { + for( core_scan_list_c::core_scan_list_entry_s* iter = scan_list_m.scan_list_m.next(); iter; iter = scan_list_m.scan_list_m.next() ) + { + if ( !( iter->tags & tag_m ) ) + { + return iter->ap_data; + } + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_tag_c::current() + { + if ( scan_list_m.scan_list_m.current() ) + { + return scan_list_m.scan_list_m.current()->ap_data; + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_age_c::core_scan_list_iterator_by_age_c( + core_scan_list_c& scan_list, + u32_t maximum_age ) : + scan_list_m( scan_list ), + maximum_age_m( maximum_age ) + { + DEBUG( "core_scan_list_iterator_by_age_c::core_scan_list_iterator_by_age_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_age_c::~core_scan_list_iterator_by_age_c() + { + DEBUG( "core_scan_list_iterator_by_age_c::~core_scan_list_iterator_by_age_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_age_c::first() + { + for( core_scan_list_c::core_scan_list_entry_s* iter = scan_list_m.scan_list_m.first(); iter; iter = scan_list_m.scan_list_m.next() ) + { + u64_t difference = ( core_am_tools_c::timestamp() - iter->timestamp ) / SECONDS_FROM_MICROSECONDS; + + if ( maximum_age_m == SCAN_LIST_AGE_ANY || + difference <= maximum_age_m ) + { + return iter->ap_data; + } + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_age_c::next() + { + for( core_scan_list_c::core_scan_list_entry_s* iter = scan_list_m.scan_list_m.next(); iter; iter = scan_list_m.scan_list_m.next() ) + { + u64_t difference = ( core_am_tools_c::timestamp() - iter->timestamp ) / SECONDS_FROM_MICROSECONDS; + + if ( maximum_age_m == SCAN_LIST_AGE_ANY || + difference <= maximum_age_m ) + { + return iter->ap_data; + } + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_age_c::current() + { + if ( scan_list_m.scan_list_m.current() ) + { + return scan_list_m.scan_list_m.current()->ap_data; + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_tag_and_ssid_c::core_scan_list_iterator_by_tag_and_ssid_c( + core_scan_list_c& scan_list, + u8_t tag, + const core_ssid_s& ssid ) : + core_scan_list_iterator_by_tag_c( scan_list, tag ), + ssid_m( ssid ) + { + DEBUG( "core_scan_list_iterator_by_tag_and_ssid_c::core_scan_list_iterator_by_tag_and_ssid_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_tag_and_ssid_c::~core_scan_list_iterator_by_tag_and_ssid_c() + { + DEBUG( "core_scan_list_iterator_by_tag_and_ssid_c::~core_scan_list_iterator_by_tag_and_ssid_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_tag_and_ssid_c::first() + { + core_ap_data_c* iter = core_scan_list_iterator_by_tag_c::first(); + while ( iter ) + { + if ( iter->ssid() == ssid_m ) + { + return iter; + } + + iter = core_scan_list_iterator_by_tag_c::next(); + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_tag_and_ssid_c::next() + { + core_ap_data_c* iter = core_scan_list_iterator_by_tag_c::next(); + while ( iter ) + { + if ( iter->ssid() == ssid_m ) + { + return iter; + } + + iter = core_scan_list_iterator_by_tag_c::next(); + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_tag_and_ssid_and_bssid_c::core_scan_list_iterator_by_tag_and_ssid_and_bssid_c( + core_scan_list_c& scan_list, + u8_t tag, + const core_ssid_s& ssid, + const core_mac_address_s& bssid ) : + core_scan_list_iterator_by_tag_and_ssid_c( scan_list, tag, ssid ), + bssid_m( bssid ) + { + DEBUG( "core_scan_list_iterator_by_tag_and_ssid_and_bssid_c::core_scan_list_iterator_by_tag_and_ssid_and_bssid_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_scan_list_iterator_by_tag_and_ssid_and_bssid_c::~core_scan_list_iterator_by_tag_and_ssid_and_bssid_c() + { + DEBUG( "core_scan_list_iterator_by_tag_and_ssid_and_bssid_c::~core_scan_list_iterator_by_tag_and_ssid_and_bssid_c" ); + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_tag_and_ssid_and_bssid_c::first() + { + core_ap_data_c* iter = core_scan_list_iterator_by_tag_and_ssid_c::first(); + while( iter ) + { + if( bssid_m == BROADCAST_MAC_ADDR || + iter->bssid() == bssid_m ) + { + return iter; + } + + iter = core_scan_list_iterator_by_tag_and_ssid_c::next(); + } + + return NULL; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +core_ap_data_c* core_scan_list_iterator_by_tag_and_ssid_and_bssid_c::next() + { + core_ap_data_c* iter = core_scan_list_iterator_by_tag_and_ssid_c::next(); + while( iter ) + { + if( bssid_m == BROADCAST_MAC_ADDR || + iter->bssid() == bssid_m ) + { + return iter; + } + + iter = core_scan_list_iterator_by_tag_and_ssid_c::next(); + } + + return NULL; + }