diff -r 77cb48a03620 -r d9861ae9169c xdmprotocols/XcapProtocol/XcapCache/Server/src/XcapCacheIndexEntry.cpp --- a/xdmprotocols/XcapProtocol/XcapCache/Server/src/XcapCacheIndexEntry.cpp Thu Jul 01 14:09:06 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,404 +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: CXcapCacheIndexEntry -* -*/ - - - - -// INCLUDE FILES -#include "ServerDefines.h" -#include "XcapCacheServer.h" -#include "XcapCacheIndexEntry.h" -#include "XcapCacheEntryProperty.h" - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::CXcapCacheIndexEntry -// -// ---------------------------------------------------------- -// -CXcapCacheIndexEntry::CXcapCacheIndexEntry() - { - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::NewL -// -// ---------------------------------------------------------- -// -CXcapCacheIndexEntry* CXcapCacheIndexEntry::NewL( const TCacheEntryInfo* aHeader ) - { - CXcapCacheIndexEntry* self = new( ELeave ) CXcapCacheIndexEntry(); - CleanupStack::PushL( self ); - self->ConstructL( aHeader ); - CleanupStack::Pop(); - return self; - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::NewL -// -// ---------------------------------------------------------- -// -CXcapCacheIndexEntry* CXcapCacheIndexEntry::NewL( TPtr8& aEntryData ) - { - CXcapCacheIndexEntry* self = new( ELeave ) CXcapCacheIndexEntry(); - CleanupStack::PushL( self ); - self->ConstructL( aEntryData ); - CleanupStack::Pop(); - return self; - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::~CXcapCacheIndexEntry -// -// ---------------------------------------------------------- -// -CXcapCacheIndexEntry::~CXcapCacheIndexEntry() - { - iPropertyList.ResetAndDestroy(); - iPropertyList.Close(); - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::ConstructL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndexEntry::ConstructL( TPtr8& aEntryData ) - { - while( aEntryData.Length() > 0 ) - { - CXcapCacheEntryProperty* prop = NULL; - TInt index = aEntryData.FindF( KValueFieldSeparator ); - if( index > 0 ) - { - TPtrC8 propData = aEntryData.Left( index ); - TInt separator = propData.FindF( KValuePropertySeparator ); - if( separator > 0 ) - { - TPtrC8 name = propData.Left( separator ); - TPtrC8 value = propData.Right( propData.Length() - separator - 1 ); - const TInt nameId = FindPropNameId( name ); - __ASSERT_DEBUG( nameId != KErrNotFound, User::Leave( KErrCorrupt ) ); - prop = CreatePropertyL( nameId, value ); - CleanupStack::PushL( prop ); - User::LeaveIfError( iPropertyList.Append( prop ) ); - CleanupStack::Pop(); //prop - } - aEntryData.Delete( 0, index + 1 ); - } - } - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::ConstructL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndexEntry::ConstructL( const TCacheEntryInfo* aHeader ) - { - CreateFromHeaderL( aHeader ); - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::FindPropNameId -// -// ---------------------------------------------------------- -// -TInt CXcapCacheIndexEntry::FindPropNameId( const TDesC8& aNameString ) const - { - TBool found = EFalse; - TInt ret = KErrNotFound; - TInt arrayLength = sizeof( KCacheEntryArray ) / - sizeof( KCacheEntryArray[0] ); - for( TInt i = 0;!found && i < arrayLength;i++ ) - { - if( aNameString.CompareF( TPtrC8( KCacheEntryArray[i] ) ) == 0 ) - { - ret = i; - found = ETrue; - } - } - return ret; - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::UpdateEntryL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndexEntry::UpdateEntryL( const TCacheEntryInfo* aHeader ) - { - TTime access = LastAccess(); - DeleteFileL( FileNameL() ); - iPropertyList.ResetAndDestroy(); - CreateFromHeaderL( aHeader ); - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::DeleteFileL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndexEntry::DeleteFileL( const TDesC8& aFileName ) - { - HBufC* buf = HBufC::NewLC( aFileName.Length() ); - buf->Des().Copy( aFileName ); - CFileMan* manager = CFileMan::NewL( CXcapCacheServer::FileSession() ); - CleanupStack::PushL( manager ); - TInt error = manager->Delete( buf->Des() ); - #ifdef _DEBUG - CXcapCacheServer::WriteToLog( _L8( "CXcapCacheServer::DeleteFileL() - Error: %d" ), error ); - #endif - CleanupStack::PopAndDestroy( 2 ); //manager, buf - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::CreatePropertyL -// -// ---------------------------------------------------------- -// -CXcapCacheEntryProperty* CXcapCacheIndexEntry::CreatePropertyL( const TInt aPropertyName, - const TDesC8& aPropertyValue ) - { - return CXcapCacheEntryProperty::NewL( aPropertyName, aPropertyValue ); - } - -// --------------------------------------------------------- -// CXcapCacheIndexTableEntry::FindProperty -// -// --------------------------------------------------------- -// -const CXcapCacheEntryProperty& CXcapCacheIndexEntry::FindProperty( const TInt aPropId ) const - { - TBool found = EFalse; - TInt count = iPropertyList.Count(); - CXcapCacheEntryProperty* property = NULL; - for( TInt i = 0;!found && i < count;i++ ) - { - property = iPropertyList[i]; - if( property->Name() == aPropId ) - found = ETrue; - } - return *property; - } - -// --------------------------------------------------------- -// CXcapCacheIndexTableEntry::LastAccess -// -// --------------------------------------------------------- -// -TTime CXcapCacheIndexEntry::LastAccess() const - { - const CXcapCacheEntryProperty& property = FindProperty( KCacheLastAccess ); - return property.TimeValue(); - } - -// --------------------------------------------------------- -// CXcapCacheIndexTableEntry::LastModified -// -// --------------------------------------------------------- -// -TTime CXcapCacheIndexEntry::LastModified() const - { - const CXcapCacheEntryProperty& property = FindProperty( KCacheLastModified ); - return property.TimeValue(); - } - -// --------------------------------------------------------- -// CXcapCacheIndexTableEntry::XmlSize -// -// --------------------------------------------------------- -// -TInt CXcapCacheIndexEntry::XmlSize() const - { - const CXcapCacheEntryProperty& property = FindProperty( KCacheXmlSize ); - return property.IntValue(); - } - -// --------------------------------------------------------- -// CXcapCacheIndexTableEntry::FileNameL -// -// --------------------------------------------------------- -// -TPtrC8 CXcapCacheIndexEntry::FileNameL() const - { - const CXcapCacheEntryProperty& property = FindProperty( KCacheXmlFile ); - return property.DesValue8(); - } - -// --------------------------------------------------------- -// CXcapCacheIndexTableEntry::FileName16L -// -// --------------------------------------------------------- -// -TPtrC CXcapCacheIndexEntry::FileName16L() const - { - const CXcapCacheEntryProperty& property = FindProperty( KCacheXmlFile ); - return property.DesValue16(); - } - -// --------------------------------------------------------- -// CXcapCacheIndexTableEntry::ETag -// -// --------------------------------------------------------- -// -TPtrC8 CXcapCacheIndexEntry::ETag() const - { - const CXcapCacheEntryProperty& property = FindProperty( KCacheEntryETag ); - return property.DesValue8(); - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::CreateFromHeaderL -// -// ---------------------------------------------------------- -// -void CXcapCacheIndexEntry::CreateFromHeaderL( const TCacheEntryInfo* aHeader ) - { - TInt arrayLength = sizeof( KCacheEntryArray ) / - sizeof( KCacheEntryArray[0] ); - HBufC8* hour = HourStringLC(); - for( TInt i = 0;i < arrayLength;i++ ) - { - CXcapCacheEntryProperty* prop = NULL; - switch( i ) - { - case KCacheEntryETag: - prop = CreatePropertyL( KCacheEntryETag, *aHeader->iEtag ); - break; - case KCacheXmlSize: - { - TBuf8<10> sizeBuf; - sizeBuf.AppendNum( aHeader->iDataLength ); - prop = CreatePropertyL( KCacheXmlSize, sizeBuf ); - } - break; - case KCacheXmlFile: - { - HBufC8* fileName = StoreXmlFileLC( *aHeader->iRespData ); - prop = CreatePropertyL( KCacheXmlFile, fileName->Des() ); - CleanupStack::PopAndDestroy(); //fileName - } - break; - case KCacheLastAccess: - prop = CreatePropertyL( KCacheLastAccess, hour->Des() ); - break; - case KCacheLastModified: - prop = CreatePropertyL( KCacheLastModified, hour->Des() ); - break; - default: - break; - } - if( prop != NULL ) - User::LeaveIfError( iPropertyList.Append( prop ) ); - } - CleanupStack::PopAndDestroy(); //hour - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::HourStringLC -// -// ---------------------------------------------------------- -// -HBufC8* CXcapCacheIndexEntry::HourStringLC() - { - HBufC8* hourString = NULL; - TPtrC date( CXcapCacheServer::Date() ); - TPtrC time( CXcapCacheServer::Time() ); - hourString = HBufC8::NewLC( date.Length() + time.Length() + 1 ); - TPtr8 pointer( hourString->Des() ); - pointer.Copy( date ); - pointer.Append( KPageFileSeparator ); - pointer.Append( time ); - return hourString; - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::StoreXmlFileLC -// -// ---------------------------------------------------------- -// -HBufC8* CXcapCacheIndexEntry::StoreXmlFileLC( const TDesC8& aXmlData ) - { - RFile file; - HBufC* nameBuf = NULL; - TPtrC randomName( _L( "" ) ); - TInt error = KErrAlreadyExists; - //It is extremely unlikely that the random string generator - //creates two exact same patterns, but let's check for it, anyway. - while( error == KErrAlreadyExists ) - { - randomName.Set( CXcapCacheServer::RandomString() ); - nameBuf = HBufC::NewLC( KCacheServerRoot().Length() + randomName.Length() ); - nameBuf->Des().Copy( KCacheServerRoot ); - nameBuf->Des().Append( randomName ); - error = file.Create( CXcapCacheServer::FileSession(), - nameBuf->Des(), EFileWrite ); - if( error != KErrNone ) - CleanupStack::PopAndDestroy(); //nameBuf - } - file.Write( aXmlData ); - file.Close(); - __ASSERT_ALWAYS( nameBuf != NULL, User::Leave( KErrCorrupt ) ); - HBufC8* ret = HBufC8::NewLC( nameBuf->Des().Length() ); - ret->Des().Copy( nameBuf->Des() ); - CleanupStack::Pop(); //ret - CleanupStack::PopAndDestroy(); //nameBuf - CleanupStack::PushL( ret ); - return ret; - } - -// ---------------------------------------------------------- -// CXcapCacheIndexEntry::PrintLC -// -// ---------------------------------------------------------- -// -HBufC8* CXcapCacheIndexEntry::PrintLC() const - { - TInt position = 0; - CBufFlat* buffer = NULL; - HBufC8* entryString = NULL; - TInt count = iPropertyList.Count(); - if( count > 0 ) - { - buffer = CBufFlat::NewL( 50 ); - CleanupStack::PushL( buffer ); - for( TInt i = 0;i < count;i++ ) - { - TPtrC8 name = TPtrC8( KCacheEntryArray[iPropertyList[i]->Name()] ); - TPtrC8 value = iPropertyList[i]->DesValue8(); - buffer->InsertL( position, name ); - position = position + name.Length(); - buffer->InsertL( position, KValuePropertySeparator ); - position = position + KValuePropertySeparator().Length(); - buffer->InsertL( position, value ); - position = position + value.Length(); - buffer->InsertL( position, KValueFieldSeparator ); - position = position + KValueFieldSeparator().Length(); - } - buffer->InsertL( position, KIndexFileEndOfLine ); - TPtr8 pointer( buffer->Ptr( 0 ) ); - entryString = HBufC8::NewL( pointer.Length() ); - entryString->Des().Copy( pointer ); - CleanupStack::PopAndDestroy(); //buffer - CleanupStack::PushL( entryString ); - } - return entryString; - } - - -