webengine/osswebengine/cache/src/HttpCacheEntry.cpp
changeset 0 dd21522fd290
child 1 7c90e6132015
--- /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