diff -r 608f67c22514 -r 896e9dbc5f19 internetradio2.0/irnetworkcontroller/src/irfilteredapreader.cpp --- /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 +#include + +#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( 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( 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( 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( 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( + CCDRecordBase::RecordFactoryL( KCDTIdWAPIPBearerRecord ) ); + + iWapIpBearerRecord->iWAPAccessPointId.SetL( CurrentRecordL()->RecordId() ); + TBool res = iWapIpBearerRecord->FindL( *iDbSession ); + + if ( res ) + { + iIapRecord = static_cast( + 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( + 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( + 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( +// 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; + }