--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/internetradio2.0/irnetworkcontroller/src/irfilteredapreader.cpp Wed Aug 18 09:40:26 2010 +0300
@@ -0,0 +1,357 @@
+/*
+* Copyright (c) 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: Used to read in only access points with the desired characteristics.
+*
+*/
+
+
+#include <commdb.h>
+#include <e32cmn.h>
+
+#include "irdebug.h"
+#include "irfilteredapreader.h"
+
+_LIT( KDynIpAddress, "0.0.0.0" );
+_LIT( KEasyWLAN, "Easy WLAN" );
+
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::NewL
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader* CIRFilteredApReader::NewL( TInt aFilterFlags )
+ {
+ IRLOG_DEBUG2( "CIRFilteredApReader::NewL - Filter flags = %d", aFilterFlags );
+ CIRFilteredApReader* self = CIRFilteredApReader::NewLC( aFilterFlags );
+ CleanupStack::Pop( self );
+ IRLOG_DEBUG( "CIRFilteredApReader::NewL - Exiting." );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::NewLC
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader* CIRFilteredApReader::NewLC( TInt aFilterFlags )
+ {
+ IRLOG_DEBUG2( "CIRFilteredApReader::NewLC - Filter flags = %d", aFilterFlags );
+ CIRFilteredApReader* self = new( ELeave ) CIRFilteredApReader( aFilterFlags );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ IRLOG_DEBUG( "CIRFilteredApReader::NewL - Exiting." );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FirstRecordL
+// ---------------------------------------------------------------------------
+//
+CCDIAPRecord* CIRFilteredApReader::FirstRecordL()
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::FirstRecordL - Entering" );
+ CCDIAPRecord* record( NULL );
+ iWapTableIndex = 0;
+ if ( iWapTable->iRecords.Count() > 0 )
+ {
+ TBool loaded( EFalse );
+ TRAPD( err, loaded = LoadCurrentApDetailsL() ); // may leave because of access rights etc.
+ if ( err == KErrNone && loaded && FilterL() )
+ {
+ record = static_cast<CCDIAPRecord*>( CCDRecordBase::CreateCopyRecordL( *iIapRecord ) );
+ record->SetRecordId( iIapRecord->RecordId() );
+ IRLOG_INFO2( "CIRFilteredApReader::FirstRecordL - %S accepted.", &record->iRecordName.GetL() );
+ }
+ else if ( err != KErrNone || !loaded )
+ {
+ IRLOG_ERROR3( "CIRFilteredApReader::FirstRecordL - Loading AP details failed ( err=%d, loaded=%d ).",
+ err, loaded );
+ record = NextRecordL();
+ }
+ else
+ {
+ IRLOG_INFO2( "CIRFilteredApReader::FirstRecordL - %S filtered out.", &iIapRecord->iRecordName.GetL() );
+ record = NextRecordL();
+ }
+ }
+ IRLOG_DEBUG( "CIRFilteredApReader::FirstRecordL - Exiting." );
+ return record;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::NextRecordL
+// ---------------------------------------------------------------------------
+//
+CCDIAPRecord* CIRFilteredApReader::NextRecordL()
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::NextRecordL - Entering" );
+ CCDIAPRecord* record( NULL );
+
+ while ( !record && MoveToNextRecord() )
+ {
+ TBool loaded( EFalse );
+ TRAPD( err, loaded = LoadCurrentApDetailsL() ); // may leave because of access rights etc.
+ if ( err == KErrNone && loaded && FilterL() )
+ {
+ record = static_cast<CCDIAPRecord*>( CCDRecordBase::CreateCopyRecordL( *iIapRecord ) );
+ record->SetRecordId( iIapRecord->RecordId() );
+ IRLOG_INFO2( "CIRFilteredApReader::FirstRecordL - %S accepted.", &record->iRecordName.GetL() );
+ }
+ else if ( err != KErrNone || !loaded )
+ {
+ IRLOG_ERROR3( "CIRFilteredApReader::NextRecordL - Loading AP details failed ( err=%d, loaded=%d ).",
+ err, loaded );
+ }
+ else
+ {
+ IRLOG_INFO2( "CIRFilteredApReader::NextRecordL - %S filtered out.", &iIapRecord->iRecordName.GetL() );
+ }
+ }
+ IRLOG_DEBUG( "CIRFilteredApReader::NextRecordL - Exiting." );
+ return record;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::CIRFilteredApReader
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader::CIRFilteredApReader( TInt aFilterFlags )
+ : iFilterFlags( aFilterFlags )
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::CIRFilteredApReader" );
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CIRFilteredApReader::ConstructL()
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::ConstructL - Entering" );
+ iDbSession = CMDBSession::NewL( CMDBSession::LatestVersion() );
+
+ iWapTable = new ( ELeave ) CMDBRecordSet<CCDWAPAccessPointRecord>( KCDTIdWAPAccessPointRecord );
+ iWapTable->LoadL( *iDbSession );
+ IRLOG_DEBUG( "CIRFilteredApReader::ConstructL - Exiting." );
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::~CIRFilteredApReader
+// ---------------------------------------------------------------------------
+//
+CIRFilteredApReader::~CIRFilteredApReader()
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::~CIRFilteredApReader - Entering" );
+ delete iDbSession;
+ delete iWapTable;
+ delete iWapIpBearerRecord;
+ delete iIapRecord;
+ IRLOG_DEBUG( "CIRFilteredApReader::~CIRFilteredApReader - Exiting." );
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::CurrentRecordL
+// ---------------------------------------------------------------------------
+//
+CCDWAPAccessPointRecord* CIRFilteredApReader::CurrentRecordL() const
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::CurrentRecordL - Entering" );
+ if ( iWapTableIndex >= iWapTable->iRecords.Count() )
+ {
+ IRLOG_FATAL( "CIRFilteredApReader::CurrentRecordL - WAP table overflow!" );
+ User::Leave( KErrCorrupt );
+ }
+ IRLOG_DEBUG( "CIRFilteredApReader::CurrentRecordL - Exiting" );
+ return static_cast<CCDWAPAccessPointRecord*>( iWapTable->iRecords[iWapTableIndex] );
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::MoveToNextRecord
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::MoveToNextRecord()
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::MoveToNextRecord - Entering" );
+ TBool retMe( EFalse );
+ if ( ++iWapTableIndex < iWapTable->iRecords.Count() )
+ {
+ IRLOG_INFO2( "CIRFilteredApReader::MoveToNextRecord - Current record %d", iWapTableIndex );
+ retMe = ETrue;
+ }
+ else
+ {
+ IRLOG_INFO( "CIRFilteredApReader::MoveToNextRecord - No more records" );
+ }
+ IRLOG_DEBUG( "CIRFilteredApReader::MoveToNextRecord - Exiting" );
+ return retMe;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::LoadCurrentApDetailsL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::LoadCurrentApDetailsL()
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::LoadCurrentApDetailsL - Entering" );
+ delete iWapIpBearerRecord;
+ iWapIpBearerRecord = NULL;
+
+ delete iIapRecord;
+ iIapRecord = NULL;
+
+ // Load record from WAPIPBearer
+ iWapIpBearerRecord = static_cast<CCDWAPIPBearerRecord*>(
+ CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) );
+
+ iWapIpBearerRecord->iWAPAccessPointId.SetL( CurrentRecordL()->RecordId() );
+ TBool res = iWapIpBearerRecord->FindL( *iDbSession );
+
+ if ( res )
+ {
+ iIapRecord = static_cast<CCDIAPRecord*>(
+ CCDRecordBase::RecordFactoryL( KCDTIdIAPRecord ) );
+ iIapRecord->SetRecordId( iWapIpBearerRecord->iWAPIAP );
+ iIapRecord->LoadL( *iDbSession );
+ }
+ IRLOG_DEBUG2( "CIRFilteredApReader::LoadCurrentApDetailsL - returning %d", res );
+ return res;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterL() const
+ {
+ IRLOG_DEBUG2( "CIRFilteredApReader::FilterL - Service type %S", &iIapRecord->iServiceType.GetL() );
+ TBool retMe( ETrue );
+
+ // The WAP check needs to be done only for CSD, GPRS, CDMA and LAN ( because of Easy WLAN )
+ // APs.
+ if ( iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameDialOutISP ) ) == 0 ||
+ iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameOutgoingWCDMA ) ) == 0 ||
+// iIapRecord->iServiceType.GetL().Compare(
+// TPtrC( KCDTypeNameCDMA2000PacketService ) ) == 0 ||
+ iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameLANService) ) == 0 )
+ {
+ if ( iFilterFlags & KIRFilterWAPMandatory )
+ {
+ retMe = FilterWAPMandatoryL();
+ }
+ if ( retMe && iFilterFlags & KIRFilterWAPOnly )
+ {
+ retMe = FilterWAPOnlyL();
+ }
+ if ( retMe && iFilterFlags & KIRFilterEasyWLAN )
+ {
+ retMe = FilterEasyWlanL();
+ }
+ }
+ IRLOG_DEBUG2( "CIRFilteredApReader::FilterL - Returning %d", retMe );
+ return retMe;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterWAPMandatoryL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterWAPMandatoryL() const
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::FilterWAPMandatoryL - Entering" );
+ TBool retMe( EFalse );
+
+ // First check the WAP_GATEWAY_ADDRESS of WAP_IP_BEARER table.
+ if ( iWapIpBearerRecord->iWAPGatewayAddress.IsNull() ||
+ iWapIpBearerRecord->iWAPGatewayAddress.GetL().Length() == 0 ||
+ iWapIpBearerRecord->iWAPGatewayAddress.GetL().Compare( KDynIpAddress ) == 0 )
+ {
+ retMe = ETrue;
+ }
+ IRLOG_INFO3( "CIRFilteredApReader::FilterWAPMandatoryL - Returning %d for %S", retMe, &iIapRecord->iRecordName.GetL() );
+ return retMe;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterWAPOnlyL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterWAPOnlyL() const
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::FilterWAPOnlyL - Entering" );
+ TBool retMe( EFalse );
+
+ IRLOG_DEBUG2( "CIRFilteredApReader::FilterWAPOnlyL - Service type %S", &iIapRecord->iServiceType.GetL() );
+ if ( iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameDialOutISP ) ) == 0 )
+ {
+ CCDDialOutISPRecord* dialOutRecord = static_cast<CCDDialOutISPRecord*>(
+ CCDRecordBase::RecordFactoryL( KCDTIdDialOutISPRecord ) );
+ CleanupStack::PushL( dialOutRecord );
+ dialOutRecord->SetRecordId( iIapRecord->iService );
+ dialOutRecord->LoadL( *iDbSession );
+ if ( dialOutRecord->iType != EIspTypeWAPOnly )
+ {
+ retMe = ETrue;
+ }
+ CleanupStack::PopAndDestroy( dialOutRecord );
+ }
+ else if ( iIapRecord->iServiceType.GetL().Compare( TPtrC( KCDTypeNameOutgoingWCDMA ) ) == 0 )
+ {
+ CCDWCDMAPacketServiceRecord* gprsRecord = static_cast<CCDWCDMAPacketServiceRecord*>(
+ CCDRecordBase::RecordFactoryL( KCDTIdOutgoingGprsRecord ) );
+ CleanupStack::PushL( gprsRecord );
+ gprsRecord->SetRecordId( iIapRecord->iService );
+ gprsRecord->LoadL( *iDbSession );
+ if ( gprsRecord->iGPRSAPType != EIspTypeWAPOnly )
+ {
+ retMe = ETrue;
+ }
+ CleanupStack::PopAndDestroy( gprsRecord );
+ }
+// else if ( iIapRecord->iServiceType.GetL().Compare(
+// TPtrC( KCDTypeNameCDMA2000PacketService ) ) == 0 )
+// {
+// CCDCDMA2000PacketServiceRecord* cdmaRecord = static_cast<CCDCDMA2000PacketServiceRecord*>(
+// CCDRecordBase::RecordFactoryL( KCDTIdCDMA2000PacketServiceRecord ) );
+// CleanupStack::PushL( cdmaRecord );
+// cdmaRecord->SetRecordId( iIapRecord->iService );
+// cdmaRecord->LoadL( *iDbSession );
+// if ( cdmaRecord->iApType != EIspTypeWAPOnly )
+// {
+// retMe = ETrue;
+// }
+// CleanupStack::PopAndDestroy( cdmaRecord );
+// }
+ else
+ {
+ retMe = ETrue;
+ }
+
+ IRLOG_INFO3( "CIRFilteredApReader::FilterWAPOnlyL - Returning %d for %S", retMe, &iIapRecord->iRecordName.GetL() );
+ return retMe;
+ }
+
+// ---------------------------------------------------------------------------
+// CIRFilteredApReader::FilterEasyWlanL
+// ---------------------------------------------------------------------------
+//
+TBool CIRFilteredApReader::FilterEasyWlanL() const
+ {
+ IRLOG_DEBUG( "CIRFilteredApReader::FilterEasyWlanL - Entering" );
+ TBool retMe( EFalse );
+ if ( iIapRecord->iRecordName.GetL().Compare( KEasyWLAN ) != 0 )
+ {
+ retMe = ETrue;
+ }
+ IRLOG_INFO3( "CIRFilteredApReader::FilterEasyWlanL - Returning %d for %S", retMe, &iIapRecord->iRecordName.GetL() );
+ return retMe;
+ }