internetradio2.0/cachemgmtsrc/ircachemgmt.cpp
changeset 14 896e9dbc5f19
parent 12 608f67c22514
child 15 065198191975
--- a/internetradio2.0/cachemgmtsrc/ircachemgmt.cpp	Tue Jul 06 14:07:20 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1506 +0,0 @@
-/*
-* Copyright (c) 2006-2007 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:  ?Description
-*
-*/
-
-
-#include <bautils.h>
-
-#include "irbrowsecatagoryitems.h"
-#include "irbrowsechannelitems.h"
-#include "ircachecleanup.h"
-#include "ircachemgmt.h"
-#include "ircacheobserver.h"
-#include "irdebug.h"
-#include "irhttprequestdata.h"
-#include "irisdspreset.h"
-#include "irotaupdate.h"
-#include "irsettings.h"
-
-//Default trust period value.24 hrs in secs with which the object is to be initialised
-const TInt KDefaultInterval = 24*60*60;
-//granualarity for the arrays
-//the granualarity value is based on superficial observation of the amount of 
-//data recieved for a particular request
-const TInt KBrowseGranualarity = 32;
-const TInt KChannelArrayGranualarity = 32;
-const TInt KPresetGranualarity = 12;
-//http length format length
-// "Sun, 06 Nov 1994 08:49:37 GMT" format
-const TInt KHttpDateLength = 25;
-
-//Max size(critical size) in Bytes(90% of the max size)
-//critical size is the size that triggers cleanup action
-const TInt KCacheCriticalSizeLimit = KCacheLimitSize*9/10;
-
-//No of rows deleted will be one fourth of the total number of rows
-const TInt KPercentRowsDeleted = 4;  
-
-//The indexing size for the column DataId is set to 100 
-const TInt KDataIdIndexSize = 100;
-
-//database file name
-_LIT(KCacheDbFile,"cacheDb.db");
-
-//Table Name CacheTable
-_LIT(KCacheTable,"CacheTable");
-
-//CacheTable columns
-_LIT(KRowIndexCol,     "RowIndex");  
-_LIT(KDataTypeCol,     "DataType");            
-_LIT(KDataIdCol,       "DataId");       
-_LIT(KTrustPeriodCol,  "TrustPeriod");       
-_LIT(KLastModifiedCol, "LastModified"); 
-_LIT(KLastAccessedCol, "LastAccessed"); 
-_LIT(KTimeCreation,    "Created");
-_LIT(KItemCount,       "ItemCount");
-_LIT(KCachedDataCol,   "CachedData");
-_LIT(KETagHeader,      "ETagHeader"); 
-
-//Table Index Names
-_LIT(KRowIndexColIndex,     "IndexRowIndex");  
-_LIT(KDataTypeColIndex,     "IndexDataType");            
-_LIT(KDataIdColIndex,       "IndexDataId");  
-_LIT(KLastAccessedColIndex, "IndexLastAccessed"); 
-_LIT(KTimeCreationIndex,    "IndexCreated");
-//Field Lengths
-
-const TInt KIRObserverArrayGranularity( 2 );
-
-
-// ---------------------------------------------------------------------------
-// Function : OpenL
-// Standard two phased construction
-// calls ConstructL()
-// ---------------------------------------------------------------------------
-//
-EXPORT_C CIRCacheMgmt* CIRCacheMgmt::OpenL(MIRCacheObserver &aObserver)
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::OpenL - Entering." );
-	CIRCacheMgmt* self = reinterpret_cast<CIRCacheMgmt*>(Dll::Tls());
-	
-	if (self)
-		{
-		User::LeaveIfError(self->Open());
-		}
-    else
-		{
-		self = new (ELeave) CIRCacheMgmt(aObserver);
-		CleanupClosePushL(*self);
-		self->ConstructL();
-		User::LeaveIfError(Dll::SetTls(self));
-		CleanupStack::Pop(self);
-		}
-	IRLOG_DEBUG( "IRCacheMgmt::OpenL - Exiting." );
-	return self;
-	}
-
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::~CIRCacheMgmt()
-// Standard C++ destructor
-// ---------------------------------------------------------------------------
-//
-CIRCacheMgmt::~CIRCacheMgmt() 
-	{	
-	IRLOG_DEBUG( "IRCacheMgmt::~CIRCacheMgmt - Entering." );
-	//array destruction
-	if (iPtrPreset)
-		{
-		iPtrPreset->ResetAndDestroy();
-        delete iPtrPreset;
-        iPtrPreset = NULL;
-		}
-    if (iPtrCategory)
-        {
-        iPtrCategory->ResetAndDestroy();
-        }
-
-    delete iPtrCategory;
-    iPtrCategory = NULL;
-    if (iPtrChannel)
-        {
-        iPtrChannel->ResetAndDestroy();
-        }
-
-    delete iPtrChannel;
-    iPtrChannel = NULL;
-    if (iSettings)
-        {
-        iSettings->Close();
-        }
-	if(iOTA)
-		{
-		delete iOTA;
-		iOTA = NULL;
-		}
-	iLogoData.Close();		
-    CloseDb();
-    iCacheDb.Close();
-    delete iCleanup;
-    iFsSession.Close();
-    iCacheObservers.Close();
-    Dll::FreeTls();
-    IRLOG_DEBUG( "IRCacheMgmt::~CIRCacheMgmt - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CIRCacheMgmt()
-// Standard C++ constructor
-// sets the trust period to 24hrs(default)
-// ---------------------------------------------------------------------------
-//
-CIRCacheMgmt::CIRCacheMgmt (MIRCacheObserver &aObserver)
-			:iCacheObserver(aObserver),
-			 iCacheObservers( KIRObserverArrayGranularity )
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::CIRCacheMgmt - Entering." );
-	//default trust period initially set to 24 hrs
-	//to be fetched from central repository
-	iTrustPeriod = TTimeIntervalSeconds(KDefaultInterval);	
-	IRLOG_DEBUG( "IRCacheMgmt::CIRCacheMgmt - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::ConstructL()
-// Standard two phased construction
-// ---------------------------------------------------------------------------
-//
-void CIRCacheMgmt::ConstructL() 
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::ConstructL - Entering." );
-	User::LeaveIfError(iFsSession.Connect());
-	//array construction
-	iPtrPreset = new (ELeave) CArrayPtrFlat<CIRIsdsPreset>(
-				KPresetGranualarity);
-    iPtrCategory = new (ELeave) CArrayPtrFlat<CIRBrowseCatagoryItems>(
-    	KBrowseGranualarity);
-	iPtrChannel = new (ELeave) CArrayPtrFlat<CIRBrowseChannelItems>(
-		KChannelArrayGranualarity);
-	iOTA = CIROTAUpdate::NewL();
-	iSettings = CIRSettings::OpenL();
-	iDatabaseFileName = iSettings->PrivatePath();
-	iDatabaseFileName.Append(KCacheDbFile);
-	CreateDbConditionalL();
-	iCleanup = CIRCacheCleanup::NewL(*this);
-	RemoveOtaInfoL();
-	IRLOG_DEBUG( "IRCacheMgmt::ConstructL - Exiting." );
-    }
-    
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CreateDbConditionalL(
-// Creates dbms conditionally(only if not yet created)
-// calls CreateDb()
-// ---------------------------------------------------------------------------
-//
-void CIRCacheMgmt::CreateDbConditionalL()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::CreateDbConditionalL - Entering." );
-	TInt err=KErrNone;
-	if(!BaflUtils::FileExists(iFsSession, iDatabaseFileName))
-		{
-		err=CreateDb();
-		if(KErrNone != err)
-			{
-			User::Leave(err);	
-			}
-		}
-	IRLOG_DEBUG( "IRCacheMgmt::CreateDbConditionalL - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CreateDb()
-// Creates the tables
-// ---------------------------------------------------------------------------
-//
-TInt CIRCacheMgmt::CreateDb()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::CreateDb - Entering." );
-	CloseDb();
-	TInt err=iCacheDb.Replace(iFsSession,iDatabaseFileName);
-	if((err!=0))
-		{
-		return err; //unable to create file	
-		}																		
-	TRAP(err,//trap start
-		CreateCacheTableL();
-		CreateCacheIndexL();
-		)//trap end
-		IRLOG_DEBUG( "IRCacheMgmt::CreateDb - Exiting." );
-	return err;
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::OpenCacheDb()
-// Opens both the databases 
-// ---------------------------------------------------------------------------
-//
-TInt CIRCacheMgmt::OpenCacheDb()
-	{
-	IRLOG_DEBUG( "CIRCacheMgmt::OpenCacheDb - Entering" );
-	CloseDb();
-	TInt error = KErrNone;
-	if(!BaflUtils::FileExists(iFsSession, iDatabaseFileName))
-	    {
-	    //if file doesn't exist function leaves with error code
-	    //KErrNotFound
-	     return KErrNotFound;
-	    }
-	//try and open the db	
-	error = iCacheDb.Open(iFsSession,iDatabaseFileName);
-	//return if error
-	if(KErrNone != error )
-		{
-		return error;
-		}
-	//check if damaged
-	if( iCacheDb.IsDamaged() )
-		{
-		//if data base is damaged then 
-		//try to recover
-		error = iCacheDb.Recover();
-		return error;
-		}
-				
-	iOpen = ETrue;
-	
-	IRLOG_DEBUG( "CIRCacheMgmt::OpenCacheDb - Exiting." );
-	return KErrNone;
-	}
-	
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CloseDb()
-// Closes the database 
-// ---------------------------------------------------------------------------
-//
-void CIRCacheMgmt::CloseDb()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::CloseDb - Entering." );
-	iCacheDb.Close();
-	iOpen = EFalse;
-	IRLOG_DEBUG( "IRCacheMgmt::CloseDb - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CheckCache()
-// API Exposed to Isds Client to check and get the cached items. 
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRCacheMgmt::CheckCacheL(TInt aType,const TDesC& aName,
-					TBool aForceGet,TInt& aReturn)   
-	{
-	IRLOG_DEBUG( "CIRCacheMgmt::CheckCacheL - Entering" );
-	//opens the db if not open already
-	if(!iOpen)
-		{
-		TInt error = OpenCacheDb();
-		if(KErrNone != error)
-			{
-			aReturn = ENotCached;
-			return;	
-			}
-		}
-
-    //calls the function FetchCacheIfAvailable() passing the appropriate type and id
-    
-	switch(aType)
-	{
-	case ECatagory:	
-	case EChannels:
-	case EPresets:
-	case EOtaInfo:
-	case ELogo:
-		{
-		TRAP_IGNORE(FetchCacheIfAvailableL(aType,aName,aForceGet,aReturn))
-		break;	
-		}
-		
-	default:
-		{
-	    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
-	        {
-	        iCacheObservers[i]->CacheFailed();
-	        }
-		aReturn = ENotCached;
-		break;	
-		}
-	}
-	CloseDb();
-	IRLOG_DEBUG( "CIRCacheMgmt::CheckCacheL - Exiting." );
-	}
-	
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::FetchCacheIfAvailable()
-// Fetches the cache if available 
-// ---------------------------------------------------------------------------
-//
-//generic function to check the validity of the cache	
-void CIRCacheMgmt::FetchCacheIfAvailableL(TInt aType,const TDesC& aId,
-	TBool aForceGet,TInt& aReturnVal)
-	{
-	//Algo****
-	//1.check the cache table for a request type
-	//2.if the query returns a row,check for validity
-	//3.if invalid(stale) do a conditional get
-	//4.if valid use cache
-	IRLOG_DEBUG( "CIRCacheMgmt::FetchCacheIfAvailableL - Entering" );
-	//SELECT * FROM KCacheTable WHERE KDataTypeCol = aType AND KDataIdCol=aId
-	_LIT( query, "SELECT * FROM %S WHERE %S = %d AND %S = '%S'" );
-	
-	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KCacheTable().Length() +
-								    KDataTypeCol().Length() + KDataIdCol().Length() +
-								    KDefaultRealWidth + aId.Length());
-								    
-	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,aType,&KDataIdCol,&aId);
-	
-	IRLOG_DEBUG2( "CIRCacheMgmt::FetchCacheIfAvailableL - Going to evaluate SQL query: %S", sqlQuery );
-	RDbView cacheView;
-	User::LeaveIfError(cacheView.Prepare(iCacheDb,*sqlQuery));
-	CleanupStack::PopAndDestroy(sqlQuery);
-	CleanupClosePushL(cacheView);
-    User::LeaveIfError( cacheView.EvaluateAll() );
-
-    //if no row match the query there is no cahche available for that particular 
-    //request
-    if(cacheView.IsEmptyL())
-	    {
-	    //Return ENotCached
-	    aReturnVal = ENotCached;
-	    }
-	else
-		{
-		cacheView.FirstL();
-		cacheView.GetL();
-		CDbColSet* columns = cacheView.ColSetL();
-		TTime creationTime = cacheView.ColTime(columns->ColNo( KTimeCreation));
-		TInt cacheValidityTime = cacheView.ColInt(columns->ColNo( KTrustPeriodCol));
-		TInt countItems=cacheView.ColInt(columns->ColNo( KItemCount));
-		IRLOG_DEBUG( "CIRCacheMgmt::FetchCacheIfAvailableL - can check validity." );
-		//check if cache is valid
-		//get it any way if it is "forcedget"
-		if( aForceGet || CheckValidity(creationTime,cacheValidityTime))
-			{
-			//Fetch the cached data
-			//FetchCachedData(type,count,&view )
-			TRAPD(err,FetchCachedDataL(aType,countItems,cacheView));
-			if(err!=KErrNone)
-				{
-				//something goes wrong ,return not cached and fetch new data
-				aReturnVal = ENotCached;
-				}
-			else
-				{
-				//cache usable
-				aReturnVal = ECacheUseable;
-				}
-			}
-		else
-			{
-			iLastModified = cacheView.ColTime(columns->ColNo( KLastModifiedCol));
-			iETag = cacheView.ColDes8(columns->ColNo( KETagHeader ));			
-			aReturnVal = ECacheNotValid;
-			cacheView.Close();
-		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
-		        {
-		        iCacheObservers[i]->CacheInvalid();
-		        }
-			}
-	    delete columns;	
-		}
-	CleanupStack::PopAndDestroy(&cacheView);
-	IRLOG_DEBUG( "CIRCacheMgmt::FetchCacheIfAvailableL - Exiting." );
-	
-	}
-	
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::FetchCachedDataL()
-// fetches the cached data from the table into the cached structures
-// ---------------------------------------------------------------------------
-//
-void CIRCacheMgmt::FetchCachedDataL(TInt aType,TInt aCountItems,RDbView& aCacheView)
-	{
-	//Algo****
-	//fetch the data and internalize into appropriate structure
-
-	IRLOG_DEBUG( "CIRCacheMgmt::FetchCachedDataL - Entering" );
-    CDbColSet* columns = aCacheView.ColSetL();
-    TInt columnNo = columns->ColNo( KCachedDataCol );
-    delete columns;
-	switch(aType)
-		{
-		case ECatagory:
-			{
-			//Internalize the category items into the CIRBrowseCatagoryItems array
-	        RDbColReadStream instream;
-	        instream.OpenLC( aCacheView, columnNo );
-			CIRBrowseCatagoryItems* ptr;
-			if (iPtrCategory)
-				{
-				iPtrCategory->ResetAndDestroy();
-				}
-			else
-			{
-				break;
-			}
-			for(TInt iter=0;iter<aCountItems;iter++)
-				{
-				ptr=CIRBrowseCatagoryItems::NewL();
-				CleanupStack::PushL(ptr);
-				instream>>*ptr;
-				iPtrCategory->AppendL(ptr);
-				CleanupStack::Pop(ptr);
-				}
-	        CleanupStack::PopAndDestroy( &instream );
-	        //update the last accessed time
-	        UpdateLastAccessedTimeL(aCacheView);
-	        aCacheView.Close();
-		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
-		        {
-		        iCacheObservers[i]->CachedStructureL(ECatagory);
-		        }
-	        break;
-			}
-		case EChannels:
-			{
-			//Internalize the channel items into the CIRBrowseChannelItems array
-	        RDbColReadStream instream;
-	        instream.OpenLC( aCacheView, columnNo );
-	        if (iPtrChannel)
-				{
-				iPtrChannel->ResetAndDestroy();
-				}
-			CIRBrowseChannelItems *ptr;
-			for(TInt iter=0;iter<aCountItems;iter++)
-				{
-				ptr = CIRBrowseChannelItems::NewL();
-				CleanupStack::PushL(ptr);
-				instream>>*ptr;
-	            if (iPtrChannel)
-				    {				
-        		    iPtrChannel->AppendL(ptr);
-	        		}
-				CleanupStack::Pop(ptr);
-				}
-	        CleanupStack::PopAndDestroy( &instream );
-	        //update the last accessed time
-	        UpdateLastAccessedTimeL(aCacheView);
-	        aCacheView.Close();
-		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
-		        {
-		        iCacheObservers[i]->CachedStructureL(EChannels);
-		        }
-	        break;
-			}
-		case EPresets:
-			{
-			//Internalize the preset  into the CIRIsdsPreset object
-	        RDbColReadStream instream;
-	        instream.OpenLC( aCacheView, columnNo );
-	        if(iPtrPreset)
-		        {
-		        iPtrPreset->ResetAndDestroy();
-		        }
-		    CIRIsdsPreset *ptr;
-		    for(TInt iter=0;iter<aCountItems;iter++)
-		    	{
-		    	ptr = CIRIsdsPreset::NewL();
-		    	CleanupStack::PushL(ptr);
-		    	instream>>*ptr;
-	            if(iPtrPreset)
-		            {		    	
-		    	    iPtrPreset->AppendL(ptr);
-		            }
-		    	CleanupStack::Pop(ptr);
-		        }
-	        CleanupStack::PopAndDestroy( &instream );
-	        //update the last accessed time
-	        UpdateLastAccessedTimeL(aCacheView);
-	        aCacheView.Close();
-		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
-		        {
-		        iCacheObservers[i]->CachedStructureL(EPresets);
-		        }
-	        break;
-			}
-		case EOtaInfo:
-			{
-			//Internalize the ota info into the CIROTAUpdate object
-	        RDbColReadStream instream;
-	        instream.OpenLC( aCacheView, columnNo );
-	        if(iOTA)
-		        {
-		        delete iOTA;
-		        iOTA = NULL;
-		        iOTA = CIROTAUpdate::NewL();
-		        instream>>*iOTA;
-		        }
-		  
-	        CleanupStack::PopAndDestroy( &instream );
-	        //update the last accessed time
-	        UpdateLastAccessedTimeL(aCacheView);
-	        aCacheView.Close();
-		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
-		        {
-		        iCacheObservers[i]->CachedStructureL(EOtaInfo);
-		        }
-	        break;
-			}
-		case ELogo:
-			{
-			//get the logo data from the cache
-			TInt logoSize = aCacheView.ColSize(columnNo);
-			iLogoData.Close();
-			iLogoData.Zero();
-			iLogoData.Create(logoSize);
-			
-			RDbColReadStream instream;
-			instream.OpenLC( aCacheView, columnNo );
-			instream.ReadL(iLogoData,aCacheView.ColLength(columnNo));
-			CleanupStack::PopAndDestroy( &instream );
-			//update the last accessed time
-	        UpdateLastAccessedTimeL(aCacheView);
-			aCacheView.Close();
-		    for (TInt i = 0 ; i < iCacheObservers.Count() ; i++ )
-		        {
-		        iCacheObservers[i]->CachedStructureL(ELogo);
-		        }
-	        break;
-			}
-		default:
-			{
-	        aCacheView.Close();
-			}
-		}
-	IRLOG_DEBUG( "CIRCacheMgmt::FetchCachedDataL - Exiting." );
-	}
-// ---------------------------------------------------------------------------
-//updates the last accessed field to aid in deletion of old unused data
-//
-// ---------------------------------------------------------------------------
-//
-void CIRCacheMgmt::UpdateLastAccessedTimeL(RDbView &aCacheView)
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriod - Entering." );
-	//update the last accessed col
-	CDbColSet* columns = aCacheView.ColSetL();
-    TInt updateColNo = columns->ColNo( KLastAccessedCol );
-    delete columns;
-    TTime currentTime;
-	currentTime.UniversalTime();
-    //update the current time value
-	aCacheView.GetL();
-	aCacheView.UpdateL();
-	aCacheView.SetColL(updateColNo,currentTime);
-	aCacheView.PutL();
-	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriod - Exiting." );
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CheckValidity()
-// Checks the freshness of the cache
-// ---------------------------------------------------------------------------
-//
-TBool CIRCacheMgmt::CheckValidity(const TTime& aCreateTime,TInt aTrustPeriod) const
-	{
-	//Algo****
-	//1.get the last creation time from the table for the request
-	//2.calculate creation-time + trust-period < current-time *
-	//3.if true the cache is valid
-	//4.else do conditional-get
-	IRLOG_DEBUG( "CIRCacheMgmt::CheckValidity - Entering" );
-	TTimeIntervalSeconds trustPeriod(aTrustPeriod);
-	TTimeIntervalSeconds diff;
-	TTime currentDeviceTime;
-	currentDeviceTime.UniversalTime();
-	currentDeviceTime.SecondsFrom(aCreateTime,diff);
-	//Has the cache expired
-		if(diff<trustPeriod)
-			{
-			IRLOG_DEBUG( "CIRCacheMgmt::CheckValidity - Exiting (1)." );
-			return  ETrue;
-			}
-		//Else return false
-		else
-			{
-			IRLOG_DEBUG( "CIRCacheMgmt::CheckValidity - Exiting (2)." );
-			return	EFalse;	
-			}
-	}
-
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CacheCategoryItemsL()
-// Caches the category array of data.By externalizing it into a file.
-// ---------------------------------------------------------------------------
-//
-
-EXPORT_C void CIRCacheMgmt::CacheCategoryItemsL(
-					CArrayPtrFlat<CIRBrowseCatagoryItems>& aPtrCategory,
-					const TDesC& aName, const CIRHttpResponseData& aResponseHeaders)
-	{
-	//Algo****
-	//1.check if similar request is cached
-	//2.delete if similar request is already present
-	//3.prepare a view for insertion
-	//4.push in the requested data as serialized data
-	
-	IRLOG_DEBUG( "IRCacheMgmt::CacheCategoryItemsL - Entering" );
-	TInt error = OpenCacheDb();
-	if(KErrNone != error)
-		{
-		//no problems if this function returns here.
-		//normal flow won't get affected.
-		//only a particular request wont get cached
-		return;	
-		}
-	
-	//clear similar data from the cache table before updating it with fresh data
-	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
-	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
-	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDataIdCol().Length() +
-									KDefaultRealWidth + aName.Length());
-	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,ECatagory,&KDataIdCol,&aName);
-	iCacheDb.Begin();
-	//deletes a similar record if it existed.
-	//no problem if it did not exist
-	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
-	CleanupStack::PopAndDestroy(sqlQuery);
-	iCacheDb.Commit();
-	
-	//get the cached data view for preset column to update with fresh data.
-	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
-	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
-	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDefaultRealWidth);
-	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,ECatagory);
-	
-	RDbView cacheTableView;
-	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
-	CleanupStack::PopAndDestroy(sqlQuery1);
-	CleanupClosePushL(cacheTableView);
-	
-	User::LeaveIfError(cacheTableView.EvaluateAll());
-
-	//prepare insertion values
-	//will go into last accessed aswell as the creation time fields
-	TTime currentTime;
-	currentTime.UniversalTime();
-	TInt countItems=aPtrCategory.Count();
-	TInt maxAge;
-	if(aResponseHeaders.iMaxAge.Length() == 0)
-		{
-		maxAge=iTrustPeriod.Int();
-		}
-	else
-		{
-		TLex8 conv(aResponseHeaders.iMaxAge);
-		conv.Val(maxAge);	
-		maxAge = maxAge * KDefaultInterval;
-		}
-    CDbColSet* columns = cacheTableView.ColSetL();
-    CleanupStack::PushL(columns);
-	//write stream
-	RDbColWriteStream writeStream;
-	//start insertion into the view
-	//insert a new row
-	cacheTableView.InsertL();
-	//set values
-	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), ECatagory);
-	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
-	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
-	cacheTableView.SetColL(columns->ColNo(KItemCount), countItems);
-	//to be set only if available
-	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),aResponseHeaders.iLastModified);
-	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
-	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
-	//open stream
-	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
-	for(TInt iter=0;iter<countItems;iter++)
-		{
-		aPtrCategory[iter]->ExternalizeL(writeStream);
-		}	
-	writeStream.CommitL();
-	CleanupStack::PopAndDestroy(&writeStream);
-	cacheTableView.PutL();
-	CleanupStack::PopAndDestroy(columns);
-	CleanupStack::PopAndDestroy(&cacheTableView);
-	CloseDb();
-	IRLOG_DEBUG( "IRCacheMgmt::CacheCategoryItemsL - Exiting." );
-	
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CacheChannelItemsL()
-// Caches the channel objects array of data.By externalizing it into a file..
-// ---------------------------------------------------------------------------
-//
-
-EXPORT_C void CIRCacheMgmt::CacheChannelItemsL(CArrayPtrFlat<CIRBrowseChannelItems>& aPtrChannel,
-											   const TDesC& aName,const CIRHttpResponseData& aResponseHeaders)
-	{
-	//Algo****
-	//1.check if similar request is cached
-	//2.delete if similar request is already present
-	//3.prepare a view for insertion
-	//4.push in the cached data request as serialized data
-	IRLOG_DEBUG( "CIRCacheMgmt::CacheChannelItemsL - Entering" );
-
-	TInt error = OpenCacheDb();
-	if(KErrNone != error)
-		{
-		//no problems if this function returns here.
-		//normal flow won't get affected.
-		//only a particular request wont get cached
-		return;	
-		}
-	
-	//convert the id information of descriptor to int value for comparision
-	//clear data from the cache table before updating it with fresh data
-	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
-	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
-	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDataIdCol().Length() +
-									KDefaultRealWidth + aName.Length());
-	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EChannels,&KDataIdCol,&aName);
-	iCacheDb.Begin();
-	//deletes a similar record if it existed.
-	//no problem if it did not exist
-	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
-	CleanupStack::PopAndDestroy(sqlQuery);
-	iCacheDb.Commit();
-	
-	//get the cached data view for preset column to update with fresh data.
-	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
-	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
-	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDefaultRealWidth);
-	RDbView cacheTableView;
-	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,EChannels);	
-	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
-	CleanupStack::PopAndDestroy(sqlQuery1);
-	CleanupClosePushL(cacheTableView);
-	
-	User::LeaveIfError(cacheTableView.EvaluateAll());
-
-	//prepare insertion values
-	//will go into last accessed aswell as the creation time fields
-	TTime currentTime;
-	currentTime.UniversalTime();
-	TInt countItems=aPtrChannel.Count();
-	TInt maxAge;
-	if(aResponseHeaders.iMaxAge.Length() == 0)
-		{
-		maxAge=iTrustPeriod.Int();
-		}
-	else
-		{
-		TLex8 conv(aResponseHeaders.iMaxAge);
-		conv.Val(maxAge);	
-		maxAge = maxAge * KDefaultInterval;
-		}
-	TBuf<KHttpDateLength>lastModified;
-
-    CDbColSet* columns = cacheTableView.ColSetL();
-    CleanupStack::PushL(columns);
-	//write stream
-	RDbColWriteStream writeStream;
-	
-	//start insertion into the view
-	//insert a new row
-	cacheTableView.InsertL();
-	//set values
-	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), EChannels);
-	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
-	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
-	cacheTableView.SetColL(columns->ColNo(KItemCount), countItems);
-	//to be set only if available
-	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),aResponseHeaders.iLastModified);
-	//
-	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
-	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
-	//open stream
-	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
-	for(TInt iter=0;iter<countItems;iter++)
-		{
-		aPtrChannel[iter]->ExternalizeL(writeStream);
-		}	
-	writeStream.CommitL();
-	CleanupStack::PopAndDestroy(&writeStream);
-	cacheTableView.PutL();
-	CleanupStack::PopAndDestroy(columns);
-	CleanupStack::PopAndDestroy(&cacheTableView);
-	CloseDb();
-	IRLOG_DEBUG( "CIRCacheMgmt::CacheChannelItemsL - Exiting." );
-	
-	}
-
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CachePresetItemL()
-// Caches the preset object .By externalizing it into a file.
-//multiple presets can be cached at one time
-// ---------------------------------------------------------------------------
-//
-
-EXPORT_C void CIRCacheMgmt::CachePresetItemL(CArrayPtrFlat<CIRIsdsPreset>& aPtrPresets,
-				const TDesC& aName,const CIRHttpResponseData& aResponseHeaders)
-	{
-	//Algo****
-	//1.check if similar request is cached
-	//2.delete if similar request is already present
-	//3.prepare a view for insertion
-	//4.push in the cached data request as serialized data
-	IRLOG_DEBUG( "CIRCacheMgmt::CachePresetItemL - Entering" );
-
-	TInt error = OpenCacheDb();
-	if(KErrNone != error)
-		{
-		//no problems if this function returns here.
-		//normal flow won't get affected.
-		//only a particular request wont get cached
-		return;	
-		}
-	//convert the id information of descriptor to int value for comparision
-	//clear data from the cache table before updating it with fresh data
-	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
-	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
-	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDataIdCol().Length() +
-									KDefaultRealWidth + aName.Length());
-	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EPresets,&KDataIdCol,&aName);
-	iCacheDb.Begin();
-	//deletes a similar record if it existed.
-	//no problem if it did not exist
-	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
-	CleanupStack::PopAndDestroy(sqlQuery);
-	iCacheDb.Commit();
-	
-	//get the cached data view for preset column to update with fresh data.
-	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
-	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
-	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDefaultRealWidth);
-	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,EPresets);	
-	RDbView cacheTableView;
-	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
-	CleanupStack::PopAndDestroy(sqlQuery1);
-	CleanupClosePushL(cacheTableView);
-	
-	User::LeaveIfError(cacheTableView.EvaluateAll());
-
-	//prepare insertion values
-	//will go into last accessed aswell as the creation time fields
-	TTime currentTime;
-	currentTime.UniversalTime();
-	
-	TInt maxAge;
-	if(aResponseHeaders.iMaxAge.Length()== 0)
-		{
-		maxAge=iTrustPeriod.Int();
-		}
-	else
-		{
-		TLex8 conv(aResponseHeaders.iMaxAge);
-		conv.Val(maxAge);	
-		maxAge = maxAge * KDefaultInterval;
-		}
-	TBuf<KHttpDateLength>lastModified;
-	//default time set to 24hrs
-	//use iTrustPeriod
-	//type set to EPresets
-	//id set to dataId
-	//last modified time kept null
-	//item count set to 1
-    CDbColSet* columns = cacheTableView.ColSetL();
-    CleanupStack::PushL(columns);
-	//write stream
-	RDbColWriteStream writeStream;
-	TInt countItems;
-	countItems = aPtrPresets.Count();
-	//start insertion into the view
-	//insert a new row
-	cacheTableView.InsertL();
-	//set values
-	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), EPresets);
-	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
-	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
-	cacheTableView.SetColL(columns->ColNo(KItemCount), countItems);
-	//to be set only if available
-	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),
-		aResponseHeaders.iLastModified);
-	//
-	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
-	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
-	//open stream
-	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
-	for(TInt iter=0;iter<countItems;iter++)
-		{
-		aPtrPresets[iter]->ExternalizeL(writeStream);
-		}
-	writeStream.CommitL();
-	CleanupStack::PopAndDestroy(&writeStream);
-	cacheTableView.PutL();
-		
-	CleanupStack::PopAndDestroy(columns);
-	CleanupStack::PopAndDestroy(&cacheTableView);
-	CloseDb();
-	IRLOG_DEBUG( "CIRCacheMgmt::CachePresetItemL - Exiting." );
-	}
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CacheOtaInfoL()
-// Caches the OTA information  .By externalizing it into a db.
-// ---------------------------------------------------------------------------
-//
-
-EXPORT_C void CIRCacheMgmt::CacheOtaInfoL(const CIROTAUpdate& aOta,const TDesC& aName,
-										const CIRHttpResponseData& aResponseHeaders)
-	{
-	//Algo****
-	//1.check if similar request is cached
-	//2.delete if similar request is already present
-	//3.prepare a view for insertion
-	//4.push in the cached data request as serialized data
-	IRLOG_DEBUG( "CIRCacheMgmt::CacheOtaInfoL - Entering" );
-
-	TInt error = OpenCacheDb();
-	if(KErrNone != error)
-		{
-		//no problems if this function returns here.
-		//normal flow won't get affected.
-		//only a particular request wont get cached
-		return;	
-		}
-	//convert the id information of descriptor to int value for comparision
-	//clear data from the cache table before updating it with fresh data
-	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
-	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
-	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDataIdCol().Length() +
-									KDefaultRealWidth + aName.Length());
-	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EOtaInfo,&KDataIdCol,&aName);
-	User::LeaveIfError(iCacheDb.Begin());
-	//deletes a similar record if it existed.
-	//no problem if it did not exist
-	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
-	CleanupStack::PopAndDestroy(sqlQuery);
-	iCacheDb.Commit();
-	
-	//get the cached data view for preset column to update with fresh data.
-	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
-	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
-	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDefaultRealWidth);
-	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,EOtaInfo);	
-	RDbView cacheTableView;
-	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
-	CleanupStack::PopAndDestroy(sqlQuery1);
-	CleanupClosePushL(cacheTableView);
-	
-	User::LeaveIfError(cacheTableView.EvaluateAll());
-
-	//prepare insertion values
-	//will go into last accessed aswell as the creation time fields
-	TTime currentTime;
-	currentTime.UniversalTime();
-	
-	TInt maxAge;
-	if(aResponseHeaders.iMaxAge.Length()== 0)
-		{
-		maxAge=iTrustPeriod.Int();
-		}
-	else
-		{
-		TLex8 conv(aResponseHeaders.iMaxAge);
-		conv.Val(maxAge);	
-		maxAge = maxAge * KDefaultInterval;
-		}
-	TBuf<KHttpDateLength>lastModified;
-	//default time set to 24hrs
-	//use iTrustPeriod
-	//type set to EPresets
-	//id set to dataId
-	//last modified time kept null
-	//item count set to 1
-    CDbColSet* columns = cacheTableView.ColSetL();
-    CleanupStack::PushL(columns);
-	//write stream
-	RDbColWriteStream writeStream;
-	//start insertion into the view
-	//insert a new row
-	cacheTableView.InsertL();
-	//set values
-	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), EOtaInfo);
-	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aName);
-	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
-	cacheTableView.SetColL(columns->ColNo(KItemCount), 1);
-	//to be set only if available
-	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),
-		aResponseHeaders.iLastModified);
-	//
-	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
-	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
-	//open stream
-	writeStream.OpenLC(cacheTableView,columns->ColNo(KCachedDataCol));
-	aOta.ExternalizeL(writeStream);
-	writeStream.CommitL();
-	CleanupStack::PopAndDestroy(&writeStream);
-	cacheTableView.PutL();
-		
-	CleanupStack::PopAndDestroy(columns);
-	CleanupStack::PopAndDestroy(&cacheTableView);
-	CloseDb();
-	IRLOG_DEBUG( "CIRCacheMgmt::CacheOtaInfoL - Exiting." );
-	}
-	
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CacheLogoL()
-// Caches the logo data  .By externalizing it into a db.
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRCacheMgmt::CacheLogoL(const TDesC8& aData, const TDesC& aUrl,
-	                         const CIRHttpResponseData& aResponseHeaders)
-	{
-	//Algo****
-	//1.check if similar request is cached
-	//2.delete if similar request is already present
-	//3.prepare a view for insertion
-	//4.push in the cached data request as serialized data
-	IRLOG_DEBUG( "CIRCacheMgmt::CacheLogoL - Entering" );
-	
-	
-	TInt error = OpenCacheDb();
-	if(KErrNone != error)
-		{
-		//no problems if this function returns here.
-		//normal flow won't get affected.
-		//only a particular request wont get cached
-		return;	
-		}
-	//convert the id information of descriptor to int value for comparision
-	//clear data from the cache table before updating it with fresh data
-	//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
-	_LIT(query,"DELETE FROM %S WHERE %S = %d AND %S = '%S'");
-	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDataIdCol().Length() +
-									KDefaultRealWidth + aUrl.Length());
-	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,ELogo,&KDataIdCol,&aUrl);
-	iCacheDb.Begin();
-	//deletes a similar record if it existed.
-	//no problem if it did not exist
-	iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
-	CleanupStack::PopAndDestroy(sqlQuery);
-	iCacheDb.Commit();	
-	
-	//get the cached data view for preset column to update with fresh data.
-	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE
-	_LIT(query1,"SELECT * FROM %S WHERE %S = %d");
-	HBufC* sqlQuery1 = HBufC::NewLC(query1().Length() + KDataTypeCol().Length() +
-									KCacheTable().Length() + KDefaultRealWidth);
-	sqlQuery1->Des().Format(query1,&KCacheTable,&KDataTypeCol,ELogo);	
-	RDbView cacheTableView;
-	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery1));
-	CleanupStack::PopAndDestroy(sqlQuery1);
-	CleanupClosePushL(cacheTableView);
-	
-	User::LeaveIfError(cacheTableView.EvaluateAll());		
-	
-	//prepare insertion values
-	//will go into last accessed aswell as the creation time fields
-	TTime currentTime;
-	currentTime.UniversalTime();
-	
-	TInt maxAge;
-	if(aResponseHeaders.iMaxAge.Length()== 0)
-		{
-		maxAge=iTrustPeriod.Int();
-		}
-	else
-		{
-		TLex8 conv(aResponseHeaders.iMaxAge);
-		conv.Val(maxAge);	
-		maxAge = maxAge * KDefaultInterval;
-		}
-	TBuf<KHttpDateLength>lastModified;
-	//default time set to 24hrs
-	//use iTrustPeriod
-	//type set to ELogo
-	//id set to dataId
-	//last modified time kept null
-	//item count set to 1
-    CDbColSet* columns = cacheTableView.ColSetL();
-    CleanupStack::PushL(columns);
-	//write stream
-	//start insertion into the view
-	//insert a new row
-	cacheTableView.InsertL();
-	//set values
-	cacheTableView.SetColL(columns->ColNo(KDataTypeCol), ELogo);
-	cacheTableView.SetColL(columns->ColNo(KDataIdCol), aUrl);
-	cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
-	cacheTableView.SetColL(columns->ColNo(KItemCount), 1);
-	//to be set only if available
-	cacheTableView.SetColL(columns->ColNo(KLastModifiedCol),
-		aResponseHeaders.iLastModified);
-	//
-	cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
-	cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
-	cacheTableView.SetColL(columns->ColNo(KCachedDataCol), aData);
-	
-	cacheTableView.SetColL(columns->ColNo(KETagHeader), 
-	    aResponseHeaders.iETag);
-	
-	cacheTableView.PutL();
-
-		
-	CleanupStack::PopAndDestroy(columns);
-	CleanupStack::PopAndDestroy(&cacheTableView);
-	CloseDb();
-	IRLOG_DEBUG( "CIRCacheMgmt::CacheLogoL - Exiting." );					
-			
-	}
-	
-	
-	
-	
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CreateCacheTableL()
-// creates the cache table
-// ---------------------------------------------------------------------------
-//
-//CacheTable
-// -----------------------------------------------------------------------------------------------------
-//| RowIndex|DataType|DataId|TrustPeriod|LastModified  |LastAccessed|Created|ItemCount|CachedData|
-//------------------------------------------------------------------------------------------------
-//| auto    |TInt    |DesC  |TInt       |TDesC/DateTime|TTime       |Time   |TInt     | Streamed |
-//|increment|0,1,2,NotNull|NotNull|  NotNull  |              |            |       |         | Data     |
-//------------------------------------------------------------------------------------------------------
-void CIRCacheMgmt::CreateCacheTableL()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::CreateCacheTableL - Entering." );
-	//the row index column which autoincrements
-	TDbCol rowIndexCol(KRowIndexCol, EDbColInt32);   
-    rowIndexCol.iAttributes = TDbCol::EAutoIncrement;
-    
-    //the datatype column,to identify between 	ECatagory = 0,EChannels=1,EPresets=2
-    TDbCol dataTypeCol(KDataTypeCol, EDbColInt32);
-    dataTypeCol.iAttributes = TDbCol::ENotNull;
-     
-    //the dataID column,to uniquely identify the cached data
-    TDbCol dataId(KDataIdCol, EDbColLongText16);
-    dataId.iAttributes = TDbCol::ENotNull; 
-    
-    //the trust period column to calculate cache validity
-    TDbCol trustPeriodCol(KTrustPeriodCol, EDbColInt32);
-    
-    //the lastmodified column to fetch data conditionally
-    TDbCol lastModifiedCol(KLastModifiedCol, EDbColDateTime);
-
-    
-    //the last accessed column used for table clean-up
-    TDbCol creationTimeCol(KTimeCreation, EDbColDateTime);
-	    
-    //the time of creation saved to calculate the cache validity
-    TDbCol lastAccessedCol(KLastAccessedCol, EDbColDateTime);
-    
-	//the number of items in the data field
-    TDbCol itemCountCol(KItemCount, EDbColInt32);
-    
-    //the data column to store cached data
-    //The column stores a potentially large amount of Unicode text data.
-    TDbCol cachedDataCol(KCachedDataCol, EDbColLongText8);
-    
-    //the ETag header received along with the logo data
-    TDbCol etagHeader(KETagHeader, EDbColText8);
-    
-    //colset
-    CDbColSet* cacheTablerColSet = CDbColSet::NewLC();
-    //populate colset
-	 cacheTablerColSet->AddL(rowIndexCol);
-	 cacheTablerColSet->AddL(dataTypeCol);
-	 cacheTablerColSet->AddL(dataId);
-	 cacheTablerColSet->AddL(trustPeriodCol);
-	 cacheTablerColSet->AddL(lastModifiedCol);
-	 cacheTablerColSet->AddL(creationTimeCol);
-	 cacheTablerColSet->AddL(lastAccessedCol);
-	 cacheTablerColSet->AddL(itemCountCol);
-	 cacheTablerColSet->AddL(cachedDataCol);
-	 cacheTablerColSet->AddL(etagHeader);
-
-    // Create the CacheTable table
-    User::LeaveIfError(iCacheDb.CreateTable(KCacheTable, *cacheTablerColSet));
-    
-    CleanupStack::PopAndDestroy(cacheTablerColSet);	
-    IRLOG_DEBUG( "IRCacheMgmt::CreateCacheTableL - Exiting." );
-	}
-	
-// ---------------------------------------------------------------------------
-// Function : CIRCacheMgmt::CreateCacheIndexL()
-// creates the indices for cache table
-// ---------------------------------------------------------------------------
-//
-void CIRCacheMgmt::CreateCacheIndexL()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::CreateCacheIndexL - Entering." );
-	TDbKeyCol rowIndexCol(KRowIndexCol);
-	TDbKeyCol dataTypeCol(KDataTypeCol);
-	TDbKeyCol dataIdCol(KDataIdCol,KDataIdIndexSize);
-	TDbKeyCol timeCreationCol(KTimeCreation);
-	TDbKeyCol lastAccessedCol(KLastAccessedCol);
-	 
-	CDbKey* index;
-	//index on the auto increment row id
-	index = CDbKey::NewLC();   
-	index->AddL(rowIndexCol);
-	User::LeaveIfError(iCacheDb.CreateIndex(KRowIndexColIndex, KCacheTable,
-		 *index));
-	CleanupStack::PopAndDestroy(index);
-	
-	//index on the datatype column
-	index = CDbKey::NewLC();   
-	index->AddL(dataTypeCol);
-	User::LeaveIfError(iCacheDb.CreateIndex(KDataTypeColIndex, KCacheTable, 
-		*index));
-	CleanupStack::PopAndDestroy(index);
-	
-	//index on the data id column
-	index = CDbKey::NewLC();   
-	index->AddL(dataIdCol);
-	User::LeaveIfError(iCacheDb.CreateIndex(KDataIdColIndex, KCacheTable, 
-		*index));
-	CleanupStack::PopAndDestroy(index);
-	
-	//index on the time of record creation column
-	index = CDbKey::NewLC();   
-	index->AddL(timeCreationCol);
-	User::LeaveIfError(iCacheDb.CreateIndex(KTimeCreationIndex, KCacheTable, 
-		*index));
-	CleanupStack::PopAndDestroy(index);
-	
-	//index on the last accessed column
-	index = CDbKey::NewLC();   
-	index->AddL(lastAccessedCol);
-	User::LeaveIfError(iCacheDb.CreateIndex(KLastAccessedColIndex, KCacheTable,
-		 *index));
-	CleanupStack::PopAndDestroy(index);
-	IRLOG_DEBUG( "IRCacheMgmt::CreateCacheIndexL - Exiting." );
-	}
-// ---------------------------------------------------------------------------
-//void CIRCacheMgmt::UpdateTrustPeriod()
-//updates the trust period for a not-modified responce
-// ---------------------------------------------------------------------------
-
-//
-EXPORT_C void CIRCacheMgmt::UpdateTrustPeriodL(	TInt aType, const TDesC& aName,
-	CIRHttpResponseData& aResponseHeaders)
-	{	
-	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriodL - Entering" );
-	TInt error = OpenCacheDb();
-	if(KErrNone != error)
-		{
-	    IRLOG_ERROR2( "IRCacheMgmt::UpdateTrustPeriodL - Error while opening cache DB (%d).", error );			
-		//no problems if this function returns here.
-		//normal flow won't get affected.
-		//only a particular request wont get cached
-		return;	
-		}
-
-	//SELECT * FROM KCacheTable WHERE KDataTypeCol = TYPE AND KDataIdCol = DATAID 
-	_LIT(query,"SELECT * FROM %S WHERE %S = %d AND %S = '%S'");
-	HBufC* sqlQuery = HBufC::NewLC(query().Length() + KCacheTable().Length() +
-		 KDataIdCol().Length() + KDataTypeCol().Length() + aName.Length()+
-		 KDefaultRealWidth );
-		 
-	sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,aType,&KDataIdCol,&aName);
-	//create view
-	RDbView cacheTableView;
-	User::LeaveIfError(cacheTableView.Prepare(iCacheDb,*sqlQuery));
-	CleanupStack::PopAndDestroy(sqlQuery);
-	CleanupClosePushL(cacheTableView);
-	
-	User::LeaveIfError(cacheTableView.EvaluateAll());
-	
-	//prepare the update data
-	//will go into last accessed aswell as the creation time fields
-	TTime currentTime;
-	currentTime.UniversalTime();
-	//get the new trust period from the headers
-	TInt maxAge;
-	if(aResponseHeaders.iMaxAge.Length() == 0)
-		{
-		maxAge=iTrustPeriod.Int();
-		}
-	else
-		{
-		TLex8 conv(aResponseHeaders.iMaxAge);
-		conv.Val(maxAge);	
-		maxAge = maxAge * KDefaultInterval;
-		}
-    CDbColSet* columns = cacheTableView.ColSetL();
-    CleanupStack::PushL(columns);
-	cacheTableView.FirstL();
-	if(cacheTableView.AtRow())
-		{
-		cacheTableView.UpdateL();
-		//update values
-		cacheTableView.SetColL(columns->ColNo(KTrustPeriodCol), maxAge);
-		cacheTableView.SetColL(columns->ColNo(KLastAccessedCol), currentTime);
-		cacheTableView.SetColL(columns->ColNo(KTimeCreation), currentTime);
-		cacheTableView.PutL();
-		}
-
-	CleanupStack::PopAndDestroy(columns);
-	CleanupStack::PopAndDestroy(&cacheTableView);
-	CloseDb();
-	IRLOG_DEBUG( "IRCacheMgmt::UpdateTrustPeriod - Exiting." );	
-	}
-	
-// ---------------------------------------------------------------------------
-//  Used to dcontrol the cache table size by compacting and clearing up unused items
-// ---------------------------------------------------------------------------
-//
- void CIRCacheMgmt::CheckSizeL()
- 	{
- 	IRLOG_DEBUG( "IRCacheMgmt::CheckSizeL - Entering." );
- 	OpenCacheDb();
- 	RDbDatabase::TSize dbSize = iCacheDb.Size();
- 	iCacheDbSize = dbSize.iSize;
- 	TInt size = CacheSize();
- 	if( size >= KCacheCriticalSizeLimit )
- 		{
- 		RemoveOldUnusedDataL();
- 		OpenCacheDb();
- 		iCacheDb.Compact();
- 		//refresh the size information
- 		dbSize = iCacheDb.Size();
- 		iCacheDbSize = dbSize.iSize;
- 		}
-	CloseDb();
-	IRLOG_DEBUG( "IRCacheMgmt::CheckSizeL - Exiting." );
- 	}
-
-// ---------------------------------------------------------------------------
-// Used to control the cache table size by compacting and clearing up unused items
-// ---------------------------------------------------------------------------
-//
-void CIRCacheMgmt::RemoveOldUnusedDataL()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::RemoveOldUnusedDataL - Entering." );
-	OpenCacheDb();
-	RDbTable cacheTable;
-	//open the table in updatable mode
-	User::LeaveIfError(cacheTable.Open(iCacheDb, KCacheTable, cacheTable.EUpdatable));
-	CleanupClosePushL(cacheTable);
-	cacheTable.Reset();
-	//set index as the last accessed time
-	cacheTable.SetIndex(KLastAccessedCol);
-	//begin transaction
-	iCacheDb.Begin();
-	// no of rows deleted is one fourth of the total number of rows
-	TInt deleteRows = cacheTable.CountL()/KPercentRowsDeleted;
-	TInt inc = 0;
-	//delete incrementally
-	for(cacheTable.FirstL();((inc < deleteRows) && cacheTable.AtRow());inc++)
-		{
-		cacheTable.GetL();
-		cacheTable.DeleteL();
-		cacheTable.NextL();
-		}
-	//commit transaction
-	iCacheDb.Commit();
-	CleanupStack::PopAndDestroy(&cacheTable);
-	CloseDb();
-	IRLOG_DEBUG( "IRCacheMgmt::RemoveOldUnusedDataL - Exiting." );
-	}
-	
-// ---------------------------------------------------------------------------
-// Used to get the cache table size
-// ---------------------------------------------------------------------------
-//
-TInt CIRCacheMgmt::CacheSize()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::CacheSize - Entering." );
-	OpenCacheDb();
- 	RDbDatabase::TSize dbSize = iCacheDb.Size();
- 	iCacheDbSize = dbSize.iSize;
- 	CloseDb();
- 	IRLOG_DEBUG( "IRCacheMgmt::CacheSize - Exiting." );
-	return iCacheDbSize;
-	}
-// ---------------------------------------------------------------------------
-//remove OTA info from cache if data is not valid any longer
-// ---------------------------------------------------------------------------
-EXPORT_C void CIRCacheMgmt::RemoveOtaInfoL()
-	{
-	IRLOG_DEBUG( "IRCacheMgmt::RemoveOtaInfoL - Entering." );
-	//check if the silence period param is set.
-	//if not set that means the cached ota info if present is not valid.
-	if(iSettings->GetSilencePeriodL() == 0)
-		{
-		TInt error = OpenCacheDb();
-		if(KErrNone != error)
-			{
-			//no problems if this function returns here.
-			//normal flow won't get affected.
-			//only a particular request wont get cached
-			return;	
-			}
-		//clear data from the cache table 
-		//DELETE FROM KCacheTable WHERE KDataTypeCol = TYPE 
-		_LIT(query,"DELETE FROM %S WHERE %S = %d");
-		HBufC* sqlQuery = HBufC::NewLC(query().Length() + KDataTypeCol().Length() +
-										KCacheTable().Length() + KDataIdCol().Length());
-		sqlQuery->Des().Format(query,&KCacheTable,&KDataTypeCol,EOtaInfo);
-		User::LeaveIfError(iCacheDb.Begin());
-		//no problem if it did not exist
-		iCacheDb.Execute(*sqlQuery,EDbCompareNormal);
-		CleanupStack::PopAndDestroy(sqlQuery);
-		iCacheDb.Commit();
-        CloseDb();
-		}
-	IRLOG_DEBUG( "IRCacheMgmt::RemoveOtaInfoL - Exiting." );
-	}
-
-
-
-// ---------------------------------------------------------------------------
-// Adds a cache observer
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRCacheMgmt::AddObserverL( MIRCacheObserver* aObserver )
-    {
-    IRLOG_DEBUG( "IRCacheMgmt::AddObserverL - Entering." );
-    iCacheObservers.AppendL( aObserver );
-    IRLOG_DEBUG( "IRCacheMgmt::AddObserverL - Exiting." );
-    }
-
-// ---------------------------------------------------------------------------
-// Removes a cache observer
-// ---------------------------------------------------------------------------
-//
-EXPORT_C void CIRCacheMgmt::RemoveObserver( MIRCacheObserver* aObserver )
-    {
-    IRLOG_DEBUG( "IRCacheMgmt::RemoveObserver - Entering." );
-    TInt objectIndex = iCacheObservers.Find( aObserver );
-    
-    if ( objectIndex != KErrNotFound )
-        {
-        iCacheObservers.Remove( objectIndex );
-        }
-    IRLOG_DEBUG( "IRCacheMgmt::RemoveObserver - Exiting." );
-    }
-
-
-
-