--- /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 <s32file.h>
+
+// 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