diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlansniffer/wlaninfo/src/wsfwlaninfoarray.cpp --- a/wlanutilities/wlansniffer/wlaninfo/src/wsfwlaninfoarray.cpp Thu Aug 19 10:59:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,517 +0,0 @@ -/* -* Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "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: Implementation of CWsfWlanInfoArray -* -*/ - - - -// EXTERNAL INCLUDES -#include - - -// CLASS HEADER -#include "wsfwlaninfoarray.h" - - -// INTERNAL INCLUDES -#include "wsfwlaninfoarraysortkey.h" -#include "wsfwlaninfoarrayfiltervisitor.h" - - -using namespace CMManager; - -// LOCAL DEFINITIONS -static const TUint KInfoArrayGranuality = 10; - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::NewL -// --------------------------------------------------------------------------- -// -EXPORT_C CWsfWlanInfoArray* CWsfWlanInfoArray::NewL() - { - CWsfWlanInfoArray* thisPtr = NewLC(); - CleanupStack::Pop( thisPtr ); - return thisPtr; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::NewLC -// --------------------------------------------------------------------------- -// -EXPORT_C CWsfWlanInfoArray* CWsfWlanInfoArray::NewLC() - { - CWsfWlanInfoArray* thisPtr = new ( ELeave ) CWsfWlanInfoArray(); - CleanupStack::PushL( thisPtr ); - thisPtr->ConstructL(); - return thisPtr; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::~CWsfWlanInfoArray -// --------------------------------------------------------------------------- -// -CWsfWlanInfoArray::~CWsfWlanInfoArray() - { - if ( iInfoArray ) - { - iInfoArray->ResetAndDestroy(); - delete iInfoArray; - } - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::CWsfWlanInfoArray -// --------------------------------------------------------------------------- -// -CWsfWlanInfoArray::CWsfWlanInfoArray() : - iUIPrioritySort( EFalse ) - { - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::ConstructL -// --------------------------------------------------------------------------- -// -void CWsfWlanInfoArray::ConstructL() - { - iInfoArray = new (ELeave) CArrayPtrFlat( - KInfoArrayGranuality ); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::Reset -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::Reset() - { - iInfoArray->ResetAndDestroy(); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::Count -// --------------------------------------------------------------------------- -// -EXPORT_C TUint CWsfWlanInfoArray::Count() - { - return iInfoArray->Count(); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::AppendL -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::AppendL( TWsfWlanInfo* aWlanInfo ) - { - iInfoArray->AppendL( aWlanInfo ); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::At -// --------------------------------------------------------------------------- -// -EXPORT_C TWsfWlanInfo* CWsfWlanInfoArray::At( TInt aIndex ) const - { - TWsfWlanInfo* temp( NULL ); - TInt count = iInfoArray->Count(); - - if ( count && ( aIndex < count ) ) - { - temp = ( *iInfoArray )[aIndex]; - } - return temp; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::Delete -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::Delete( TWsfWlanInfo* aWlanInfo ) - { - TInt count = iInfoArray->Count(); - - for( TInt i = 0; i < count; ++i ) - { - if ( ( *iInfoArray )[i] == aWlanInfo ) - { - delete ( *iInfoArray )[i]; - iInfoArray->Delete( i ); - iInfoArray->Compress(); - break; - } - } - - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::GetArrayIndex -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CWsfWlanInfoArray::GetArrayIndex( TWsfWlanInfo* aWlanInfo ) const - { - TBool found( EFalse ); - TInt index( 0 ); - TWsfWlanInfo* temp; - TInt count = iInfoArray->Count(); - - while( ( index < count ) && !found ) - { - temp = ( *iInfoArray )[index]; - if ( !temp->iSsid.Compare( aWlanInfo->iSsid ) ) - { - found = ETrue; - } - else - { - ++index; - } - } - return ( found ? index : KErrNotFound ); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::operator[] -// --------------------------------------------------------------------------- -// -EXPORT_C TWsfWlanInfo* CWsfWlanInfoArray::operator[]( TUint aIndex ) const - { - return ( *iInfoArray )[aIndex]; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::Match -// --------------------------------------------------------------------------- -// -EXPORT_C TWsfWlanInfo* CWsfWlanInfoArray::Match( const TDesC8& aSsid, - const TInt aPriorThis ) - { - TInt count = iInfoArray->Count(); - TWsfWlanInfo* ret( NULL ); - - count = count < aPriorThis ? count: aPriorThis; - - for( TInt i = 0; i < count; i++ ) - { - TWsfWlanInfo* temp = ( *iInfoArray )[i]; - if ( !temp->iSsid.Compare( aSsid ) ) - { - ret = temp; - break; - } - } - return ret; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::Match -// --------------------------------------------------------------------------- -// -EXPORT_C TWsfWlanInfo* CWsfWlanInfoArray::Match( const TUint32 aIapID, - const TInt aPriorThis ) - { - TInt count = iInfoArray->Count(); - TWsfWlanInfo* ret( NULL ); - - count = count < aPriorThis ? count: aPriorThis; - - for( TInt i = 0; i < count; i++ ) - { - TWsfWlanInfo* temp = ( *iInfoArray )[i]; - if ( temp->iIapId == aIapID ) - { - ret = temp; - break; - } - } - return ret; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::MatchWithIapIDL -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::MatchWithIapIDL( const TUint aIapID, - const TInt aPriorThis, - RPointerArray& aMatchArray ) - { - aMatchArray.Reset(); - - TInt count = iInfoArray->Count(); - TWsfWlanInfo* temp(NULL); - - count = count < aPriorThis ? count: aPriorThis; - - for( TInt i = 0; i < count ; i++ ) - { - temp = ( *iInfoArray )[i]; - if( temp->iIapId == aIapID ) - { - aMatchArray.AppendL(temp); - } - } - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::MatchL -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::MatchL( const TDesC8& aSsid, - CMManager::TWlanSecMode aSecMode, - CMManager::TWlanNetMode aNetMode, - TBool aUsesPreSharedKey, - const TInt aPriorThis, - RPointerArray& aMatchArray ) - { - aMatchArray.Reset(); - - TInt count = iInfoArray->Count(); - TWsfWlanInfo* temp(NULL); - - count = count < aPriorThis ? count: aPriorThis; - - for( TInt i = 0; i < count ; i++ ) - { - temp = ( *iInfoArray )[i]; - if( !temp->iSsid.Compare( aSsid ) && temp->iSecurityMode == aSecMode - && temp->iNetMode == aNetMode ) - { - aMatchArray.AppendL(temp); - } - else if ( temp->iIapId && !temp->iSsid.Compare( aSsid ) - && temp->SecurityMode() == CMManager::EWlanSecMode802_1x - && temp->iNetMode == aNetMode ) - { - if ( aSecMode == CMManager::EWlanSecModeOpen ) - { - aMatchArray.AppendL(temp); - } - else if ( aSecMode == CMManager::EWlanSecModeWep ) - { - aMatchArray.AppendL(temp); - } - else if ( aSecMode == CMManager::EWlanSecModeWpa - && !aUsesPreSharedKey ) - { - aMatchArray.AppendL(temp); - } - else if ( aSecMode == CMManager::EWlanSecMode802_1x ) - { - aMatchArray.AppendL(temp); - } - } - } - } -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::SerializeContentLC -// --------------------------------------------------------------------------- -// -EXPORT_C HBufC8* CWsfWlanInfoArray::SerializeContentLC() - { - HBufC8* buffer( NULL ); - - if ( !iInfoArray->Count() ) - { - buffer = KNullDesC8().AllocLC(); - } - else - { - TInt32 requiredBufferSize = sizeof( TUint32 ) + - iInfoArray->Count() * sizeof( TWsfWlanInfo ); - buffer = HBufC8::NewLC( requiredBufferSize ); - - // create a stream.. - TPtr8 bufferPtr = buffer->Des(); - RDesWriteStream writeStream( bufferPtr ); - writeStream.Open( bufferPtr); - CleanupClosePushL( writeStream ); - writeStream.WriteInt16L( iInfoArray->Count() ); - TWsfWlanInfo* infoPtr = NULL; - for ( TInt i( 0 ); i < iInfoArray->Count(); i++) - { - infoPtr = ( *iInfoArray )[i]; - writeStream << *infoPtr; - } - writeStream.CommitL(); - // try to realloc - save space realloc to required level.. - TStreamPos position = writeStream.Sink()->TellL( MStreamBuf::EWrite ); - - CleanupStack::PopAndDestroy( &writeStream ); // closes the stream - CleanupStack::Pop( buffer ); - HBufC8* newBuffer = buffer->ReAlloc( position.Offset() ); - if ( newBuffer ) // the realloc succeeded - swap the buffer - { - buffer = newBuffer; - } - CleanupStack::PushL( buffer); - } - - return buffer; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::AppendFromStreamBufferL -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CWsfWlanInfoArray::AppendFromStreamBufferL( - const TDesC8& aStreamBuffer ) - { - RDesReadStream reader( aStreamBuffer ); - reader.Open( aStreamBuffer ); // codescanner false alarm - // ignoring Open() return value.. Open returns void - CleanupClosePushL( reader ); - - TInt infoCount = reader.ReadInt16L(); - - TWsfWlanInfo *infoPtr = NULL; - for ( TInt i(0); i < infoCount; i++ ) - { - infoPtr = new (ELeave)TWsfWlanInfo; - CleanupStack::PushL( infoPtr ); - reader >> *infoPtr; - AppendL( infoPtr ); - CleanupStack::Pop( infoPtr ); - } - - CleanupStack::PopAndDestroy( &reader ); - return Count(); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::FindHiddenEntry -// --------------------------------------------------------------------------- -// -EXPORT_C TWsfWlanInfo* CWsfWlanInfoArray::FindHiddenEntry( - const TInt aPriorThis ) - { - TInt count = iInfoArray->Count(); - TWsfWlanInfo* ret( NULL ); - count = count < aPriorThis ? count : aPriorThis; - - for ( TInt i = 0; i < count; ++i ) - { - TWsfWlanInfo* temp = ( *iInfoArray )[i]; - if ( !temp->iVisibility ) - { - ret = temp; - break; - } - } - return ret; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::DeleteFromTail -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CWsfWlanInfoArray::DeleteFromTail( const TInt aCount ) - { - TInt arrayItemCount = iInfoArray->Count(); - - if ( aCount >= arrayItemCount ) - { - iInfoArray->ResetAndDestroy(); - } - else - { - --arrayItemCount; - for ( TInt i( 1 ) ; i <= aCount; ++i, --arrayItemCount ) - { - delete ( *iInfoArray )[arrayItemCount]; - iInfoArray->Delete( arrayItemCount ); - } - iInfoArray->Compress(); - } - - return iInfoArray->Count(); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::SortArrayL -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::SortArrayL() - { - if ( iInfoArray->Count() > 1 ) - { - CWsfWlanInfoArraySortKey* sortKey = CWsfWlanInfoArraySortKey::NewLC( - *this ); - - // Sort returns KErrGeneral if stack overflow, otherwise, returns - // KErrNone. So we will Leave only if stack overflow, - // but than that really does not matter... - User::LeaveIfError( iInfoArray->Sort( *sortKey ) ); - - CleanupStack::PopAndDestroy( sortKey ); - } - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::SortArrayL -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::SortArrayL( - MWsfWlanInfoArrayFilterVisitor& aSortKey ) - { - // the visitor sortkey may do some other stuff too - // so don't make any asumptions... - // just go for the sorting... - - aSortKey.FilterPreSortL( this ); - - User::LeaveIfError( iInfoArray->Sort( aSortKey.SortingKey() ) ); - - aSortKey.FilterPostSortL( this ); - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::SetUIPrioritySort -// --------------------------------------------------------------------------- -// -EXPORT_C void CWsfWlanInfoArray::SetUIPrioritySort( const TBool aUIPrioritySort ) - { - iUIPrioritySort = aUIPrioritySort; - } - - -// --------------------------------------------------------------------------- -// CWsfWlanInfoArray::GetUIPrioritySort -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CWsfWlanInfoArray::GetUIPrioritySort( ) - { - return iUIPrioritySort; - } -