diff -r 77cb48a03620 -r d9861ae9169c xdmprotocols/XcapProtocol/XcapCache/Server/src/XcapCacheIndex.cpp --- a/xdmprotocols/XcapProtocol/XcapCache/Server/src/XcapCacheIndex.cpp Thu Jul 01 14:09:06 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,268 +0,0 @@ -/* -* Copyright (c) 2005 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: CXcapCacheIndex -* -*/ - - - - -// INCLUDE FILES -#include "ServerDefines.h" -#include "XcapCacheIndex.h" -#include "XcapCacheServer.h" -#include "XcapCacheIndexEntry.h" - -// ---------------------------------------------------------- -// CXcapCacheIndex::CXcapCacheIndex -// -// ---------------------------------------------------------- -// -CXcapCacheIndex::CXcapCacheIndex() - { - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::NewL -// -// ---------------------------------------------------------- -// -CXcapCacheIndex* CXcapCacheIndex::NewL() - { - CXcapCacheIndex* self = new( ELeave ) CXcapCacheIndex(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::ConstructL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndex::ConstructL() - { - TInt length = 0; - RFile index = InitialiseIndexL(); - CleanupClosePushL( index ); - User::LeaveIfError( index.Size( length ) ); - if( length > 0 ) - { - HBufC8* data = HBufC8::NewLC( length ); - TPtr8 pointer( data->Des() ); - User::LeaveIfError( index.Read( pointer ) ); - ReadEntriesL( pointer ); - CleanupStack::PopAndDestroy(); //data - } - CleanupStack::PopAndDestroy(); //index - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::InitialiseIndexL -// -// ---------------------------------------------------------- -// -RFile CXcapCacheIndex::InitialiseIndexL() - { - RFile ret; - TUid process = RProcess().Identity(); - #ifdef _DEBUG - CXcapCacheServer::WriteToLog( _L8( "CXcapCacheIndex::InitialiseIndexL() - Process: %x" ), process ) ; - #endif - TInt error = ret.Open( CXcapCacheServer::FileSession(), KCacheServerIndex, - EFileShareExclusive | EFileRead | EFileWrite ); - if( error != KErrNone ) - { - if( error == KErrPathNotFound ) - User::LeaveIfError( CXcapCacheServer::FileSession().MkDirAll( KCacheServerRoot ) ); - User::LeaveIfError( ret.Create( CXcapCacheServer::FileSession(), KCacheServerIndex, - EFileShareExclusive | EFileRead | EFileWrite ) ); - } - return ret; - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::~CXcapCacheIndex -// -// ---------------------------------------------------------- -// -CXcapCacheIndex::~CXcapCacheIndex() - { - iEntryList.ResetAndDestroy(); - iEntryList.Close(); - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::ConstructL -// -// ---------------------------------------------------------- -// -TInt CXcapCacheIndex::UpdateIndexL( const CXcapCacheIndexEntry* aEntry ) - { - if( aEntry != NULL ) - { - User::LeaveIfError( iEntryList.Append( aEntry ) ); - return iEntryList.Find( aEntry ); - } - else return KErrNotFound; - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::Entry -// -// ---------------------------------------------------------- -// -CXcapCacheIndexEntry* CXcapCacheIndex::Entry( TInt aIndex ) const - { - TInt count = iEntryList.Count(); - CXcapCacheIndexEntry* entry = NULL; - if( count > 0 && aIndex >= 0 && aIndex < count ) - entry = iEntryList[aIndex]; - return entry; - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::EntryCount -// -// ---------------------------------------------------------- -// -TInt CXcapCacheIndex::EntryCount() const - { - return iEntryList.Count(); - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::Compare -// -// ---------------------------------------------------------- -// -TInt CXcapCacheIndex::Compare( const CXcapCacheIndexEntry& aFirst, - const CXcapCacheIndexEntry& aSecond ) - { - if( aFirst.LastModified() == aSecond.LastModified() ) - return 0; - else if( aFirst.LastModified() > aSecond.LastModified() ) - return 1; - else return -1; - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::SortEntries -// -// ---------------------------------------------------------- -// -void CXcapCacheIndex::SortEntries() - { - TLinearOrder order( CXcapCacheIndex::Compare ); - iEntryList.Sort( order ); - #ifdef _DEBUG - TPtrC8 entryDesc; - TInt count = iEntryList.Count(); - CXcapCacheServer::WriteToLog( _L8( "CXcapCacheIndex::SortEntries()" ) ); - CXcapCacheServer::WriteToLog( _L8( "------------------------------------------" ) ); - CXcapCacheServer::WriteToLog( _L8( " Sorted list:" ) ); - for( TInt i = 0;i < count;i++ ) - { - TBuf buffer = - CXcapCacheServer::DateTime( iEntryList[i]->LastModified() ); - TBuf8 printBuffer( _L8( " " ) ); - printBuffer.AppendFormat( _L8( "%d: " ), i ); - printBuffer.Append( buffer ); - CXcapCacheServer::WriteToLog( printBuffer ); - } - CXcapCacheServer::WriteToLog( _L8( "------------------------------------------" ) ); - #endif - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::RemoveEntry -// -// ---------------------------------------------------------- -// -void CXcapCacheIndex::RemoveEntry( TInt aIndex ) - { - TInt count = iEntryList.Count(); - if( count > 0 && aIndex >= 0 && aIndex < count ) - { - CXcapCacheIndexEntry* entry = iEntryList[aIndex]; - iEntryList.Remove( aIndex ); - delete entry; - entry = NULL; - } - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::ReadEntriesL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndex::ReadEntriesL( TPtr8& aIndexData ) - { - TBool finished = EFalse; - while( !finished && aIndexData.Length() > 0 ) - { - //If we find that there is still more data, but no \r\n - //to denote the end of an entry, simply quit. The data - //format has most probably been corrupted at some point. - TInt entryIndex = aIndexData.FindF( KIndexFileEndOfLine ); - if( entryIndex > 0 ) - { - TPtr8 entryData = CXcapCacheServer::DescriptorCast( - aIndexData.Left( entryIndex ) ); - CXcapCacheIndexEntry* entry = CXcapCacheIndexEntry::NewL( entryData ); - CleanupStack::PushL( entry ); - User::LeaveIfError( iEntryList.Append( entry ) ); - CleanupStack::Pop(); - aIndexData.Delete( 0, entryIndex + 2 ); - } - else finished = ETrue; - } - } - -// ---------------------------------------------------------- -// CXcapCacheIndex::ConstructL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndex::StoreCacheDataL() - { - RFile index; - TInt count = iEntryList.Count(); - if( count > 0 ) - { - User::LeaveIfError( index.Replace( CXcapCacheServer::FileSession(), - KCacheServerIndex, EFileWrite ) ); - CleanupClosePushL( index ); - for( TInt i = 0;i < count;i++ ) - { - CXcapCacheIndexEntry* entry = iEntryList[i]; - HBufC8* entryData = entry->PrintLC(); - if( entryData ) - { - User::LeaveIfError( index.Write( entryData->Des() ) ); - CleanupStack::PopAndDestroy(); //entryData - } - } - CleanupStack::PopAndDestroy(); //index - } - else - { - CFileMan* manager = CFileMan::NewL( CXcapCacheServer::FileSession() ); - manager->Delete( KCacheServerIndex ); - delete manager; - manager = NULL; - } - } -