--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmsmscache.cpp Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2007-2008 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:
+*
+*/
+
+
+
+// EXTERNAL RESOURCES
+
+// Include Files
+#include <ctsy/rmmcustomapi.h>
+#include "cmmsmscache.h"
+#include "tsylogger.h"
+#include "tisi.h"
+#include <smsisi.h>
+#include "osttracedefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cmmsmscachetraces.h"
+#endif
+
+// External Data Structures
+// none
+
+// External Function Prototypes
+// none
+
+// LOCAL CONSTANTS AND MACROS
+// none
+
+// MODULE DATA STRUCTURES
+
+// Local Data Structures
+// none
+
+// Local Function Prototypes
+// none
+
+// LOCAL FUNCTIONS
+// none
+
+// MEMBER FUNCTIONS
+
+//=============================================================================
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::CMmSmsCache
+// Creates new CMmSmsCache object
+// -----------------------------------------------------------------------------
+//
+CMmSmsCache::CMmSmsCache()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::CMmSmsCache");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_CMMSMSCACHE, "CMmSmsCache::CMmSmsCache" );
+ Reset();
+ // If SIM is offline,then won't get
+ // sim ready completion and cache error state stays as
+ // KErrNotFound. If user accesses SIM SMS --> immediate complete
+ // with KErrNotFound
+ SetStatus( KErrNotFound );
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::~CMmSmsCache
+// delete CMmSmsCache
+// -----------------------------------------------------------------------------
+//
+CMmSmsCache::~CMmSmsCache()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::~CMmSmsCache");
+OstTrace0( TRACE_NORMAL, DUP1_CMMSMSCACHE_CMMSMSCACHE, "CMmSmsCache::~CMmSmsCache" );
+ Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Reset
+// reset cache to not ready state
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::Reset()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::Reset");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_RESET, "CMmSmsCache::Reset" );
+
+ iError = KErrNotReady;
+ iDeleteLocation = 0;
+
+ for ( TInt i = 0; i < iElements.Count(); i++ )
+ {
+ delete iElements[i];
+ iElements[i] = NULL;
+ }
+ iElements.Reset();
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::UsedEntries
+// get the number of used entries from cache
+// -----------------------------------------------------------------------------
+//
+TInt CMmSmsCache::UsedEntries()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::UsedEntries");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_USEDENTRIES, "CMmSmsCache::UsedEntries" );
+ TInt count( 0 );
+ for ( TInt i = 0; i < iElements.Count(); i++ )
+ {
+ if ( iElements[i] )
+ {
+ count++;
+ }
+ }
+ return count;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::TotalEntries
+// get the total number of entries in SIM
+// -----------------------------------------------------------------------------
+//
+TInt CMmSmsCache::TotalEntries()
+ {
+TFLOGSTRING2("TSY: CMmSmsCache::TotalEntries: %d",iElements.Count());
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_TOTALENTRIES, "CMmSmsCache::TotalEntries;iElements.Count=%d", iElements.Count() );
+ return iElements.Count();
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Status
+// Returns cache status, this can be KErrNotReady (cache is being read)
+// KErrNone (cache is ok and can be used)
+// any other (cache is in error state and is unusable)
+// -----------------------------------------------------------------------------
+//
+TInt CMmSmsCache::Status()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::Status");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_STATUS, "CMmSmsCache::Status" );
+ return iError;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::SetStatus
+// set cache error state
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::SetStatus( TInt aError )
+ {
+TFLOGSTRING2("TSY: CMmSmsCache::SetStatus %d", aError);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_SETSTATUS, "CMmSmsCache::SetStatus;aError=%d", aError );
+ iError = aError;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::SetTotalEntriesL
+// initialize cache to contain aTotal number of empty entries
+// it is assumed that cache is Reset before call to this..
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::SetTotalEntriesL( TInt aTotal )
+ {
+TFLOGSTRING2("TSY: CMmSmsCache::SetTotalEntriesL %d", aTotal);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_SETTOTALENTRIESL, "CMmSmsCache::SetTotalEntriesL;aTotal=%d", aTotal );
+
+ RMobileSmsStore::TMobileGsmSmsEntryV1* element = NULL;
+ for ( TInt i = 0; i < aTotal; i++ )
+ {
+ iElements.AppendL( element );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::AddEntryL
+// adds new entry to cache, if the cause of isi msg is not
+// ok, then we add just a null pointer (to save space)
+// returns true if element was cache and false
+// if cache location is empty
+// -----------------------------------------------------------------------------
+//
+TBool CMmSmsCache::AddEntryL(
+ const RMobileSmsStore::TMobileGsmSmsEntryV1* aEntry,
+ const TUint8 aRecordId )
+ {
+TFLOGSTRING("TSY: CMmSmsCache::AddEntryL");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_ADDENTRYL, "CMmSmsCache::AddEntryL" );
+
+ if ( 0 < iElements.Count() )
+ {
+ delete iElements[aRecordId - 1];
+ iElements[aRecordId - 1] = NULL;
+ }
+
+ // If the location is non-empty (filled with 0xFF (3GPP TS 31.102
+ // 4.2.25 EFSMS (Short messages)))
+
+ if ( EMPTY_LOCATION != aEntry->iMsgStatus )
+ {
+ // Make a copy of the received SIM SMS.
+ // Reserve heap memory; can leave if out of mem.
+ RMobileSmsStore::TMobileGsmSmsEntryV1* tmpBuf =
+ new( ELeave ) RMobileSmsStore::TMobileGsmSmsEntryV1;
+ *tmpBuf = *aEntry;
+ // copy data
+ iElements[aRecordId - 1] = tmpBuf;
+
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::GetEntry
+// get entry from cache, returns null if cache doesn't c;ontain
+// valid entry in the given location location range is in range
+// [1... max sim sms slots]
+// -----------------------------------------------------------------------------
+//
+RMobileSmsStore::TMobileGsmSmsEntryV1* CMmSmsCache::GetEntry( TInt aLocation )
+ {
+TFLOGSTRING2("TSY: CMmSmsCache::GetEntry - location: %d", aLocation);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_GETENTRY, "CMmSmsCache::GetEntry;aLocation=%d", aLocation );
+ RMobileSmsStore::TMobileGsmSmsEntryV1* smsData = NULL;
+ if ( aLocation <= iElements.Count() && aLocation >= 1 )
+ {
+ if ( iElements[aLocation-1] )
+ {
+ RMobileSmsStore::TMobileGsmSmsEntryV1* tempHBuf(
+ iElements[aLocation-1] );
+ smsData = tempHBuf;
+ }
+ }
+ return smsData;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::FirstFreeLocation
+// return first free location in range [1... max sim sms slots]
+// or zero if no free slots are found
+// -----------------------------------------------------------------------------
+//
+TUint CMmSmsCache::FirstFreeLocation()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::FirstFreeLocation");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_FIRSTFREELOCATION, "CMmSmsCache::FirstFreeLocation" );
+ TInt location( 0 );
+ for ( TInt i = 0; i < iElements.Count(); i++ )
+ {
+ if ( !iElements[i] )
+ {
+ location = i + 1;
+ i = iElements.Count(); // exit loop
+ }
+ }
+TFLOGSTRING2("TSY: CMmSmsCache::FirstFreeLocation - found location: %d", location);
+OstTrace0( TRACE_NORMAL, DUP1_CMMSMSCACHE_FIRSTFREELOCATION, "CMmSmsCache::FirstFreeLocation" );
+ return location;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::SetDeleteLocation
+// set the location to delete by Delete()
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::SetDeleteLocation( TInt aLocation )
+ {
+TFLOGSTRING2("TSY: CMmSmsCache::SetDeleteLocation %d", aLocation);
+OstTrace1( TRACE_NORMAL, CMMSMSCACHE_SETDELETELOCATION, "CMmSmsCache::SetDeleteLocation;aLocation=%d", aLocation );
+ iDeleteLocation = aLocation;
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Delete
+// if flush location is set, then flush it
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::Delete()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::Delete");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_DELETE, "CMmSmsCache::Delete" );
+ if ( iDeleteLocation!=0 )
+ {
+ Delete( iDeleteLocation );
+ iDeleteLocation = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::Delete
+// Delete an element from cache
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::Delete( TInt aLocation )
+ {
+TFLOGSTRING2("TSY: CMmSmsCache::Delete %d", aLocation);
+OstTrace1( TRACE_NORMAL, DUP1_CMMSMSCACHE_DELETE, "CMmSmsCache::Delete;aLocation=%d", aLocation );
+
+ if ( aLocation <= iElements.Count() && aLocation >= 1 )
+ {
+ delete iElements[aLocation-1];
+ iElements[aLocation-1] = NULL;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CMmSmsCache::DeleteAll
+// empty all of cache
+// -----------------------------------------------------------------------------
+//
+void CMmSmsCache::DeleteAll()
+ {
+TFLOGSTRING("TSY: CMmSmsCache::DeleteAll");
+OstTrace0( TRACE_NORMAL, CMMSMSCACHE_DELETEALL, "CMmSmsCache::DeleteAll" );
+ for ( TInt i = 0; i < iElements.Count(); i++ )
+ {
+ delete iElements[i];
+ iElements[i] = NULL;
+ }
+ }
+
+// End of File