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;
+ }