diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/cache/src/HttpCacheEntry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/cache/src/HttpCacheEntry.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,306 @@ +/* +* Copyright (c) 2006 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: Implementation of CHttpCacheEntry +* +*/ + +// INCLUDE FILES +#include "HttpCacheEntry.h" +#include "HttpCacheEvictionHandler.h" +#include "HttpCacheStreamHandler.h" +#include "HttpCacheUtil.h" +#include + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS +const TInt CHttpCacheEntry::iOffset = _FOFF( CHttpCacheEntry, iSlink ); + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::CHttpCacheEntry +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CHttpCacheEntry::CHttpCacheEntry( + CHttpCacheEvictionHandler& aEvictionHandler ) + : iState( ECacheUninitialized ), + iEvictionHandler( &aEvictionHandler ) + { + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CHttpCacheEntry::ConstructL( + const TDesC8& aUrl ) + { + iUrl = aUrl.AllocL(); + iFileName = KNullDesC().AllocL(); + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHttpCacheEntry* CHttpCacheEntry::NewL( + const TDesC8& aUrl, + CHttpCacheEvictionHandler& aEvictionHandler ) + { + CHttpCacheEntry* self = new( ELeave ) CHttpCacheEntry( aEvictionHandler ); + + CleanupStack::PushL( self ); + self->ConstructL( aUrl ); + CleanupStack::Pop(); + + return self; + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CHttpCacheEntry* CHttpCacheEntry::NewLC( + const TDesC8& aUrl, + CHttpCacheEvictionHandler& aEvictionHandler ) + { + CHttpCacheEntry* self = CHttpCacheEntry::NewL( aUrl, aEvictionHandler ); + CleanupStack::PushL( self ); + return self; + } + +// Destructor +CHttpCacheEntry::~CHttpCacheEntry() + { + if( iVictim && iEvictionHandler) + { + iEvictionHandler->Remove( *this ); + } + delete iUrl; + delete iFileName; + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::SetState +// +// ----------------------------------------------------------------------------- +// +void CHttpCacheEntry::SetState( + TCacheEntryState aState ) + { + // add entry to the eviction table once it gets completed + if( aState == ECacheComplete && !iVictim ) + { + // don't add it twice + iEvictionHandler->Insert( *this ); + iVictim = ETrue; + } + iState = aState; + } + + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::SetFileNameL +// +// ----------------------------------------------------------------------------- +// +void CHttpCacheEntry::SetFileNameL( + const TFileName& aFileName ) + { + delete iFileName; + iFileName = NULL; + iFileName = aFileName.AllocL(); + } + + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::Accessed +// +// ----------------------------------------------------------------------------- +// +void CHttpCacheEntry::Accessed() + { + TTime now; + now.HomeTime(); + + iLastAccessed = now.Int64(); + + iRef++; + if( iVictim ) + { + iEvictionHandler->Accessed( *this ); + } +#ifdef __CACHELOG__ + _LIT( KAccessFormat, "entry accessed: %d" ); + TBuf<100> buf; + buf.Format( KAccessFormat, iRef ); + HttpCacheUtil::WriteUrlToLog( 0, buf, iUrl->Des() ); +#endif // __CACHELOG__ + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::SetSize +// +// ----------------------------------------------------------------------------- +// +void CHttpCacheEntry::SetSize( + TUint aSize ) + { + if( iSize && !aSize ) + { + // body removal + // remove itself from the eviction table. + // this is no longer a victim + if( iVictim ) + { + iEvictionHandler->Remove( *this ); + iVictim = EFalse; + } + } + iSize = aSize; + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::SetProtected +// +// ----------------------------------------------------------------------------- +// +void CHttpCacheEntry::SetProtected() + { + iProtected = ETrue; + // iRef + iRef = 50; + HttpCacheUtil::WriteLog( 0, _L( "protected item" ) ); + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::Internalize +// +// ----------------------------------------------------------------------------- +// +TInt CHttpCacheEntry::Internalize( + RFileReadStream& aReadStream ) + { + TRAPD( err, + TInt len; + + // url length + len = aReadStream.ReadInt32L(); + delete iUrl; + iUrl=NULL; + iUrl = HBufC8::NewL( len ); + TPtr8 ptr8( iUrl->Des() ); + // url + aReadStream.ReadL( ptr8, len ); + + // filename length + len = aReadStream.ReadInt32L(); + HBufC* filename = HBufC::NewLC( len ); + TPtr ptr( filename->Des() ); + // url + aReadStream.ReadL( ptr, len ); + // + SetFileNameL( filename->Des() ); + // + CleanupStack::PopAndDestroy(); // filename + // la + TReal64 la; + la = aReadStream.ReadReal64L(); + iLastAccessed = la; + // ref + iRef = aReadStream.ReadUint32L(); + // size + iSize = aReadStream.ReadUint32L( ); + // size + iHeaderSize = aReadStream.ReadUint32L( ); + // protected + iProtected = aReadStream.ReadInt32L(); + // + SetState( ECacheComplete ); ); + return err; + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::Externalize +// +// ----------------------------------------------------------------------------- +// +TInt CHttpCacheEntry::Externalize( + RFileWriteStream& aWriteStream ) + { + TRAPD( err, + // url length + aWriteStream.WriteInt32L( iUrl->Length() ); + // url + aWriteStream.WriteL( iUrl->Des() ); + // filename length + aWriteStream.WriteInt32L( iFileName->Length() ); + // filename + aWriteStream.WriteL( iFileName->Des() ); + // la + aWriteStream.WriteReal64L( iLastAccessed ); + // ref + aWriteStream.WriteUint32L( iRef ); + // size + aWriteStream.WriteUint32L( iSize ); + // size + aWriteStream.WriteUint32L( iHeaderSize ); + // protected + aWriteStream.WriteInt32L( iProtected ); ); + return err; + } + +// ----------------------------------------------------------------------------- +// CHttpCacheEntry::Accessed +// +// ----------------------------------------------------------------------------- +// +void CHttpCacheEntry::Accessed(TInt64 aLastAccessed, TUint16 aRef) + { + iLastAccessed = aLastAccessed; + iRef = aRef; + if( iVictim ) + { + iEvictionHandler->Accessed( *this ); + } +#ifdef __CACHELOG__ + _LIT( KAccessFormat, "entry accessed: %d" ); + TBuf<100> buf; + buf.Format( KAccessFormat, iRef ); + HttpCacheUtil::WriteUrlToLog( 0, buf, iUrl->Des() ); +#endif // __CACHELOG__ + + } + +// End of File