diff -r 4baee4f15982 -r 6385c4c93049 pushmtm/MtmUtilSrc/PushInitiatorList.cpp --- a/pushmtm/MtmUtilSrc/PushInitiatorList.cpp Thu Aug 19 09:57:56 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,358 +0,0 @@ -/* -* Copyright (c) 2002 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: The definition of CPushInitiatorList. -* -*/ - - - -// INCLUDE FILES - -#include "PushInitiatorList.h" -#include "PushMtmLog.h" -#include "PushMtmUtilPanic.h" -#include "WhiteListImporter.h" -#include "PushMtmPrivateCRKeys.h" -#include - -// ================= MEMBER FUNCTIONS ======================= - -// --------------------------------------------------------- -// CPushInitiatorList::NewL -// --------------------------------------------------------- -// -EXPORT_C CPushInitiatorList* CPushInitiatorList::NewL() - { - const TInt KGranularity( 8 ); - return new (ELeave) CPushInitiatorList( KGranularity ); - } - -// --------------------------------------------------------- -// CPushInitiatorList::~CPushInitiatorList -// --------------------------------------------------------- -// -EXPORT_C CPushInitiatorList::~CPushInitiatorList() - { - ResetAndDestroy(); - } - -// --------------------------------------------------------- -// CPushInitiatorList::AddL -// --------------------------------------------------------- -// -EXPORT_C TUint32 CPushInitiatorList::AddL - ( const CPushInitiator& aPushInitiator ) - { - CPushInitiator* temp = aPushInitiator.AllocLC(); - TUint32 entryId = AddL( temp ); - CleanupStack::Pop( temp ); - return entryId; - } - -// --------------------------------------------------------- -// CPushInitiatorList::AddL -// --------------------------------------------------------- -// -EXPORT_C TUint32 CPushInitiatorList::AddL( CPushInitiator* aPushInitiator ) - { - PUSHLOG_ENTERFN("CPushInitiatorList::AddL") - - __ASSERT_DEBUG( aPushInitiator, UtilPanic( EPushMtmUtilPanNull ) ); - - TUint32 entryId( ENullInitiatorEntryId ); - - if ( !aPushInitiator ) - { - // Nothing to insert. - } - else - { - // Get an ID for the new entry before we insert it to the list if it - // has not set yet: - entryId = aPushInitiator->EntryID(); - if ( entryId == ENullInitiatorEntryId ) - { - entryId = FreeId(); - // Give this new ID to the new entry: - aPushInitiator->SetEntryID( entryId ); - } - __ASSERT_DEBUG( entryId != ENullInitiatorEntryId, - UtilPanic( EPushMtmUtilPanNull ) ); - // And append it to the list: - AppendL( aPushInitiator ); - // Set flag that indicates that the list has changed: - iPushInitiatorListChanged = ETrue; - } - - PUSHLOG_WRITE_FORMAT(" entryId <%d>",entryId) - PUSHLOG_LEAVEFN("CPushInitiatorList::AddL") - return entryId; - } - -// --------------------------------------------------------- -// CPushInitiatorList::At -// --------------------------------------------------------- -// -EXPORT_C CPushInitiator& CPushInitiatorList::At( TInt aIndex ) const - { - return (CPushInitiator&) - (*CArrayPtrFlat::At( aIndex )); - } - -// --------------------------------------------------------- -// CPushInitiatorList::Delete -// --------------------------------------------------------- -// -EXPORT_C void CPushInitiatorList::Delete( TInt aIndex ) - { - delete &At( aIndex ); - CArrayPtrFlat::Delete( aIndex ); - // Set indicator flag. - iPushInitiatorListChanged = ETrue; - } - -// --------------------------------------------------------- -// CPushInitiatorList::Count -// --------------------------------------------------------- -// -EXPORT_C TInt CPushInitiatorList::Count() const - { - return CArrayPtrFlat::Count(); - } - -// --------------------------------------------------------- -// CPushInitiatorList::FreeId -// --------------------------------------------------------- -// -TUint32 CPushInitiatorList::FreeId() const - { - TUint32 largestId( 0 ); - // Find the largest ID: - const TInt count( Count() ); - for ( TInt i = 0; i < count; ++i ) - { - if ( largestId < At(i).EntryID() ) - { - largestId = At(i).EntryID(); - } - } - if ( largestId == KMaxTUint32 ) - { - return 0; - } - - return ( largestId + 1 ); - } - -// --------------------------------------------------------- -// CPushInitiatorList::Changed -// --------------------------------------------------------- -// -TBool CPushInitiatorList::Changed() const - { - return iPushInitiatorListChanged; - } - -// --------------------------------------------------------- -// CPushInitiatorList::ResetChanged -// --------------------------------------------------------- -// -void CPushInitiatorList::ResetChanged() - { - iPushInitiatorListChanged = EFalse; - } - -// --------------------------------------------------------- -// CPushInitiatorList::ResetAndDestroy -// --------------------------------------------------------- -// -EXPORT_C void CPushInitiatorList::ResetAndDestroy() - { - CArrayPtrFlat::ResetAndDestroy(); - // Set indicator flag. - iPushInitiatorListChanged = ETrue; - } - -// --------------------------------------------------------- -// CPushInitiatorList::Find -// --------------------------------------------------------- -// -EXPORT_C TInt CPushInitiatorList::Find( const CPushInitiator& aPushInitiator, - TInt& aIndex ) const - { - PUSHLOG_ENTERFN("CPushInitiatorList::Find") - - TInt ret( KErrNotFound ); - - PUSHLOG_WRITE_FORMAT2(" Searching for: <%S>, <%d>", - &aPushInitiator.Addr(),aPushInitiator.Type()) - - const TInt count( Count() ); - for ( TInt i = 0; i < count; ++i ) - { - PUSHLOG_WRITE_FORMAT2(" Item: <%S>, <%d>", - &At( i ).Addr(),At( i ).Type()) - - if ( At( i ) == aPushInitiator ) - { - // We have found push initiator which is identical with the one - // given in the parameter. - PUSHLOG_WRITE(" WL Found!") - aIndex = i; - ret = KErrNone; - break; - } - } - - PUSHLOG_LEAVEFN("CPushInitiatorList::Find") - return ret; - } - -// --------------------------------------------------------- -// CPushInitiatorList::operator== -// --------------------------------------------------------- -// -EXPORT_C TBool CPushInitiatorList::operator== - ( const CPushInitiatorList& aList ) const - { - TBool equal( EFalse ); - const TInt count = Count(); - - if ( count == aList.Count() ) - { - TBool inequalFound( EFalse ); - for ( TInt i = 0; i < count; ++i ) - { - if ( At(i) != aList.At(i) ) - { - inequalFound = ETrue; - break; - } - } - equal = !inequalFound; - } - - return equal; - } - -// --------------------------------------------------------- -// CPushInitiatorList::operator!= -// --------------------------------------------------------- -// -EXPORT_C TBool CPushInitiatorList::operator!= - ( const CPushInitiatorList& aList ) const - { - return !( *this == aList ); - } - -// --------------------------------------------------------- -// CPushInitiatorList::ExternalizeL -// --------------------------------------------------------- -// -void CPushInitiatorList::ExternalizeL( CRepository& aRepository ) const - { - PUSHLOG_ENTERFN("CPushInitiatorList::ExternalizeL"); - - HBufC* wlBuf = ParseAndProcessList2BufL(); - CleanupStack::PushL( wlBuf ); - User::LeaveIfError( aRepository.Set( KPushMtmWhiteList, *wlBuf ) ); - CleanupStack::PopAndDestroy( wlBuf ); // wlBuf - - PUSHLOG_LEAVEFN("CPushInitiatorList::ExternalizeL"); - } - -// --------------------------------------------------------- -// CPushInitiatorList::InternalizeL -// --------------------------------------------------------- -// -void CPushInitiatorList::InternalizeL( CRepository& aRepository ) - { - PUSHLOG_ENTERFN("CPushInitiatorList::InternalizeL"); - - HBufC* wlBuf = HBufC::NewLC( NCentralRepositoryConstants::KMaxUnicodeStringLength ); - TPtr nonConstWLBuf = wlBuf->Des(); - User::LeaveIfError( aRepository.Get( KPushMtmWhiteList, nonConstWLBuf ) ); - ParseAndProcessBuf2ListL( *wlBuf ); - CleanupStack::PopAndDestroy( wlBuf ); // wlBuf - - PUSHLOG_LEAVEFN("CPushInitiatorList::InternalizeL"); - } - -// --------------------------------------------------------- -// CPushInitiatorList::CPushInitiatorList -// --------------------------------------------------------- -// -CPushInitiatorList::CPushInitiatorList( const TInt aGranularity ) -: CArrayPtrFlat( aGranularity ), - iPushInitiatorListChanged( EFalse ) - { - } - -// --------------------------------------------------------- -// CPushInitiatorList::ParseAndProcessBuf2ListL -// --------------------------------------------------------- -// -void CPushInitiatorList::ParseAndProcessBuf2ListL - ( const TDesC& aStreamedBuf ) - { - PUSHLOG_ENTERFN("CPushInitiatorList::ParseAndProcessBuf2ListL"); - PUSHLOG_WRITE_FORMAT(" param: <%S>",&aStreamedBuf) - - CWhiteListConverter* converter = CWhiteListConverter::NewL( *this ); - CleanupStack::PushL( converter ); - - TRAPD( err, converter->Buffer2ListL( aStreamedBuf ) ); - PUSHLOG_WRITE_FORMAT(" <%d>",err); - if ( err == KErrOverflow || err == KErrCorrupt ) - { - // The input is corrupted. Leave the White List as is and - // do not forward these LEAVE values, because it would - // terminate the RFS of Push. - } - else - { - // Other error. Must be forwarded. - User::LeaveIfError( err ); - } - - CleanupStack::PopAndDestroy( converter ); // converter - - PUSHLOG_LEAVEFN("CPushInitiatorList::ParseAndProcessBuf2ListL"); - } - -// --------------------------------------------------------- -// CPushInitiatorList::ParseAndProcessList2BufL -// --------------------------------------------------------- -// -HBufC* CPushInitiatorList::ParseAndProcessList2BufL() const - { - PUSHLOG_ENTERFN("CPushInitiatorList::ParseAndProcessList2BufL"); - - CPushInitiatorList& nonConstPiList = (CPushInitiatorList&)*this; - CWhiteListConverter* converter = CWhiteListConverter::NewL( nonConstPiList ); - CleanupStack::PushL( converter ); - - HBufC* retBuf(0); - TRAPD( err, retBuf = converter->List2BufferL() ); - PUSHLOG_WRITE_FORMAT(" <%d>",err); - User::LeaveIfError( err ); - - CleanupStack::PopAndDestroy( converter ); // converter - - PUSHLOG_WRITE_FORMAT(" ret: <%S>",retBuf) - PUSHLOG_LEAVEFN("CPushInitiatorList::ParseAndProcessList2BufL"); - return retBuf; - } - -// End of File.