smsprotocols/smsstack/smsprot/Src/smspclass0stor.cpp
branchRCL_3
changeset 19 630d2f34d719
parent 0 3553901f7fa8
child 20 07a122eea281
equal deleted inserted replaced
18:17af172ffa5f 19:630d2f34d719
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    16 //
    16 //
    17 
    17 
    18 /**
    18 /**
    19  @file
    19  @file
    20 */
    20 */
       
    21 
       
    22 #include "OstTraceDefinitions.h"
       
    23 #ifdef OST_TRACE_COMPILER_IN_USE
       
    24 #include "smspclass0storTraces.h"
       
    25 #endif
       
    26 
    21 #include "smspclass0stor.h"
    27 #include "smspclass0stor.h"
    22 #include "gsmubuf.h"
    28 #include "gsmubuf.h"
    23 #include "gsmunonieoperations.h"
    29 #include "gsmunonieoperations.h"
    24 
    30 
    25 const TInt KSizeOfPreallocatedFileVersion = sizeof(CPreallocatedFile::TPreAllocatedFileVersion);
    31 const TInt KSizeOfPreallocatedFileVersion = sizeof(CPreallocatedFile::TPreAllocatedFileVersion);
    49 
    55 
    50 @internalComponent
    56 @internalComponent
    51 */
    57 */
    52 CSmsPermanentFileStore* CSmsPermanentFileStore::NewL(RFs& aFs, const TDesC& aFileName, const TUid& aThirdUid)
    58 CSmsPermanentFileStore* CSmsPermanentFileStore::NewL(RFs& aFs, const TDesC& aFileName, const TUid& aThirdUid)
    53 	{
    59 	{
    54 	LOGSMSPROT1("CSmsPermanentFileStore::NewL()");
    60 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_NEWL_1, "CSmsPermanentFileStore::NewL()");
    55 	CSmsPermanentFileStore*  self = new (ELeave) CSmsPermanentFileStore(aFs, aThirdUid);
    61 	CSmsPermanentFileStore*  self = new (ELeave) CSmsPermanentFileStore(aFs, aThirdUid);
    56 	CleanupStack::PushL(self);
    62 	CleanupStack::PushL(self);
    57 	self->ConstructL(aFileName);
    63 	self->ConstructL(aFileName);
    58 	CleanupStack::Pop(self);
    64 	CleanupStack::Pop(self);
    59 
    65 
    60 	return self;
    66 	return self;
    61 	}
    67 	}
    62 
    68 
    63 void CSmsPermanentFileStore::ConstructL(const TDesC& aFileName)
    69 void CSmsPermanentFileStore::ConstructL(const TDesC& aFileName)
    64 	{
    70 	{
    65 	LOGSMSPROT1("CSmsPermanentFileStore::ConstructL()");
    71 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_CONSTRUCTL_1, "CSmsPermanentFileStore::ConstructL()");
    66 	iFileName = aFileName.AllocL();
    72 	iFileName = aFileName.AllocL();
    67 	}
    73 	}
    68 
    74 
    69 /**
    75 /**
    70  *  Constructor.
    76  *  Constructor.
   107 
   113 
   108 @internalComponent
   114 @internalComponent
   109 */
   115 */
   110 void CSmsPermanentFileStore::CreateL()
   116 void CSmsPermanentFileStore::CreateL()
   111 	{
   117 	{
   112 	LOGSMSPROT1("CSmsPermanentFileStore::CreateL()");
   118 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_CREATEL_1, "CSmsPermanentFileStore::CreateL()");
   113 	TUidType uidtype(KPermanentFileStoreLayoutUid,KSARStoreUid,iThirdUid);
   119 	TUidType uidtype(KPermanentFileStoreLayoutUid,KSARStoreUid,iThirdUid);
   114 	iFileStore=CPermanentFileStore::ReplaceL(iFs, iFileName->Des(), EFileShareExclusive|EFileStream|EFileRead|EFileWrite);
   120 	iFileStore=CPermanentFileStore::ReplaceL(iFs, iFileName->Des(), EFileShareExclusive|EFileStream|EFileRead|EFileWrite);
   115 	iFileStore->SetTypeL(uidtype);
   121 	iFileStore->SetTypeL(uidtype);
   116 	iEntryArray.Reset();
   122 	iEntryArray.Reset();
   117 	ExternalizeEntryArrayL();
   123 	ExternalizeEntryArrayL();
   127 
   133 
   128 @internalComponent
   134 @internalComponent
   129 */
   135 */
   130 void CSmsPermanentFileStore::OpenL()
   136 void CSmsPermanentFileStore::OpenL()
   131 	{
   137 	{
   132 	LOGSMSPROT1("CSmsPermanentFileStore::OpenL()");
   138 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_OPENL_1, "CSmsPermanentFileStore::OpenL()");
   133 	iFileStore=CPermanentFileStore::OpenL(iFs,iFileName->Des(),EFileShareExclusive|EFileStream|EFileRead|EFileWrite);
   139 	iFileStore=CPermanentFileStore::OpenL(iFs,iFileName->Des(),EFileShareExclusive|EFileStream|EFileRead|EFileWrite);
   134 	InternalizeEntryArrayL();
   140 	InternalizeEntryArrayL();
   135 	}
   141 	}
   136 
   142 
   137 /**
   143 /**
   139 
   145 
   140 @internalComponent
   146 @internalComponent
   141 */
   147 */
   142 void CSmsPermanentFileStore::Close()
   148 void CSmsPermanentFileStore::Close()
   143 	{
   149 	{
   144 	LOGSMSPROT1("CSmsPermanentFileStore::Close()");
   150 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_CLOSE_1, "CSmsPermanentFileStore::Close()");
   145 	delete iFileStore;
   151 	delete iFileStore;
   146 	iFileStore = NULL;
   152 	iFileStore = NULL;
   147 	iEntryArray.Reset();
   153 	iEntryArray.Reset();
   148 	}
   154 	}
   149 
   155 
   163 */
   169 */
   164 void CSmsPermanentFileStore::CleanupEntriesWithCompactL(const CArrayFix<TSmsPreAllocatedFileStoreReassemblyEntry>& aEntryArray)
   170 void CSmsPermanentFileStore::CleanupEntriesWithCompactL(const CArrayFix<TSmsPreAllocatedFileStoreReassemblyEntry>& aEntryArray)
   165 	{
   171 	{
   166     // Ignore in code coverage - a previous CleanupEntries would need to have failed with KErrDiskFull
   172     // Ignore in code coverage - a previous CleanupEntries would need to have failed with KErrDiskFull
   167 	BULLSEYE_OFF
   173 	BULLSEYE_OFF
   168 	LOGSMSPROT1("CSmsPermanentFileStore::CleanupEntriesWithCompactL()");
   174 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_CLEANUPENTRIESWITHCOMPACTL_1, "CSmsPermanentFileStore::CleanupEntriesWithCompactL()");
   169 
   175 
   170 	iCompact = ETrue;
   176 	iCompact = ETrue;
   171 	CleanupEntriesL(aEntryArray);
   177 	CleanupEntriesL(aEntryArray);
   172 	BULLSEYE_RESTORE	
   178 	BULLSEYE_RESTORE	
   173 	}
   179 	}
   185 
   191 
   186 @internalComponent
   192 @internalComponent
   187 */
   193 */
   188 void CSmsPermanentFileStore::CleanupEntriesL(const CArrayFix<TSmsPreAllocatedFileStoreReassemblyEntry>& aEntryArray)
   194 void CSmsPermanentFileStore::CleanupEntriesL(const CArrayFix<TSmsPreAllocatedFileStoreReassemblyEntry>& aEntryArray)
   189 	{
   195 	{
   190 	LOGSMSPROT1("CSmsPermanentFileStore::CleanupEntriesL()");
   196 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_CLEANUPENTRIESL_1, "CSmsPermanentFileStore::CleanupEntriesL()");
   191 
   197 
   192 	TInt reassemblyCount = iEntryArray.Count();
   198 	TInt reassemblyCount = iEntryArray.Count();
   193 	TInt index, index2;
   199 	TInt index, index2;
   194 
   200 
   195 	for (index = 0;  index < reassemblyCount;  index++)
   201 	for (index = 0;  index < reassemblyCount;  index++)
   255 
   261 
   256 @internalComponent
   262 @internalComponent
   257 */
   263 */
   258 void CSmsPermanentFileStore::InternalizeEntryArrayL()
   264 void CSmsPermanentFileStore::InternalizeEntryArrayL()
   259 	{
   265 	{
   260 	LOGSMSPROT1("CSmsPermanentFileStore::InternalizeEntryArrayL()");
   266 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_INTERNALIZEENTRYARRAYL_1, "CSmsPermanentFileStore::InternalizeEntryArrayL()");
   261 
   267 
   262 	iEntryArray.Reset();
   268 	iEntryArray.Reset();
   263 	TStreamId headerid=iFileStore->Root();
   269 	TStreamId headerid=iFileStore->Root();
   264 	RStoreReadStream stream;
   270 	RStoreReadStream stream;
   265 	stream.OpenLC(*iFileStore,headerid);
   271 	stream.OpenLC(*iFileStore,headerid);
   278 
   284 
   279 @internalComponent
   285 @internalComponent
   280 */
   286 */
   281 void CSmsPermanentFileStore::ExternalizeEntryArrayL()
   287 void CSmsPermanentFileStore::ExternalizeEntryArrayL()
   282 	{
   288 	{
   283 	LOGSMSPROT4("CSmsPermanentFileStore::ExternalizeEntryArrayL(): this=0x%08X count=%d headerid=%d]",
   289 	OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_EXTERNALIZEENTRYARRAYL_1, "CSmsPermanentFileStore::ExternalizeEntryArrayL(): this=0x%08X count=%d headerid=%u]",(TUint) this, iEntryArray.Count(), (TUint)iFileStore->Root().Value());
   284 			 this, iEntryArray.Count(), iFileStore->Root().Value());
       
   285 
   290 
   286 	TStreamId headerid=iFileStore->Root();
   291 	TStreamId headerid=iFileStore->Root();
   287 	RStoreWriteStream stream;
   292 	RStoreWriteStream stream;
   288 	if (headerid==KNullStreamId)
   293 	if (headerid==KNullStreamId)
   289 		{
   294 		{
   328 
   333 
   329 @internalComponent
   334 @internalComponent
   330 */
   335 */
   331 void CSmsPermanentFileStore::AddNewMessageL(TInt& aIndex, CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
   336 void CSmsPermanentFileStore::AddNewMessageL(TInt& aIndex, CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
   332 	{
   337 	{
   333 	LOGSMSPROT1("CSmsPermanentFileStore::AddNewMessageL");
   338 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_ADDNEWMESSAGEL_1, "CSmsPermanentFileStore::AddNewMessageL");
   334 
   339 
   335 	CArrayFix<TInt>* indexArray=new(ELeave) CArrayFixFlat<TInt>(KFlatArrayGranularity);
   340 	CArrayFix<TInt>* indexArray=new(ELeave) CArrayFixFlat<TInt>(KFlatArrayGranularity);
   336 	CleanupStack::PushL(indexArray);
   341 	CleanupStack::PushL(indexArray);
   337 	CArrayFixFlat<TGsmSms>* smsArray=new(ELeave) CArrayFixFlat<TGsmSms>(KFlatArrayGranularity);
   342 	CArrayFixFlat<TGsmSms>* smsArray=new(ELeave) CArrayFixFlat<TGsmSms>(KFlatArrayGranularity);
   338 	CleanupStack::PushL(smsArray);
   343 	CleanupStack::PushL(smsArray);
   369 
   374 
   370 @internalComponent
   375 @internalComponent
   371 */
   376 */
   372 void CSmsPermanentFileStore::UpdateExistingMessageL(TInt aIndex, const CSmsMessage& aSmsMessage,const CArrayFix<TInt>& aIndexArray,const CArrayFix<TGsmSms>& aSmsArray)
   377 void CSmsPermanentFileStore::UpdateExistingMessageL(TInt aIndex, const CSmsMessage& aSmsMessage,const CArrayFix<TInt>& aIndexArray,const CArrayFix<TGsmSms>& aSmsArray)
   373 	{
   378 	{
   374 	LOGSMSPROT1("CSmsPermanentFileStore::UpdateExistingMessageL()");
   379 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_UPDATEEXISTINGMESSAGEL_1, "CSmsPermanentFileStore::UpdateExistingMessageL()");
   375 	TStreamId  streamid = iEntryArray[aIndex].DataStreamId();
   380 	TStreamId  streamid = iEntryArray[aIndex].DataStreamId();
   376 	ExternalizeEntryL(streamid, aSmsMessage, aIndexArray, aSmsArray);
   381 	ExternalizeEntryL(streamid, aSmsMessage, aIndexArray, aSmsArray);
   377 	TSmsReassemblyEntry entry;
   382 	TSmsReassemblyEntry entry;
   378 	CReassemblyStoreUtility::PopulateEntry(entry, aSmsMessage, aSmsArray.Count());
   383 	CReassemblyStoreUtility::PopulateEntry(entry, aSmsMessage, aSmsArray.Count());
   379 	entry.SetDataStreamId(streamid);
   384 	entry.SetDataStreamId(streamid);
   390 @internalComponent
   395 @internalComponent
   391 */
   396 */
   392 void CSmsPermanentFileStore::MatchEntryToExistingMessage(const TReassemblyEntry& aEntry,
   397 void CSmsPermanentFileStore::MatchEntryToExistingMessage(const TReassemblyEntry& aEntry,
   393 													TInt& aIndex)
   398 													TInt& aIndex)
   394 	{
   399 	{
   395 	LOGSMSPROT1("CSmsPermanentFileStore::MatchEntryToExistingMessage()");
   400 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_MATCHENTRYTOEXISTINGMESSAGE_1, "CSmsPermanentFileStore::MatchEntryToExistingMessage()");
   396 
   401 
   397 	aIndex = KErrNotFound;
   402 	aIndex = KErrNotFound;
   398 
   403 
   399 	//
   404 	//
   400 	// Search the reassembly store for a matching entry...
   405 	// Search the reassembly store for a matching entry...
   416 			aIndex = index;
   421 			aIndex = index;
   417 			break;
   422 			break;
   418 			}
   423 			}
   419 		}
   424 		}
   420 
   425 
   421 	LOGSMSPROT2("CSmsPermanentFileStore::MatchEntryToExistingMessage(): aIndex=%d", aIndex);
   426 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_MATCHENTRYTOEXISTINGMESSAGE_2, "CSmsPermanentFileStore::MatchEntryToExistingMessage(): aIndex=%d", aIndex);
   422 	}
   427 	}
   423 
   428 
   424 /*
   429 /*
   425 It updates the log server id of the message.
   430 It updates the log server id of the message.
   426 
   431 
   429 
   434 
   430 @internalComponent
   435 @internalComponent
   431 */
   436 */
   432 void CSmsPermanentFileStore::UpdateLogServerIdL(TInt& aIndex, TLogId aLogServerId)
   437 void CSmsPermanentFileStore::UpdateLogServerIdL(TInt& aIndex, TLogId aLogServerId)
   433 	{
   438 	{
   434 	LOGSMSPROT1("CSmsPermanentFileStore::UpdateLogServerIdL");
   439 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_UPDATELOGSERVERIDL_1, "CSmsPermanentFileStore::UpdateLogServerIdL");
   435 
   440 
   436 	TSmsReassemblyEntry entry;
   441 	TSmsReassemblyEntry entry;
   437 	entry = iEntryArray[aIndex];
   442 	entry = iEntryArray[aIndex];
   438 
   443 
   439 	if (entry.LogServerId() != aLogServerId)
   444 	if (entry.LogServerId() != aLogServerId)
   451 
   456 
   452 @internalComponent
   457 @internalComponent
   453 */
   458 */
   454 void CSmsPermanentFileStore::SetPassedToClientL(TInt aIndex, TBool aBool)
   459 void CSmsPermanentFileStore::SetPassedToClientL(TInt aIndex, TBool aBool)
   455 	{
   460 	{
   456 	LOGSMSPROT2("CSmsPermanentFileStore::SetPassedToClientL(): aIndex=%d", aIndex);
   461 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_SETPASSEDTOCLIENTL_1, "CSmsPermanentFileStore::SetPassedToClientL(): aIndex=%d", aIndex);
   457 
   462 
   458 	TSmsReassemblyEntry entry;
   463 	TSmsReassemblyEntry entry;
   459 	entry = iEntryArray[aIndex];
   464 	entry = iEntryArray[aIndex];
   460 
   465 
   461 	if (entry.PassedToClient() != aBool)
   466 	if (entry.PassedToClient() != aBool)
   486 
   491 
   487 @internalComponent
   492 @internalComponent
   488 */
   493 */
   489 void CSmsPermanentFileStore::ChangeEntryL(TInt aIndex,const TSmsReassemblyEntry& aNewEntry)
   494 void CSmsPermanentFileStore::ChangeEntryL(TInt aIndex,const TSmsReassemblyEntry& aNewEntry)
   490 	{
   495 	{
   491 	LOGSMSPROT2("CSmsPermanentFileStore::ChangeEntryL(): aIndex=%d", aIndex);
   496 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_CHANGEENTRYL_1, "CSmsPermanentFileStore::ChangeEntryL(): aIndex=%d", aIndex);
   492 
   497 
   493 	iEntryArray[aIndex].SetIsDeleted(ETrue);
   498 	iEntryArray[aIndex].SetIsDeleted(ETrue);
   494 	iEntryArray.InsertL(aIndex,aNewEntry);
   499 	iEntryArray.InsertL(aIndex,aNewEntry);
   495 	iEntryArray[aIndex].SetIsAdded(ETrue);
   500 	iEntryArray[aIndex].SetIsAdded(ETrue);
   496 	}
   501 	}
   518 
   523 
   519 @internalComponent
   524 @internalComponent
   520 */
   525 */
   521 void CSmsPermanentFileStore::ExternalizeEntryL(TStreamId& aStreamId,const CSmsMessage& aSmsMessage,const CArrayFix<TInt>& aIndexArray,const CArrayFix<TGsmSms>& aSmsArray)
   526 void CSmsPermanentFileStore::ExternalizeEntryL(TStreamId& aStreamId,const CSmsMessage& aSmsMessage,const CArrayFix<TInt>& aIndexArray,const CArrayFix<TGsmSms>& aSmsArray)
   522 	{
   527 	{
   523 	LOGSMSPROT2("CSmsPermanentFileStore::ExternalizeEntryL Start [sid=%d]", aStreamId.Value());
   528 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_EXTERNALIZEENTRYL_1, "CSmsPermanentFileStore::ExternalizeEntryL Start [sid=%d]", aStreamId.Value());
   524 
   529 
   525 	RStoreWriteStream writestream;
   530 	RStoreWriteStream writestream;
   526 	if (aStreamId==KNullStreamId)
   531 	if (aStreamId==KNullStreamId)
   527 		aStreamId=writestream.CreateLC(*iFileStore);
   532 		aStreamId=writestream.CreateLC(*iFileStore);
   528 	else
   533 	else
   542 		writestream << pdu;
   547 		writestream << pdu;
   543 		}
   548 		}
   544 	writestream.CommitL();
   549 	writestream.CommitL();
   545 	CleanupStack::PopAndDestroy();
   550 	CleanupStack::PopAndDestroy();
   546 
   551 
   547 	LOGSMSPROT2("CClass0PermanentFileStore::ExternalizeEntryL End [count=%d]", count);
   552 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_EXTERNALIZEENTRYL_2, "CClass0PermanentFileStore::ExternalizeEntryL End [count=%d]", count);
   548 	}
   553 	}
   549 
   554 
   550 /*
   555 /*
   551 It internalizes(reads) the entry from permanent store file.
   556 It internalizes(reads) the entry from permanent store file.
   552 
   557 
   558 @internalComponent
   563 @internalComponent
   559 */
   564 */
   560 void CSmsPermanentFileStore::InternalizeEntryL(const TInt aIndex, CSmsMessage& aSmsMessage, CArrayFix<TInt>& aIndexArray, CArrayFix<TGsmSms>& aSmsArray)
   565 void CSmsPermanentFileStore::InternalizeEntryL(const TInt aIndex, CSmsMessage& aSmsMessage, CArrayFix<TInt>& aIndexArray, CArrayFix<TGsmSms>& aSmsArray)
   561 	{
   566 	{
   562 	TSmsReassemblyEntry&  entry = iEntryArray[aIndex];
   567 	TSmsReassemblyEntry&  entry = iEntryArray[aIndex];
   563 	LOGSMSPROT2("CSmsPermanentFileStore::InternalizeEntryL Start [sid=%d]", entry.DataStreamId().Value());
   568 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_INTERNALIZEENTRYL_1, "CSmsPermanentFileStore::InternalizeEntryL Start [sid=%d]", entry.DataStreamId().Value());
   564 	RStoreReadStream readstream;
   569 	RStoreReadStream readstream;
   565 	readstream.OpenLC(*iFileStore, entry.DataStreamId());
   570 	readstream.OpenLC(*iFileStore, entry.DataStreamId());
   566 	readstream >> aSmsMessage;
   571 	readstream >> aSmsMessage;
   567 	TInt count=readstream.ReadInt32L();
   572 	TInt count=readstream.ReadInt32L();
   568 	TInt i;
   573 	TInt i;
   587 	CleanupStack::PopAndDestroy();
   592 	CleanupStack::PopAndDestroy();
   588 	//Set other properties of CSmsMessage
   593 	//Set other properties of CSmsMessage
   589 	aSmsMessage.SetStorage(entry.Storage());
   594 	aSmsMessage.SetStorage(entry.Storage());
   590 	aSmsMessage.SetLogServerId(entry.LogServerId());
   595 	aSmsMessage.SetLogServerId(entry.LogServerId());
   591 	aSmsMessage.SetTime(entry.Time());
   596 	aSmsMessage.SetTime(entry.Time());
   592 	LOGSMSPROT2("CSmsPermanentFileStore::InternalizeEntryL End [count=%d]", count);
   597 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_INTERNALIZEENTRYL_2, "CSmsPermanentFileStore::InternalizeEntryL End [count=%d]", count);
   593 	}
   598 	}
   594 
   599 
   595 /*
   600 /*
   596 It removes the PDUs from permanent store file.
   601 It removes the PDUs from permanent store file.
   597 This function is needed because after forwarding the incomplete message
   602 This function is needed because after forwarding the incomplete message
   605 
   610 
   606 @internalComponent
   611 @internalComponent
   607 */
   612 */
   608 void CSmsPermanentFileStore::RemovePDUsL(TInt aIndex, TInt aStartPos, TInt aEndPos)
   613 void CSmsPermanentFileStore::RemovePDUsL(TInt aIndex, TInt aStartPos, TInt aEndPos)
   609 	{
   614 	{
   610 	LOGSMSPROT1("CSmsPermanentFileStore::RemovePDUsL");
   615 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_REMOVEPDUSL_1, "CSmsPermanentFileStore::RemovePDUsL");
   611 
   616 
   612 	CSmsBuffer*  buffer = CSmsBuffer::NewL();
   617 	CSmsBuffer*  buffer = CSmsBuffer::NewL();
   613 	CSmsMessage*  smsMessage = CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver, buffer);
   618 	CSmsMessage*  smsMessage = CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver, buffer);
   614 	CleanupStack::PushL(smsMessage);
   619 	CleanupStack::PushL(smsMessage);
   615 
   620 
   662  *  invalid.
   667  *  invalid.
   663  *  @capability None
   668  *  @capability None
   664  */
   669  */
   665 void CSmsPermanentFileStore::BeginTransactionL()
   670 void CSmsPermanentFileStore::BeginTransactionL()
   666 	{
   671 	{
   667     LOGSMSPROT4("CSmsPermanentFileStore::BeginTransactionL [this=0x%08X iInTransaction=%d iFileStore=0x%08X]", this, iInTransaction, iFileStore);
   672     OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_BEGINTRANSACTIONL_1, "CSmsPermanentFileStore::BeginTransactionL [this=0x%08X iInTransaction=%d iFileStore=0x%08X]", (TUint)this, iInTransaction, (TUint)iFileStore);
   668 
   673 
   669 	if (iFileStore == NULL || iInTransaction)
   674 	if (iFileStore == NULL || iInTransaction)
   670 		{
   675 		{
   671 		LOGSMSPROT1("WARNING CSmsPermanentFileStore::BeginTransactionL leaving with KErrAccessDenied");
   676 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_BEGINTRANSACTIONL_2, "WARNING CSmsPermanentFileStore::BeginTransactionL leaving with KErrAccessDenied");
   672 		User::Leave(KErrAccessDenied);
   677 		User::Leave(KErrAccessDenied);
   673 		}
   678 		}
   674 
   679 
   675 	iInTransaction = ETrue;
   680 	iInTransaction = ETrue;
   676 	} // CSmsPermanentFileStore::BeginTransactionL
   681 	} // CSmsPermanentFileStore::BeginTransactionL
   678 /**
   683 /**
   679  *  It reverts the transaction.
   684  *  It reverts the transaction.
   680  */
   685  */
   681 void CSmsPermanentFileStore::Revert()
   686 void CSmsPermanentFileStore::Revert()
   682 	{
   687 	{
   683 	LOGSMSPROT3("CSmsPermanentFileStore::Revert(): this=0x%08X, iInTransaction=%d",
   688 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_REVERT_1, "CSmsPermanentFileStore::Revert(): this=0x%08X, iInTransaction=%d",(TUint)this, iInTransaction);
   684     		 this, iInTransaction);
       
   685 
   689 
   686 	iFileStore->Revert();
   690 	iFileStore->Revert();
   687 	iInTransaction = EFalse;
   691 	iInTransaction = EFalse;
   688 	ReinstateDeletedEntries();
   692 	ReinstateDeletedEntries();
   689 	} // CSmsPermanentFileStore::Revert
   693 	} // CSmsPermanentFileStore::Revert
   691 /**
   695 /**
   692  *  It commits the transaction. Then it compact the permanent store file.
   696  *  It commits the transaction. Then it compact the permanent store file.
   693  */
   697  */
   694 void CSmsPermanentFileStore::DoCommitAndCompactL()
   698 void CSmsPermanentFileStore::DoCommitAndCompactL()
   695 	{
   699 	{
   696 	LOGSMSPROT1("CSmsPermanentFileStore::DoCommitAndCompactL()");
   700 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_DOCOMMITANDCOMPACTL_1, "CSmsPermanentFileStore::DoCommitAndCompactL()");
   697 
   701 
   698 	LOGSMSPROTTIMESTAMP();
   702 #if (OST_TRACE_CATEGORY & OST_TRACE_CATEGORY_DEBUG) 
       
   703     TBuf<40> timestamp;
       
   704     SmsTimeStampL(timestamp);
       
   705     OstTraceDefExt1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS,CSMSPERMANENTFILESTORE_DOCOMMITANDCOMPACTL_2, "%S",timestamp);
       
   706 #endif
   699 	iFileStore->CommitL();
   707 	iFileStore->CommitL();
   700 	LOGSMSPROTTIMESTAMP();
   708 #if (OST_TRACE_CATEGORY & OST_TRACE_CATEGORY_DEBUG) 
       
   709     SmsTimeStampL(timestamp);
       
   710     OstTraceDefExt1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS,CSMSPERMANENTFILESTORE_DOCOMMITANDCOMPACTL_3, "%S",timestamp);
       
   711 #endif
   701 
   712 
   702 	iCommitCount--;
   713 	iCommitCount--;
   703 	if ((iCommitCount < 0) || (iCompact))
   714 	if ((iCommitCount < 0) || (iCompact))
   704 		{
   715 		{
   705 		iCommitCount = KNumStoreCommitsBeforeCompaction;
   716 		iCommitCount = KNumStoreCommitsBeforeCompaction;
   712 /**
   723 /**
   713  *  It commits the transaction.
   724  *  It commits the transaction.
   714  */
   725  */
   715 void CSmsPermanentFileStore::CommitTransactionL()
   726 void CSmsPermanentFileStore::CommitTransactionL()
   716 	{
   727 	{
   717 	LOGSMSPROT4("CSmsPermanentFileStore::CommitTransactionL(): this=0x%08X iInTransaction=%d iFileStore=0x%08X",
   728 	OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_COMMITTRANSACTIONL_1, "CSmsPermanentFileStore::CommitTransactionL(): this=0x%08X iInTransaction=%d iFileStore=0x%08X",(TUint)this, iInTransaction, (TUint)iFileStore);
   718     		 this, iInTransaction, iFileStore);
       
   719 
   729 
   720 	ExternalizeEntryArrayL();
   730 	ExternalizeEntryArrayL();
   721 
   731 
   722 #ifdef _SMS_LOGGING_ENABLED
   732 #ifdef OST_TRACE_COMPLIER_IN_USE
   723 	TRAPD(err, DoCommitAndCompactL());
   733 	TRAPD(err, DoCommitAndCompactL());
   724 	if (err != KErrNone)
   734 	if (err != KErrNone)
   725 		{
   735 		{
   726 		LOGGSMU2("WARNING! could not CommitL/CompactL due to %d", err);
   736 		OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_COMMITTRANSACTIONL_2, "WARNING! could not CommitL/CompactL due to %d", err);
   727 		User::Leave(err);
   737 		User::Leave(err);
   728 		}
   738 		}
   729 #else
   739 #else
   730 	DoCommitAndCompactL();
   740 	DoCommitAndCompactL();
   731 #endif
   741 #endif
   738  *  It removes the deleted entries from entry arry.
   748  *  It removes the deleted entries from entry arry.
   739  *	This function is called after commit.
   749  *	This function is called after commit.
   740  */
   750  */
   741 void CSmsPermanentFileStore::RemoveDeletedEntries()
   751 void CSmsPermanentFileStore::RemoveDeletedEntries()
   742 	{
   752 	{
   743 	LOGSMSPROT1("CSmsPermanentFileStore::RemoveDeletedEntries()");
   753 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_REMOVEDELETEDENTRIES_1, "CSmsPermanentFileStore::RemoveDeletedEntries()");
   744 
   754 
   745 	TInt count=iEntryArray.Count();
   755 	TInt count=iEntryArray.Count();
   746 	while (count--)
   756 	while (count--)
   747 		{
   757 		{
   748 		TSmsReassemblyEntry& entry = iEntryArray[count];
   758 		TSmsReassemblyEntry& entry = iEntryArray[count];
   762  *  It reinstate the deleted/added entries from entry arry.
   772  *  It reinstate the deleted/added entries from entry arry.
   763  *	This function is called after revert operation.
   773  *	This function is called after revert operation.
   764  */
   774  */
   765 void CSmsPermanentFileStore::ReinstateDeletedEntries()
   775 void CSmsPermanentFileStore::ReinstateDeletedEntries()
   766 	{
   776 	{
   767 	LOGSMSPROT1("CSmsPermanentFileStore::ReinstateDeletedEntries()");
   777 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSMSPERMANENTFILESTORE_REINSTATEDELETEDENTRIES_1, "CSmsPermanentFileStore::ReinstateDeletedEntries()");
   768 
   778 
   769 	TInt count=iEntryArray.Count();
   779 	TInt count=iEntryArray.Count();
   770 	while (count--)
   780 	while (count--)
   771 		{
   781 		{
   772 		TSmsReassemblyEntry& entry = iEntryArray[count];
   782 		TSmsReassemblyEntry& entry = iEntryArray[count];
   847 
   857 
   848 @internalComponent
   858 @internalComponent
   849 */
   859 */
   850 CPreallocatedFile* CPreallocatedFile::NewL(RFs& aFs, const TDesC& aFileName, TInt aMaxClass0Msg, TInt aMaxPDUSeg, TPreAllocatedFileVersion aVersion)
   860 CPreallocatedFile* CPreallocatedFile::NewL(RFs& aFs, const TDesC& aFileName, TInt aMaxClass0Msg, TInt aMaxPDUSeg, TPreAllocatedFileVersion aVersion)
   851 	{
   861 	{
   852 	LOGSMSPROT1("CPreallocatedFile::NewL()");
   862 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_NEWL_1, "CPreallocatedFile::NewL()");
   853 	CPreallocatedFile*  self = new (ELeave) CPreallocatedFile(aFs, aMaxClass0Msg, aMaxPDUSeg, aVersion);
   863 	CPreallocatedFile*  self = new (ELeave) CPreallocatedFile(aFs, aMaxClass0Msg, aMaxPDUSeg, aVersion);
   854 	CleanupStack::PushL(self);
   864 	CleanupStack::PushL(self);
   855 	self->ConstructL(aFileName);
   865 	self->ConstructL(aFileName);
   856 	CleanupStack::Pop(self);
   866 	CleanupStack::Pop(self);
   857 
   867 
   858 	return self;
   868 	return self;
   859 	}
   869 	}
   860 
   870 
   861 void CPreallocatedFile::ConstructL(const TDesC& aFileName)
   871 void CPreallocatedFile::ConstructL(const TDesC& aFileName)
   862 	{
   872 	{
   863 	LOGSMSPROT1("CPreallocatedFile::ConstructL()");
   873 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_CONSTRUCTL_1, "CPreallocatedFile::ConstructL()");
   864 	iFileName = aFileName.AllocL();
   874 	iFileName = aFileName.AllocL();
   865 	}
   875 	}
   866 
   876 
   867 /**
   877 /**
   868  *  Constructor.
   878  *  Constructor.
   912 
   922 
   913 @internalComponent
   923 @internalComponent
   914 */
   924 */
   915 TBool CPreallocatedFile::IsFileOK()
   925 TBool CPreallocatedFile::IsFileOK()
   916 	{
   926 	{
   917 	LOGSMSPROT1("CPreallocatedFile::IsFileOK()");
   927 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_ISFILEOK_1, "CPreallocatedFile::IsFileOK()");
   918 
   928 
   919 	TEntry entry;
   929 	TEntry entry;
   920 	//  Check file exists
   930 	//  Check file exists
   921 	TInt ret=iFs.Entry(iFileName->Des(), entry);
   931 	TInt ret=iFs.Entry(iFileName->Des(), entry);
   922 	// Check the size of file, if size does not match then assume that file
   932 	// Check the size of file, if size does not match then assume that file
   941 
   951 
   942 @internalComponent
   952 @internalComponent
   943 */
   953 */
   944 void CPreallocatedFile::CreateL()
   954 void CPreallocatedFile::CreateL()
   945 	{
   955 	{
   946 	LOGSMSPROT1("CPreallocatedFile::CreateL");
   956 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_CREATEL_1, "CPreallocatedFile::CreateL");
   947 
   957 
   948 	User::LeaveIfError(iFile.Replace(iFs, iFileName->Des(), EFileWrite));
   958 	User::LeaveIfError(iFile.Replace(iFs, iFileName->Des(), EFileWrite));
   949 	User::LeaveIfError(iFile.SetSize(iSizeOfFile));
   959 	User::LeaveIfError(iFile.SetSize(iSizeOfFile));
   950 	iFile.Flush();
   960 	iFile.Flush();
   951 
   961 
  1096 
  1106 
  1097 @internalComponent
  1107 @internalComponent
  1098 */
  1108 */
  1099 void CPreallocatedFile::AddNewMessageL(TInt& aIndex, CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
  1109 void CPreallocatedFile::AddNewMessageL(TInt& aIndex, CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
  1100 	{
  1110 	{
  1101 	LOGSMSPROT1("CPreallocatedFile::AddNewMessageL");
  1111 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_ADDNEWMESSAGEL_1, "CPreallocatedFile::AddNewMessageL");
  1102 	//Gets the next free slot where the message will be stored.
  1112 	//Gets the next free slot where the message will be stored.
  1103 	TInt nextFreeSlot = GetFreeContainer();
  1113 	TInt nextFreeSlot = GetFreeContainer();
  1104 	TInt pduIndex=aSmsMessage.IsDecoded()? 0: aSmsMessage.SmsPDU().ConcatenatedMessagePDUIndex();
  1114 	TInt pduIndex=aSmsMessage.IsDecoded()? 0: aSmsMessage.SmsPDU().ConcatenatedMessagePDUIndex();
  1105 	if (aSmsMessage.Storage() == CSmsMessage::ESmsSIMStorage  ||
  1115 	if (aSmsMessage.Storage() == CSmsMessage::ESmsSIMStorage  ||
  1106 		aSmsMessage.Storage() == CSmsMessage::ESmsCombinedStorage)
  1116 		aSmsMessage.Storage() == CSmsMessage::ESmsCombinedStorage)
  1145 
  1155 
  1146 @internalComponent
  1156 @internalComponent
  1147 */
  1157 */
  1148 void CPreallocatedFile::UpdateExistingMessageL(TInt aIndex, const CSmsMessage& aSmsMessage, TInt aPduIndex, const TGsmSms& aSms)
  1158 void CPreallocatedFile::UpdateExistingMessageL(TInt aIndex, const CSmsMessage& aSmsMessage, TInt aPduIndex, const TGsmSms& aSms)
  1149 	{
  1159 	{
  1150 	LOGSMSPROT1("CPreallocatedFile::UpdateExistingMessageL()");
  1160 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_UPDATEEXISTINGMESSAGEL_1, "CPreallocatedFile::UpdateExistingMessageL()");
  1151 	TInt preAllocatedStorageId = iEntryArray[aIndex].PreAllocatedStorageId();
  1161 	TInt preAllocatedStorageId = iEntryArray[aIndex].PreAllocatedStorageId();
  1152 	if (preAllocatedStorageId == KErrNotFound)
  1162 	if (preAllocatedStorageId == KErrNotFound)
  1153 		{
  1163 		{
  1154 		/*
  1164 		/*
  1155 		This condition arises when part of message is stored in permanent store file & 
  1165 		This condition arises when part of message is stored in permanent store file & 
  1193 @internalComponent
  1203 @internalComponent
  1194 */
  1204 */
  1195 void CPreallocatedFile::MatchEntryToExistingMessage(const TReassemblyEntry& aEntry,
  1205 void CPreallocatedFile::MatchEntryToExistingMessage(const TReassemblyEntry& aEntry,
  1196 													TInt& aIndex)
  1206 													TInt& aIndex)
  1197 	{
  1207 	{
  1198 	LOGSMSPROT1("CPreallocatedFile::MatchEntryToExistingMessage()");
  1208 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_MATCHENTRYTOEXISTINGMESSAGE_1, "CPreallocatedFile::MatchEntryToExistingMessage()");
  1199 
  1209 
  1200 	aIndex = KErrNotFound;
  1210 	aIndex = KErrNotFound;
  1201 
  1211 
  1202 	//
  1212 	//
  1203 	// Search the reassembly store for a matching entry...
  1213 	// Search the reassembly store for a matching entry...
  1220 			aIndex = index;
  1230 			aIndex = index;
  1221 			break;
  1231 			break;
  1222 			}
  1232 			}
  1223 		}
  1233 		}
  1224 
  1234 
  1225 	LOGSMSPROT2("CPreallocatedFile::MatchEntryToExistingMessage(): aIndex=%d", aIndex);
  1235 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_MATCHENTRYTOEXISTINGMESSAGE_2, "CPreallocatedFile::MatchEntryToExistingMessage(): aIndex=%d", aIndex);
  1226 	}
  1236 	}
  1227 
  1237 
  1228 /*
  1238 /*
  1229 It updates the log server id of the message.
  1239 It updates the log server id of the message.
  1230 
  1240 
  1233 
  1243 
  1234 @internalComponent
  1244 @internalComponent
  1235 */
  1245 */
  1236 void CPreallocatedFile::UpdateLogServerIdL(TInt& aIndex, TLogId aLogServerId)
  1246 void CPreallocatedFile::UpdateLogServerIdL(TInt& aIndex, TLogId aLogServerId)
  1237 	{
  1247 	{
  1238 	LOGSMSPROT1("CPreallocatedFile::UpdateLogServerId");
  1248 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_UPDATELOGSERVERIDL_1, "CPreallocatedFile::UpdateLogServerId");
  1239 
  1249 
  1240 	TSmsPreAllocatedFileStoreReassemblyEntry entry;
  1250 	TSmsPreAllocatedFileStoreReassemblyEntry entry;
  1241 	entry = iEntryArray[aIndex];
  1251 	entry = iEntryArray[aIndex];
  1242 
  1252 
  1243 	if (entry.LogServerId() != aLogServerId)
  1253 	if (entry.LogServerId() != aLogServerId)
  1255 
  1265 
  1256 @internalComponent
  1266 @internalComponent
  1257 */
  1267 */
  1258 void CPreallocatedFile::SetPassedToClientL(TInt aIndex, TBool aBool)
  1268 void CPreallocatedFile::SetPassedToClientL(TInt aIndex, TBool aBool)
  1259 	{
  1269 	{
  1260 	LOGSMSPROT2("CPreallocatedFile::SetPassedToClientL(): aIndex=%d", aIndex);
  1270 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_SETPASSEDTOCLIENTL_1, "CPreallocatedFile::SetPassedToClientL(): aIndex=%d", aIndex);
  1261 
  1271 
  1262 	TSmsPreAllocatedFileStoreReassemblyEntry entry;
  1272 	TSmsPreAllocatedFileStoreReassemblyEntry entry;
  1263 	entry = iEntryArray[aIndex];
  1273 	entry = iEntryArray[aIndex];
  1264 
  1274 
  1265 	if (entry.PassedToClient() != aBool)
  1275 	if (entry.PassedToClient() != aBool)
  1276 
  1286 
  1277 @internalComponent
  1287 @internalComponent
  1278 */
  1288 */
  1279 void CPreallocatedFile::AddEntryL(TSmsPreAllocatedFileStoreReassemblyEntry& aEntry)
  1289 void CPreallocatedFile::AddEntryL(TSmsPreAllocatedFileStoreReassemblyEntry& aEntry)
  1280 	{
  1290 	{
  1281 	LOGSMSPROT1("CPreallocatedFile::AddEntryL");
  1291 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_ADDENTRYL_1, "CPreallocatedFile::AddEntryL");
  1282 	iEntryArray.AppendL(aEntry);
  1292 	iEntryArray.AppendL(aEntry);
  1283 	iEntryArray[iEntryArray.Count()-1].SetIsAdded(ETrue);
  1293 	iEntryArray[iEntryArray.Count()-1].SetIsAdded(ETrue);
  1284 	}
  1294 	}
  1285 
  1295 
  1286 /*
  1296 /*
  1291 
  1301 
  1292 @internalComponent
  1302 @internalComponent
  1293 */
  1303 */
  1294 void CPreallocatedFile::ChangeEntryL(TInt aIndex, const TSmsPreAllocatedFileStoreReassemblyEntry& aNewEntry)
  1304 void CPreallocatedFile::ChangeEntryL(TInt aIndex, const TSmsPreAllocatedFileStoreReassemblyEntry& aNewEntry)
  1295 	{
  1305 	{
  1296 	LOGSMSPROT2("CPreallocatedFile::ChangeEntryL(): aIndex=%d", aIndex);
  1306 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_CHANGEENTRYL_1, "CPreallocatedFile::ChangeEntryL(): aIndex=%d", aIndex);
  1297 	iEntryArray[aIndex].SetIsDeleted(ETrue);
  1307 	iEntryArray[aIndex].SetIsDeleted(ETrue);
  1298 	iEntryArray.InsertL(aIndex,aNewEntry);
  1308 	iEntryArray.InsertL(aIndex,aNewEntry);
  1299 	iEntryArray[aIndex].SetIsAdded(ETrue);
  1309 	iEntryArray[aIndex].SetIsAdded(ETrue);
  1300 	}
  1310 	}
  1301 
  1311 
  1306 
  1316 
  1307 @internalComponent
  1317 @internalComponent
  1308 */
  1318 */
  1309 void CPreallocatedFile::DeleteEntryL(TInt aIndex)
  1319 void CPreallocatedFile::DeleteEntryL(TInt aIndex)
  1310 	{
  1320 	{
  1311 	LOGSMSPROT2("CPreallocatedFile::DeleteEntryL(): aIndex=%d", aIndex);
  1321 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_DELETEENTRYL_1, "CPreallocatedFile::DeleteEntryL(): aIndex=%d", aIndex);
  1312 	if (iEntryArray[aIndex].PreAllocatedStorageId() != KErrNotFound)
  1322 	if (iEntryArray[aIndex].PreAllocatedStorageId() != KErrNotFound)
  1313 		{
  1323 		{
  1314 		ClearEntryL(iEntryArray[aIndex].PreAllocatedStorageId(), iEntryArray[aIndex].Count());
  1324 		ClearEntryL(iEntryArray[aIndex].PreAllocatedStorageId(), iEntryArray[aIndex].Count());
  1315 		}
  1325 		}
  1316 	iEntryArray[aIndex].SetIsDeleted(ETrue);
  1326 	iEntryArray[aIndex].SetIsDeleted(ETrue);
  1336 
  1346 
  1337 @internalComponent
  1347 @internalComponent
  1338 */
  1348 */
  1339 void CPreallocatedFile::ClearEntryL(TInt aStorageId, TInt aNumberOfPDUs)
  1349 void CPreallocatedFile::ClearEntryL(TInt aStorageId, TInt aNumberOfPDUs)
  1340 	{
  1350 	{
  1341 	LOGSMSPROT1("CPreallocatedFile::ClearEntryL");
  1351 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_CLEARENTRYL_1, "CPreallocatedFile::ClearEntryL");
  1342 
  1352 
  1343 	//Read storage id.
  1353 	//Read storage id.
  1344 	TInt storageId;
  1354 	TInt storageId;
  1345 	TPtr8 memPtr((TUint8*) &storageId, sizeof(storageId), sizeof(storageId));
  1355 	TPtr8 memPtr((TUint8*) &storageId, sizeof(storageId), sizeof(storageId));
  1346 	TInt beginOfStorageIdSection = KBeginOfMasterHeaderSection + KSizeOfNumberOfEntrySection + iSizeOfEntrySection;
  1356 	TInt beginOfStorageIdSection = KBeginOfMasterHeaderSection + KSizeOfNumberOfEntrySection + iSizeOfEntrySection;
  1484 
  1494 
  1485 @internalComponent
  1495 @internalComponent
  1486 */
  1496 */
  1487 void CPreallocatedFile::ExternalizeEntry(TInt aContainerId, const TGsmSmsSlotEntry& aSmsSlot, TInt aIndex, const TGsmSms& aGsmSms)
  1497 void CPreallocatedFile::ExternalizeEntry(TInt aContainerId, const TGsmSmsSlotEntry& aSmsSlot, TInt aIndex, const TGsmSms& aGsmSms)
  1488 	{
  1498 	{
  1489 	LOGSMSPROT3("CPreallocatedFile::ExternalizeEntry() 1: aContainerId=%d, aIndex=%d", aContainerId, aIndex);
  1499 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_EXTERNALIZEENTRY_1, "CPreallocatedFile::ExternalizeEntry() 1: aContainerId=%d, aIndex=%d", aContainerId, aIndex);
  1490 
  1500 
  1491 	// Container id must not be greater than max pdu segment.
  1501 	// Container id must not be greater than max pdu segment.
  1492 	TInt pos = iBeginOfDataSection + ((aContainerId - 1) * (KSizeOfGsmSmsSlotEntry + sizeof(TInt) + KSizeOfSmsGsmPDU));
  1502 	TInt pos = iBeginOfDataSection + ((aContainerId - 1) * (KSizeOfGsmSmsSlotEntry + sizeof(TInt) + KSizeOfSmsGsmPDU));
  1493 	// Store slot info
  1503 	// Store slot info
  1494 	TPtr8 memPtr((TUint8*) &aSmsSlot, sizeof(aSmsSlot), sizeof(aSmsSlot));
  1504 	TPtr8 memPtr((TUint8*) &aSmsSlot, sizeof(aSmsSlot), sizeof(aSmsSlot));
  1515 
  1525 
  1516 @internalComponent
  1526 @internalComponent
  1517 */
  1527 */
  1518 void CPreallocatedFile::ExternalizeEntry(TInt aContainerId, TInt aIndex, const TGsmSms& aGsmSms)
  1528 void CPreallocatedFile::ExternalizeEntry(TInt aContainerId, TInt aIndex, const TGsmSms& aGsmSms)
  1519 	{
  1529 	{
  1520 	LOGSMSPROT3("CPreallocatedFile::ExternalizeEntry() 2: aContainerId=%d, aIndex=%d", aContainerId, aIndex);
  1530 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_EXTERNALIZEENTRY1_1, "CPreallocatedFile::ExternalizeEntry() 2: aContainerId=%d, aIndex=%d", aContainerId, aIndex);
  1521 
  1531 
  1522 	// Container id must not be greater than max pdu segment.
  1532 	// Container id must not be greater than max pdu segment.
  1523 	TInt pos = iBeginOfDataSection + ((aContainerId - 1) * (KSizeOfGsmSmsSlotEntry + sizeof(TInt) + KSizeOfSmsGsmPDU));
  1533 	TInt pos = iBeginOfDataSection + ((aContainerId - 1) * (KSizeOfGsmSmsSlotEntry + sizeof(TInt) + KSizeOfSmsGsmPDU));
  1524 	// Store the PDU index value
  1534 	// Store the PDU index value
  1525 	TPtr8 memPtr((TUint8*) &aIndex, sizeof(aIndex), sizeof(aIndex));
  1535 	TPtr8 memPtr((TUint8*) &aIndex, sizeof(aIndex), sizeof(aIndex));
  1544 
  1554 
  1545 @internalComponent
  1555 @internalComponent
  1546 */
  1556 */
  1547 void CPreallocatedFile::InternalizeEntryL(const TInt aIndex, CSmsMessage& aSmsMessage, CArrayFix<TInt>& aIndexArray, CArrayFix<TGsmSms>& aSmsArray)
  1557 void CPreallocatedFile::InternalizeEntryL(const TInt aIndex, CSmsMessage& aSmsMessage, CArrayFix<TInt>& aIndexArray, CArrayFix<TGsmSms>& aSmsArray)
  1548 	{
  1558 	{
  1549 	LOGSMSPROT1("CPreallocatedFile::InternalizeEntryL");
  1559 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_INTERNALIZEENTRYL_1, "CPreallocatedFile::InternalizeEntryL");
  1550 	TSmsPreAllocatedFileStoreReassemblyEntry&  entry = iEntryArray[aIndex];
  1560 	TSmsPreAllocatedFileStoreReassemblyEntry&  entry = iEntryArray[aIndex];
  1551 	//Set other properties of CSmsMessage
  1561 	//Set other properties of CSmsMessage
  1552 	aSmsMessage.SetStorage(entry.Storage());
  1562 	aSmsMessage.SetStorage(entry.Storage());
  1553 	aSmsMessage.SetStatus((NMobileSmsStore::TMobileSmsStoreStatus)entry.Status());
  1563 	aSmsMessage.SetStatus((NMobileSmsStore::TMobileSmsStoreStatus)entry.Status());
  1554 	aSmsMessage.SetLogServerId(entry.LogServerId());
  1564 	aSmsMessage.SetLogServerId(entry.LogServerId());
  1556 	aSmsMessage.SetUTCOffset(entry.UTCOffset());
  1566 	aSmsMessage.SetUTCOffset(entry.UTCOffset());
  1557 	aSmsMessage.SetDecodedOnSIM(entry.DecodedOnSIM());
  1567 	aSmsMessage.SetDecodedOnSIM(entry.DecodedOnSIM());
  1558 	aSmsMessage.SetForwardToClient(entry.ForwardToClient());
  1568 	aSmsMessage.SetForwardToClient(entry.ForwardToClient());
  1559 	aSmsMessage.SetToFromAddressL(entry.Description2());
  1569 	aSmsMessage.SetToFromAddressL(entry.Description2());
  1560 
  1570 
  1561 	LOGSMSPROT2("CPreallocatedFile::InternalizeEntryL Start [sid=%d]", entry.PreAllocatedStorageId());
  1571 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_INTERNALIZEENTRYL_2, "CPreallocatedFile::InternalizeEntryL Start [sid=%d]", entry.PreAllocatedStorageId());
  1562 	if (entry.PreAllocatedStorageId()==KErrNotFound)
  1572 	if (entry.PreAllocatedStorageId()==KErrNotFound)
  1563 		{
  1573 		{
  1564 		return;
  1574 		return;
  1565 		}
  1575 		}
  1566 
  1576 
  1616 				break;
  1626 				break;
  1617 				}
  1627 				}
  1618 			}
  1628 			}
  1619 		}
  1629 		}
  1620 
  1630 
  1621 	LOGSMSPROT2("CPreallocatedFile::InternalizeEntryL End [noOfPDUsRead=%d]", noOfPDUsRead);
  1631 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_INTERNALIZEENTRYL_3, "CPreallocatedFile::InternalizeEntryL End [noOfPDUsRead=%d]", noOfPDUsRead);
  1622 	}
  1632 	}
  1623 
  1633 
  1624 /*
  1634 /*
  1625 It removes the PDUs from pre-allocated store file.
  1635 It removes the PDUs from pre-allocated store file.
  1626 This function is needed because after forwarding the incomplete message
  1636 This function is needed because after forwarding the incomplete message
  1634 
  1644 
  1635 @internalComponent
  1645 @internalComponent
  1636 */
  1646 */
  1637 void CPreallocatedFile::RemovePDUsL(TInt aIndex, TInt aStartPos, TInt aEndPos)
  1647 void CPreallocatedFile::RemovePDUsL(TInt aIndex, TInt aStartPos, TInt aEndPos)
  1638 	{
  1648 	{
  1639 	LOGSMSPROT1("CPreallocatedFile::RemovePDUsL");
  1649 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_REMOVEPDUSL_1, "CPreallocatedFile::RemovePDUsL");
  1640 
  1650 
  1641 	if ((aStartPos < 1) || (aEndPos > 256) || (aStartPos > aEndPos))
  1651 	if ((aStartPos < 1) || (aEndPos > 256) || (aStartPos > aEndPos))
  1642 		{
  1652 		{
  1643 		User::Leave(KErrArgument);
  1653 		User::Leave(KErrArgument);
  1644 		}
  1654 		}
  1645 
  1655 
  1646 	LOGSMSPROT2("CPreallocatedFile::RemovePDUsL Start [sid=%d]", iEntryArray[aIndex].PreAllocatedStorageId());
  1656 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_REMOVEPDUSL_2, "CPreallocatedFile::RemovePDUsL Start [sid=%d]", iEntryArray[aIndex].PreAllocatedStorageId());
  1647 	if (iEntryArray[aIndex].PreAllocatedStorageId()==KErrNotFound)
  1657 	if (iEntryArray[aIndex].PreAllocatedStorageId()==KErrNotFound)
  1648 		{
  1658 		{
  1649 		return;
  1659 		return;
  1650 		}
  1660 		}
  1651 
  1661 
  1879  *  invalid.
  1889  *  invalid.
  1880  *  @capability None
  1890  *  @capability None
  1881  */
  1891  */
  1882 void CPreallocatedFile::BeginTransactionL()
  1892 void CPreallocatedFile::BeginTransactionL()
  1883 	{
  1893 	{
  1884 	LOGSMSPROT3("CPreallocatedFile::BeginTransactionL [this=0x%08X iInTransaction=%d]", this, iInTransaction);
  1894 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_BEGINTRANSACTIONL_1, "CPreallocatedFile::BeginTransactionL [this=0x%08X iInTransaction=%d]", (TUint)this, iInTransaction);
  1885 
  1895 
  1886 	if (iInTransaction)
  1896 	if (iInTransaction)
  1887 		{
  1897 		{
  1888 	    LOGGSMU1("WARNING CPreallocatedFile::BeginTransactionL leaving with KErrAccessDenied");
  1898 	    OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_BEGINTRANSACTIONL_2, "WARNING CPreallocatedFile::BeginTransactionL leaving with KErrAccessDenied");
  1889 		User::Leave(KErrAccessDenied);
  1899 		User::Leave(KErrAccessDenied);
  1890 		}
  1900 		}
  1891 
  1901 
  1892 	iInTransaction = ETrue;
  1902 	iInTransaction = ETrue;
  1893 	}
  1903 	}
  1895 /**
  1905 /**
  1896  *  It commits the transaction.
  1906  *  It commits the transaction.
  1897  */
  1907  */
  1898 void CPreallocatedFile::CommitTransactionL()
  1908 void CPreallocatedFile::CommitTransactionL()
  1899 	{
  1909 	{
  1900 	LOGSMSPROT3("CPreallocatedFile::CommitTransactionL(): this=0x%08X iInTransaction=%d",
  1910 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_COMMITTRANSACTIONL_1, "CPreallocatedFile::CommitTransactionL(): this=0x%08X iInTransaction=%d",(TUint)this, iInTransaction);
  1901 				this, iInTransaction);
       
  1902 
  1911 
  1903 	ExternalizeEntryArray();
  1912 	ExternalizeEntryArray();
  1904 	//Commit
  1913 	//Commit
  1905 	PutChecksumValueL();
  1914 	PutChecksumValueL();
  1906 	iInTransaction = EFalse;
  1915 	iInTransaction = EFalse;
  1911 /*
  1920 /*
  1912 It reverts the transaction.
  1921 It reverts the transaction.
  1913 */
  1922 */
  1914 void CPreallocatedFile::Revert()
  1923 void CPreallocatedFile::Revert()
  1915 	{
  1924 	{
  1916 	LOGSMSPROT3("CPreallocatedFile::Revert(): this=0x%08X, iInTransaction=%d",
  1925 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_REVERT_1, "CPreallocatedFile::Revert(): this=0x%08X, iInTransaction=%d",(TUint)this, iInTransaction);
  1917     		 this, iInTransaction);
       
  1918 
  1926 
  1919 	ReinstateEntries();
  1927 	ReinstateEntries();
  1920 	ExternalizeEntryArray();
  1928 	ExternalizeEntryArray();
  1921 	iInTransaction = EFalse;
  1929 	iInTransaction = EFalse;
  1922 	ReinstateDeletedEntries();
  1930 	ReinstateDeletedEntries();
  1926  *  It removes the deleted entries from entry arry.
  1934  *  It removes the deleted entries from entry arry.
  1927  *	This function is called after commit.
  1935  *	This function is called after commit.
  1928  */
  1936  */
  1929 void CPreallocatedFile::RemoveDeletedEntries()
  1937 void CPreallocatedFile::RemoveDeletedEntries()
  1930 	{
  1938 	{
  1931 	LOGSMSPROT1("CPreallocatedFile::RemoveDeletedEntries()");
  1939 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_REMOVEDELETEDENTRIES_1, "CPreallocatedFile::RemoveDeletedEntries()");
  1932 
  1940 
  1933 	TInt count=iEntryArray.Count();
  1941 	TInt count=iEntryArray.Count();
  1934 	while (count--)
  1942 	while (count--)
  1935 		{
  1943 		{
  1936 		TSmsPreAllocatedFileStoreReassemblyEntry& entry = iEntryArray[count];
  1944 		TSmsPreAllocatedFileStoreReassemblyEntry& entry = iEntryArray[count];
  1950  *  It reinstate the deleted/added entries from entry arry.
  1958  *  It reinstate the deleted/added entries from entry arry.
  1951  *	This function is called after revert operation.
  1959  *	This function is called after revert operation.
  1952  */
  1960  */
  1953 void CPreallocatedFile::ReinstateDeletedEntries()
  1961 void CPreallocatedFile::ReinstateDeletedEntries()
  1954 	{
  1962 	{
  1955 	LOGSMSPROT1("CPreallocatedFile::ReinstateDeletedEntries()");
  1963 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_REINSTATEDELETEDENTRIES_1, "CPreallocatedFile::ReinstateDeletedEntries()");
  1956 
  1964 
  1957 	TInt count=iEntryArray.Count();
  1965 	TInt count=iEntryArray.Count();
  1958 	while (count--)
  1966 	while (count--)
  1959 		{
  1967 		{
  1960 		TSmsPreAllocatedFileStoreReassemblyEntry& entry = iEntryArray[count];
  1968 		TSmsPreAllocatedFileStoreReassemblyEntry& entry = iEntryArray[count];
  1976  *	Unlike permanent store file which supports revert. pre-allocated
  1984  *	Unlike permanent store file which supports revert. pre-allocated
  1977  *	file (raw data file) supports the revert mecahnism using this function.
  1985  *	file (raw data file) supports the revert mecahnism using this function.
  1978  */
  1986  */
  1979 void CPreallocatedFile::ReinstateEntries()
  1987 void CPreallocatedFile::ReinstateEntries()
  1980 	{
  1988 	{
  1981 	LOGSMSPROT1("CPreallocatedFile::ReinstateEntries()");
  1989 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_REINSTATEENTRIES_1, "CPreallocatedFile::ReinstateEntries()");
  1982 
  1990 
  1983 	TInt containerId;
  1991 	TInt containerId;
  1984 	TInt storageId;
  1992 	TInt storageId;
  1985 	TPtr8 memPtr((TUint8*) &storageId, sizeof(storageId), sizeof(storageId));
  1993 	TPtr8 memPtr((TUint8*) &storageId, sizeof(storageId), sizeof(storageId));
  1986 
  1994 
  2012 /*
  2020 /*
  2013 It returns the index of oldest message in pre-allocated file.
  2021 It returns the index of oldest message in pre-allocated file.
  2014 */
  2022 */
  2015 TInt CPreallocatedFile::GetOldestMessageEntryIndex()
  2023 TInt CPreallocatedFile::GetOldestMessageEntryIndex()
  2016 	{
  2024 	{
  2017 	LOGSMSPROT1("CPreallocatedFile::GetOldestMessageEntryIndex()");
  2025 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CPREALLOCATEDFILE_GETOLDESTMESSAGEENTRYINDEX_1, "CPreallocatedFile::GetOldestMessageEntryIndex()");
  2018 
  2026 
  2019 	TInt index = KErrNotFound;
  2027 	TInt index = KErrNotFound;
  2020 	TTime time;
  2028 	TTime time;
  2021 	time.UniversalTime();
  2029 	time.UniversalTime();
  2022 
  2030 
  2042 
  2050 
  2043 @internalComponent
  2051 @internalComponent
  2044 */
  2052 */
  2045 CGuardTimer* CGuardTimer::NewL(CClass0SmsReassemblyStore& aClass0ReassemblyStore, TInt aGuardTimeout)
  2053 CGuardTimer* CGuardTimer::NewL(CClass0SmsReassemblyStore& aClass0ReassemblyStore, TInt aGuardTimeout)
  2046 	{
  2054 	{
  2047 	LOGSMSPROT1("CGuardTimer::NewL()");
  2055 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CGUARDTIMER_NEWL_1, "CGuardTimer::NewL()");
  2048 
  2056 
  2049 	CGuardTimer* timer = new(ELeave) CGuardTimer(aClass0ReassemblyStore, aGuardTimeout);
  2057 	CGuardTimer* timer = new(ELeave) CGuardTimer(aClass0ReassemblyStore, aGuardTimeout);
  2050 	CleanupStack::PushL(timer);
  2058 	CleanupStack::PushL(timer);
  2051 	timer->ConstructL();
  2059 	timer->ConstructL();
  2052 	CleanupStack::Pop();
  2060 	CleanupStack::Pop();
  2075 /**
  2083 /**
  2076  *  Enable the Gurad Timer
  2084  *  Enable the Gurad Timer
  2077  */
  2085  */
  2078 void CGuardTimer::EnableGuardTimer()
  2086 void CGuardTimer::EnableGuardTimer()
  2079 	{
  2087 	{
  2080 	LOGSMSPROT1("CGuardTimer::EnableGuardTimer()");
  2088 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CGUARDTIMER_ENABLEGUARDTIMER_1, "CGuardTimer::EnableGuardTimer()");
  2081 	if (!IsActive())
  2089 	if (!IsActive())
  2082 		{
  2090 		{
  2083 		TTime nextTimeOut;
  2091 		TTime nextTimeOut;
  2084 		iClass0ReassemblyStore.GetNextGuardTimeout(nextTimeOut);
  2092 		iClass0ReassemblyStore.GetNextGuardTimeout(nextTimeOut);
  2085 		At(nextTimeOut);
  2093 		At(nextTimeOut);
  2097 /**
  2105 /**
  2098  *  Timer completed
  2106  *  Timer completed
  2099  */
  2107  */
  2100 void CGuardTimer::RunL()
  2108 void CGuardTimer::RunL()
  2101 	{
  2109 	{
  2102 	LOGSMSPROT2("CGuardTimer::RunL [iStatus=%d]", iStatus.Int());
  2110 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CGUARDTIMER_RUNL_1, "CGuardTimer::RunL [iStatus=%d]", iStatus.Int());
  2103 	iClass0ReassemblyStore.ProcessTimeoutMessageL();
  2111 	iClass0ReassemblyStore.ProcessTimeoutMessageL();
  2104 	EnableGuardTimer();
  2112 	EnableGuardTimer();
  2105 	} // CGuardTimer::RunL
  2113 	} // CGuardTimer::RunL
  2106 
  2114 
  2107 /**
  2115 /**
  2118 
  2126 
  2119 @internalComponent
  2127 @internalComponent
  2120 */
  2128 */
  2121 CClass0SmsReassemblyStore* CClass0SmsReassemblyStore::NewL(RFs& aFs, MSmsComm& aSmsComm)
  2129 CClass0SmsReassemblyStore* CClass0SmsReassemblyStore::NewL(RFs& aFs, MSmsComm& aSmsComm)
  2122 	{
  2130 	{
  2123 	LOGSMSPROT1("CClass0SmsReassemblyStore::NewL()");
  2131 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_NEWL_1, "CClass0SmsReassemblyStore::NewL()");
  2124 
  2132 
  2125 	CClass0SmsReassemblyStore*  self = new (ELeave) CClass0SmsReassemblyStore(aFs, aSmsComm);
  2133 	CClass0SmsReassemblyStore*  self = new (ELeave) CClass0SmsReassemblyStore(aFs, aSmsComm);
  2126 	CleanupStack::PushL(self);
  2134 	CleanupStack::PushL(self);
  2127 	self->ConstructL();
  2135 	self->ConstructL();
  2128 	CleanupStack::Pop(self);
  2136 	CleanupStack::Pop(self);
  2186 
  2194 
  2187 @internalComponent
  2195 @internalComponent
  2188 */
  2196 */
  2189 void CClass0SmsReassemblyStore::ReadConfigurableClass0SmsSettingsL(TInt& aMaxClass0Msg, TInt& aMaxPDUSeg, TInt& aGuardTimeOut)
  2197 void CClass0SmsReassemblyStore::ReadConfigurableClass0SmsSettingsL(TInt& aMaxClass0Msg, TInt& aMaxPDUSeg, TInt& aGuardTimeOut)
  2190 	{
  2198 	{
  2191 	LOGSMSPROT1("CClass0SmsReassemblyStore::ReadConfigurableClass0SmsSettingsL()");
  2199 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_READCONFIGURABLECLASS0SMSSETTINGSL_1, "CClass0SmsReassemblyStore::ReadConfigurableClass0SmsSettingsL()");
  2192 
  2200 
  2193 	aMaxClass0Msg = KMaxNumberOfClass0MessagesInReassemblyStore;
  2201 	aMaxClass0Msg = KMaxNumberOfClass0MessagesInReassemblyStore;
  2194 	aMaxPDUSeg    = KNumberOfPDUSegmentsStoredInOODCondition;
  2202 	aMaxPDUSeg    = KNumberOfPDUSegmentsStoredInOODCondition;
  2195 	aGuardTimeOut = KGuardTimeOut;
  2203 	aGuardTimeOut = KGuardTimeOut;
  2196 
  2204 
  2197 	CESockIniData*  ini = NULL;
  2205 	CESockIniData*  ini = NULL;
  2198 	TRAPD(ret, ini=CESockIniData::NewL(_L("smswap.sms.esk")));
  2206 	TRAPD(ret, ini=CESockIniData::NewL(_L("smswap.sms.esk")));
  2199 	if(ret!=KErrNone)
  2207 	if(ret!=KErrNone)
  2200 		{
  2208 		{
  2201 		LOGSMSPROT2("CESockIniData::NewL() returned=%d", ret);
  2209 		OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_READCONFIGURABLECLASS0SMSSETTINGSL_2, "CESockIniData::NewL() returned=%d", ret);
  2202 		}
  2210 		}
  2203 	else
  2211 	else
  2204 		{
  2212 		{
  2205 		CleanupStack::PushL(ini);
  2213 		CleanupStack::PushL(ini);
  2206 
  2214 
  2207 		TInt var(0);
  2215 		TInt var(0);
  2208 		if(ini->FindVar(_L("ReassemblyStore"),_L("MaxClass0Messages"),var))
  2216 		if(ini->FindVar(_L("ReassemblyStore"),_L("MaxClass0Messages"),var))
  2209 			{
  2217 			{
  2210 			if (var > 0)
  2218 			if (var > 0)
  2211 				{
  2219 				{
  2212 				LOGSMSPROT2("MaxClass0Messages [%d]", var);
  2220 				OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_READCONFIGURABLECLASS0SMSSETTINGSL_3, "MaxClass0Messages [%d]", var);
  2213 				aMaxClass0Msg = var;
  2221 				aMaxClass0Msg = var;
  2214 				}
  2222 				}
  2215 			}
  2223 			}
  2216 
  2224 
  2217 		if(ini->FindVar(_L("ReassemblyStore"),_L("NumberOfPDUSegements"),var))
  2225 		if(ini->FindVar(_L("ReassemblyStore"),_L("NumberOfPDUSegements"),var))
  2218 			{
  2226 			{
  2219 			if (var > 0)
  2227 			if (var > 0)
  2220 				{
  2228 				{
  2221 				LOGSMSPROT2("MaxClass0Messages [%d]", var);
  2229 				OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_READCONFIGURABLECLASS0SMSSETTINGSL_4, "MaxClass0Messages [%d]", var);
  2222 				aMaxPDUSeg = var;
  2230 				aMaxPDUSeg = var;
  2223 				}
  2231 				}
  2224 			}
  2232 			}
  2225 
  2233 
  2226 		if(ini->FindVar(_L("ReassemblyStore"),_L("GuardTimeOut"),var))
  2234 		if(ini->FindVar(_L("ReassemblyStore"),_L("GuardTimeOut"),var))
  2227 			{
  2235 			{
  2228 			if (var > 0)
  2236 			if (var > 0)
  2229 				{
  2237 				{
  2230 				LOGSMSPROT2("MaxClass0Messages [%d]", var);
  2238 				OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_READCONFIGURABLECLASS0SMSSETTINGSL_5, "MaxClass0Messages [%d]", var);
  2231 				aGuardTimeOut = var;
  2239 				aGuardTimeOut = var;
  2232 				}
  2240 				}
  2233 			}
  2241 			}
  2234 
  2242 
  2235 		CleanupStack::PopAndDestroy(ini);
  2243 		CleanupStack::PopAndDestroy(ini);
  2236 		}
  2244 		}
  2237 
  2245 
  2238 	LOGSMSPROT4("CClass0SmsReassemblyStore::ReadConfigurableClass0SmsSettingsL(): aMaxClass0Msg=%d, aMaxPDUSeg=%d, aGuardTimeOut=%d",
  2246 	OstTraceDefExt3(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_READCONFIGURABLECLASS0SMSSETTINGSL_6, "CClass0SmsReassemblyStore::ReadConfigurableClass0SmsSettingsL(): aMaxClass0Msg=%d, aMaxPDUSeg=%d, aGuardTimeOut=%d",aMaxClass0Msg, aMaxPDUSeg, aGuardTimeOut);
  2239 			    aMaxClass0Msg, aMaxPDUSeg, aGuardTimeOut);
       
  2240 	}
  2247 	}
  2241 
  2248 
  2242 /**
  2249 /**
  2243 It opens the class 0 re-assembly store.
  2250 It opens the class 0 re-assembly store.
  2244 Then it populates the entry information (all the messages stored in re-assembly store).
  2251 Then it populates the entry information (all the messages stored in re-assembly store).
  2245 
  2252 
  2246 @internalComponent
  2253 @internalComponent
  2247 */
  2254 */
  2248 void CClass0SmsReassemblyStore::OpenStoreL()
  2255 void CClass0SmsReassemblyStore::OpenStoreL()
  2249 	{
  2256 	{
  2250 	LOGSMSPROT1("CClass0SmsReassemblyStore::OpenStoreL()");
  2257 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_OPENSTOREL_1, "CClass0SmsReassemblyStore::OpenStoreL()");
  2251 	TFileName pathName;
  2258 	TFileName pathName;
  2252 	CReassemblyStoreUtility::PrivatePath(iFs, pathName);
  2259 	CReassemblyStoreUtility::PrivatePath(iFs, pathName);
  2253 	//Create the directory if it is not created.
  2260 	//Create the directory if it is not created.
  2254 	iFs.MkDirAll(pathName);
  2261 	iFs.MkDirAll(pathName);
  2255 	// If any one file becomes corrupt or does not exist then we have to create both files.
  2262 	// If any one file becomes corrupt or does not exist then we have to create both files.
  2272 
  2279 
  2273 @internalComponent
  2280 @internalComponent
  2274 */
  2281 */
  2275 void CClass0SmsReassemblyStore::Close()
  2282 void CClass0SmsReassemblyStore::Close()
  2276 	{
  2283 	{
  2277 	LOGSMSPROT1("CClass0SmsReassemblyStore::CloseStore()");
  2284 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_CLOSE_1, "CClass0SmsReassemblyStore::CloseStore()");
  2278 	iGuardTimer->DisableGuardTimer();
  2285 	iGuardTimer->DisableGuardTimer();
  2279 	iEntryArray.Reset();
  2286 	iEntryArray.Reset();
  2280 	iPreallocatedFile->Close();
  2287 	iPreallocatedFile->Close();
  2281 	iPermanentFileStore->Close();
  2288 	iPermanentFileStore->Close();
  2282 	}
  2289 	}
  2288 
  2295 
  2289 @internalComponent
  2296 @internalComponent
  2290 */
  2297 */
  2291 void CClass0SmsReassemblyStore::PopulateEntryArrayL(CArrayFix<TReassemblyEntry>& aEntryArray)
  2298 void CClass0SmsReassemblyStore::PopulateEntryArrayL(CArrayFix<TReassemblyEntry>& aEntryArray)
  2292 	{
  2299 	{
  2293 	LOGSMSPROT1("CClass0SmsReassemblyStore::PopulateEntryArrayL()");
  2300 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_POPULATEENTRYARRAYL_1, "CClass0SmsReassemblyStore::PopulateEntryArrayL()");
  2294 	aEntryArray.Reset();
  2301 	aEntryArray.Reset();
  2295 	//Populate Entries from Pre-allocated file.
  2302 	//Populate Entries from Pre-allocated file.
  2296 	for (TInt count = 0; count < iPreallocatedFile->Entries().Count(); count++)
  2303 	for (TInt count = 0; count < iPreallocatedFile->Entries().Count(); count++)
  2297 		{
  2304 		{
  2298 		TReassemblyEntry entry;
  2305 		TReassemblyEntry entry;
  2353 				}
  2360 				}
  2354 			}
  2361 			}
  2355 		}
  2362 		}
  2356 	else if (ret == KErrDiskFull)
  2363 	else if (ret == KErrDiskFull)
  2357 		{
  2364 		{
  2358 		LOGSMSPROT1("CleanReassemblyEntries() returns KErrDiskFull");
  2365 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_POPULATEENTRYARRAYL_2, "CleanReassemblyEntries() returns KErrDiskFull");
  2359 		/*
  2366 		/*
  2360 		In this case permanent store file contains incorrect information.
  2367 		In this case permanent store file contains incorrect information.
  2361 		For example forwarded message might be still stored in this store.
  2368 		For example forwarded message might be still stored in this store.
  2362 		Because it has not been deleted due to out-of-disk condition.
  2369 		Because it has not been deleted due to out-of-disk condition.
  2363 		So be careful at the time of updating the count information
  2370 		So be careful at the time of updating the count information
  2421 If disk space is full, then class 0 re-assembly store stores the incoming message in
  2428 If disk space is full, then class 0 re-assembly store stores the incoming message in
  2422 pre-allocated file. Otherwise it stores the message in permanent store file.
  2429 pre-allocated file. Otherwise it stores the message in permanent store file.
  2423 */
  2430 */
  2424 void CClass0SmsReassemblyStore::SetDiskSpaceState(TSmsDiskSpaceMonitorStatus aDiskSpaceStatus)
  2431 void CClass0SmsReassemblyStore::SetDiskSpaceState(TSmsDiskSpaceMonitorStatus aDiskSpaceStatus)
  2425 	{
  2432 	{
  2426 	LOGSMSPROT1("CClass0SmsReassemblyStore::SetDiskSpaceState()");
  2433 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_SETDISKSPACESTATE_1, "CClass0SmsReassemblyStore::SetDiskSpaceState()");
  2427 	iDiskSpaceStatus = aDiskSpaceStatus;
  2434 	iDiskSpaceStatus = aDiskSpaceStatus;
  2428 	}
  2435 	}
  2429 
  2436 
  2430 /*
  2437 /*
  2431 It adds the new message in class 0 reassembly store.
  2438 It adds the new message in class 0 reassembly store.
  2439 
  2446 
  2440 @internalComponent
  2447 @internalComponent
  2441 */
  2448 */
  2442 void CClass0SmsReassemblyStore::AddNewMessageL(CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
  2449 void CClass0SmsReassemblyStore::AddNewMessageL(CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
  2443 	{
  2450 	{
  2444 	LOGSMSPROT1("CClass0SmsReassemblyStore::AddNewMessageL");
  2451 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_ADDNEWMESSAGEL_1, "CClass0SmsReassemblyStore::AddNewMessageL");
  2445 
  2452 
  2446 	// Add entry in permanent store file
  2453 	// Add entry in permanent store file
  2447 	TInt index;
  2454 	TInt index;
  2448 	TInt ret = KErrNone;
  2455 	TInt ret = KErrNone;
  2449 
  2456 
  2497 
  2504 
  2498 @internalComponent
  2505 @internalComponent
  2499 */
  2506 */
  2500 void CClass0SmsReassemblyStore::UpdateExistingMessageL(CSmsMessage& aSmsMessage, const TGsmSms& aGsmSms, TBool& aDuplicateMsgRef, TBool& aDuplicateSlot)
  2507 void CClass0SmsReassemblyStore::UpdateExistingMessageL(CSmsMessage& aSmsMessage, const TGsmSms& aGsmSms, TBool& aDuplicateMsgRef, TBool& aDuplicateSlot)
  2501 	{
  2508 	{
  2502 	LOGSMSPROT1("CClass0SmsReassemblyStore::UpdateExistingMessageL()");
  2509 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_UPDATEEXISTINGMESSAGEL_1, "CClass0SmsReassemblyStore::UpdateExistingMessageL()");
  2503 
  2510 
  2504 	aDuplicateMsgRef = EFalse;
  2511 	aDuplicateMsgRef = EFalse;
  2505 	aDuplicateSlot   = EFalse;
  2512 	aDuplicateSlot   = EFalse;
  2506 
  2513 
  2507 	CSmsBuffer*  buffer = CSmsBuffer::NewL();
  2514 	CSmsBuffer*  buffer = CSmsBuffer::NewL();
  2557 			{
  2564 			{
  2558 			const TGsmSmsSlotEntry&  slot = smsMessage->iSlotArray[slotNum];
  2565 			const TGsmSmsSlotEntry&  slot = smsMessage->iSlotArray[slotNum];
  2559 
  2566 
  2560 			if (slot.iIndex == newSlot.iIndex  && slot.iStore == newSlot.iStore)
  2567 			if (slot.iIndex == newSlot.iIndex  && slot.iStore == newSlot.iStore)
  2561 				{
  2568 				{
  2562 				LOGSMSPROT1("CSmsReassemblyStore::UpdateExistingMessageL(): Duplicate enumerated PDU.");
  2569 				OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_UPDATEEXISTINGMESSAGEL_2, "CSmsReassemblyStore::UpdateExistingMessageL(): Duplicate enumerated PDU.");
  2563 
  2570 
  2564 				// It is a duplicate that was already stored on the SIM...
  2571 				// It is a duplicate that was already stored on the SIM...
  2565 				aDuplicateSlot = ETrue;
  2572 				aDuplicateSlot = ETrue;
  2566 				break;
  2573 				break;
  2567 				}
  2574 				}
  2572 
  2579 
  2573 	for (TInt index = 0;  index < indexArrayCount;  index++ )
  2580 	for (TInt index = 0;  index < indexArrayCount;  index++ )
  2574 		{
  2581 		{
  2575 		if (indexArray->At(index) == concatPDUIndex)
  2582 		if (indexArray->At(index) == concatPDUIndex)
  2576 			{
  2583 			{
  2577 			LOGSMSPROT1("CSmsReassemblyStore::UpdateExistingMessageL(): Duplicate concatenated PDU.");
  2584 			OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_UPDATEEXISTINGMESSAGEL_3, "CSmsReassemblyStore::UpdateExistingMessageL(): Duplicate concatenated PDU.");
  2578 
  2585 
  2579 			// The PDU is already stored in the reassembly store.
  2586 			// The PDU is already stored in the reassembly store.
  2580 			aDuplicateMsgRef = ETrue;
  2587 			aDuplicateMsgRef = ETrue;
  2581 			break;
  2588 			break;
  2582 			}
  2589 			}
  3059 
  3066 
  3060 @internalComponent
  3067 @internalComponent
  3061 */
  3068 */
  3062 void CClass0SmsReassemblyStore::ProcessTimeoutMessageL()
  3069 void CClass0SmsReassemblyStore::ProcessTimeoutMessageL()
  3063 	{
  3070 	{
  3064 	LOGSMSPROT1("CClass0SmsReassemblyStore::ProcessTimeoutMessageL()");
  3071 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_PROCESSTIMEOUTMESSAGEL_1, "CClass0SmsReassemblyStore::ProcessTimeoutMessageL()");
  3065 	TBool passedToClient=ETrue;
  3072 	TBool passedToClient=ETrue;
  3066 	TInt count=iEntryArray.Count();
  3073 	TInt count=iEntryArray.Count();
  3067 
  3074 
  3068 	CSmsBuffer* buffer = CSmsBuffer::NewL();
  3075 	CSmsBuffer* buffer = CSmsBuffer::NewL();
  3069 	CSmsMessage* smsMessage = CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver, buffer );
  3076 	CSmsMessage* smsMessage = CSmsMessage::NewL(iFs, CSmsPDU::ESmsDeliver, buffer );
  3183 
  3190 
  3184 @internalComponent
  3191 @internalComponent
  3185 */
  3192 */
  3186 void CClass0SmsReassemblyStore::SetIncompleteMessageForwardedToClientL(const CSmsMessage& aSmsMessage)
  3193 void CClass0SmsReassemblyStore::SetIncompleteMessageForwardedToClientL(const CSmsMessage& aSmsMessage)
  3187 	{
  3194 	{
  3188 	LOGSMSPROT1("CClass0SmsReassemblyStore::SetIncompleteMessageForwardedToClientL()");
  3195 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_SETINCOMPLETEMESSAGEFORWARDEDTOCLIENTL_1, "CClass0SmsReassemblyStore::SetIncompleteMessageForwardedToClientL()");
  3189 	TInt index = KErrNotFound;
  3196 	TInt index = KErrNotFound;
  3190 
  3197 
  3191 	if (aSmsMessage.IsComplete())
  3198 	if (aSmsMessage.IsComplete())
  3192 		{
  3199 		{
  3193 		LOGSMSPROT1("This function must be called when message is incomplete");
  3200 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_SETINCOMPLETEMESSAGEFORWARDEDTOCLIENTL_2, "This function must be called when message is incomplete");
  3194 		User::Leave(KErrArgument);
  3201 		User::Leave(KErrArgument);
  3195 		}
  3202 		}
  3196 
  3203 
  3197 	if (FindMessageL(aSmsMessage, EFalse, index))
  3204 	if (FindMessageL(aSmsMessage, EFalse, index))
  3198 		{
  3205 		{
  3244 
  3251 
  3245 @internalComponent
  3252 @internalComponent
  3246 */
  3253 */
  3247 TInt CClass0SmsReassemblyStore::CleanReassemblyEntries()
  3254 TInt CClass0SmsReassemblyStore::CleanReassemblyEntries()
  3248 	{
  3255 	{
  3249 	LOGSMSPROT1("CleanReassemblyEntries");
  3256 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_CLEANREASSEMBLYENTRIES_1, "CleanReassemblyEntries");
  3250 	const CArrayFix<TSmsPreAllocatedFileStoreReassemblyEntry>& preAllocatedFileEntryArray = iPreallocatedFile->Entries();
  3257 	const CArrayFix<TSmsPreAllocatedFileStoreReassemblyEntry>& preAllocatedFileEntryArray = iPreallocatedFile->Entries();
  3251 	TInt ret=KErrNone;
  3258 	TInt ret=KErrNone;
  3252 	TRAP(ret,	BeginTransactionLC();
  3259 	TRAP(ret,	BeginTransactionLC();
  3253 				iPermanentFileStore->CleanupEntriesL(preAllocatedFileEntryArray);
  3260 				iPermanentFileStore->CleanupEntriesL(preAllocatedFileEntryArray);
  3254 				CommitTransactionL(););
  3261 				CommitTransactionL(););
  3255 
  3262 
  3256 	if (ret == KErrDiskFull)
  3263 	if (ret == KErrDiskFull)
  3257 		{
  3264 		{
  3258 		LOGSMSPROT1("CleanupEntriesL returns KErrDiskFull");
  3265 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_CLEANREASSEMBLYENTRIES_2, "CleanupEntriesL returns KErrDiskFull");
  3259 		/*
  3266 		/*
  3260 		Get access to reserve memory, call again to clean the entries with compact.
  3267 		Get access to reserve memory, call again to clean the entries with compact.
  3261 		Compact needs to be called at this instance because permanent store
  3268 		Compact needs to be called at this instance because permanent store
  3262 		will use reserve disk space to delete, but after deletion reserve
  3269 		will use reserve disk space to delete, but after deletion reserve
  3263 		disk space will be freed. So compact will make sure that reserve disk
  3270 		disk space will be freed. So compact will make sure that reserve disk
  3265 		*/
  3272 		*/
  3266 		iFs.GetReserveAccess(KStoreDrive);
  3273 		iFs.GetReserveAccess(KStoreDrive);
  3267 		TRAP(ret,	BeginTransactionLC();
  3274 		TRAP(ret,	BeginTransactionLC();
  3268 					iPermanentFileStore->CleanupEntriesWithCompactL(preAllocatedFileEntryArray);
  3275 					iPermanentFileStore->CleanupEntriesWithCompactL(preAllocatedFileEntryArray);
  3269 					CommitTransactionL(););
  3276 					CommitTransactionL(););
  3270 		LOGSMSPROT2("CleanupEntriesWithCompactL returns %d", ret);
  3277 		OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_CLEANREASSEMBLYENTRIES_3, "CleanupEntriesWithCompactL returns %d", ret);
  3271 		iFs.ReleaseReserveAccess(KStoreDrive);
  3278 		iFs.ReleaseReserveAccess(KStoreDrive);
  3272 		}
  3279 		}
  3273 	return ret;
  3280 	return ret;
  3274 	}
  3281 	}
  3275 
  3282 
  3285 
  3292 
  3286 @internalComponent
  3293 @internalComponent
  3287 */
  3294 */
  3288 void CClass0SmsReassemblyStore::GetSmsEntriesL(const TReassemblyEntry& aEntry, CSmsMessage& aSmsMessage, CArrayFix<TInt>& aIndexArray, CArrayFix<TGsmSms>& aSmsArray)
  3295 void CClass0SmsReassemblyStore::GetSmsEntriesL(const TReassemblyEntry& aEntry, CSmsMessage& aSmsMessage, CArrayFix<TInt>& aIndexArray, CArrayFix<TGsmSms>& aSmsArray)
  3289 	{
  3296 	{
  3290 	LOGSMSPROT1("CClass0SmsReassemblyStore::GetSmsEntriesL()");
  3297 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_GETSMSENTRIESL_1, "CClass0SmsReassemblyStore::GetSmsEntriesL()");
  3291 	TInt permanentStoreIndex=KErrNotFound;
  3298 	TInt permanentStoreIndex=KErrNotFound;
  3292 	iPermanentFileStore->MatchEntryToExistingMessage(aEntry, permanentStoreIndex);
  3299 	iPermanentFileStore->MatchEntryToExistingMessage(aEntry, permanentStoreIndex);
  3293 	if (permanentStoreIndex!=KErrNotFound)
  3300 	if (permanentStoreIndex!=KErrNotFound)
  3294 		{
  3301 		{
  3295 		iPermanentFileStore->InternalizeEntryL(permanentStoreIndex, aSmsMessage, aIndexArray, aSmsArray);
  3302 		iPermanentFileStore->InternalizeEntryL(permanentStoreIndex, aSmsMessage, aIndexArray, aSmsArray);
  3296 		}
  3303 		}
  3297 	else
  3304 	else
  3298 		{
  3305 		{
  3299 		LOGSMSPROT1("No PDUs in Permanent store file");
  3306 		OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_GETSMSENTRIESL_2, "No PDUs in Permanent store file");
  3300 		}
  3307 		}
  3301 
  3308 
  3302 	TInt preAllocatedFileIndex=KErrNotFound;
  3309 	TInt preAllocatedFileIndex=KErrNotFound;
  3303 	iPreallocatedFile->MatchEntryToExistingMessage(aEntry, preAllocatedFileIndex);
  3310 	iPreallocatedFile->MatchEntryToExistingMessage(aEntry, preAllocatedFileIndex);
  3304 	if (preAllocatedFileIndex!=KErrNotFound)
  3311 	if (preAllocatedFileIndex!=KErrNotFound)
  3328 
  3335 
  3329 		if (permanentStoreIndex==KErrNotFound)
  3336 		if (permanentStoreIndex==KErrNotFound)
  3330 			{
  3337 			{
  3331 			//In this scenario a CSmsMessage object has to be created from the existing PDU in
  3338 			//In this scenario a CSmsMessage object has to be created from the existing PDU in
  3332 			//pre-allocated file & then serialized into aSmsMessage.
  3339 			//pre-allocated file & then serialized into aSmsMessage.
  3333 			LOGSMSPROT2("Number of PDUs in Pre-allocated file %d", aIndexArray.Count());
  3340 			OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_GETSMSENTRIESL_3, "Number of PDUs in Pre-allocated file %d", aIndexArray.Count());
  3334 			if (aIndexArray.Count() > 0)
  3341 			if (aIndexArray.Count() > 0)
  3335 				{
  3342 				{
  3336 				CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
  3343 				CSmsBuffer* smsBuffer = CSmsBuffer::NewL();
  3337 				CSmsMessage* smsMessage = CSmsMessage::NewL(iFs, aSmsArray.At(0), smsBuffer, EFalse, ETrue);
  3344 				CSmsMessage* smsMessage = CSmsMessage::NewL(iFs, aSmsArray.At(0), smsBuffer, EFalse, ETrue);
  3338 				CleanupStack::PushL(smsMessage);
  3345 				CleanupStack::PushL(smsMessage);
  3501 /**
  3508 /**
  3502  *  Utility func for cleanup stack
  3509  *  Utility func for cleanup stack
  3503  */
  3510  */
  3504 void CClass0StoreCloseObject(TAny* aObj)
  3511 void CClass0StoreCloseObject(TAny* aObj)
  3505 	{
  3512 	{
  3506 	LOGGSMU2("WARNING! Hey, CClass0StoreCloseObject called by Untrapper! [0x%08x]", aObj);
  3513 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0STORECLOSEOBJECT_1, "WARNING! Hey, CClass0StoreCloseObject called by Untrapper! [0x%08x]", (TUint)aObj);
  3507 	((CClass0SmsReassemblyStore*)aObj)->Revert();
  3514 	((CClass0SmsReassemblyStore*)aObj)->Revert();
  3508 	}
  3515 	}
  3509 
  3516 
  3510 /**
  3517 /**
  3511  *  Sets the class 0 re-assembly store as in-transaction.
  3518  *  Sets the class 0 re-assembly store as in-transaction.
  3514  *  invalid.
  3521  *  invalid.
  3515  *  @capability None
  3522  *  @capability None
  3516  */
  3523  */
  3517 void CClass0SmsReassemblyStore::BeginTransactionLC()
  3524 void CClass0SmsReassemblyStore::BeginTransactionLC()
  3518 	{
  3525 	{
  3519 	LOGSMSPROT3("CClass0SmsReassemblyStore::BeginTransactionLC [this=0x%08X iInTransaction=%d]", this, iInTransaction);
  3526 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_BEGINTRANSACTIONLC_1, "CClass0SmsReassemblyStore::BeginTransactionLC [this=0x%08X iInTransaction=%d]", (TUint)this, iInTransaction);
  3520 
  3527 
  3521 	if (iInTransaction)
  3528 	if (iInTransaction)
  3522 		{
  3529 		{
  3523 	    LOGGSMU1("WARNING CClass0SmsReassemblyStore::BeginTransactionLC leaving with KErrAccessDenied");
  3530 	    OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_BEGINTRANSACTIONLC_2, "WARNING CClass0SmsReassemblyStore::BeginTransactionLC leaving with KErrAccessDenied");
  3524 		User::Leave(KErrAccessDenied);
  3531 		User::Leave(KErrAccessDenied);
  3525 		}
  3532 		}
  3526 
  3533 
  3527 	TCleanupItem class0StoreClose(CClass0StoreCloseObject, this);
  3534 	TCleanupItem class0StoreClose(CClass0StoreCloseObject, this);
  3528 	CleanupStack::PushL(class0StoreClose);
  3535 	CleanupStack::PushL(class0StoreClose);
  3534 /**
  3541 /**
  3535  *  It commits the transaction.
  3542  *  It commits the transaction.
  3536  */
  3543  */
  3537 void CClass0SmsReassemblyStore::CommitTransactionL()
  3544 void CClass0SmsReassemblyStore::CommitTransactionL()
  3538 	{
  3545 	{
  3539 	LOGSMSPROT3("CClass0SmsReassemblyStore::CommitTransactionL(): this=0x%08X iInTransaction=%d",
  3546 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_COMMITTRANSACTIONL_1, "CClass0SmsReassemblyStore::CommitTransactionL(): this=0x%08X iInTransaction=%d",(TUint)this, iInTransaction);
  3540 				this, iInTransaction);
       
  3541 
  3547 
  3542 	//Commit permanent store file
  3548 	//Commit permanent store file
  3543 	iPermanentFileStore->CommitTransactionL();
  3549 	iPermanentFileStore->CommitTransactionL();
  3544 	//Commit pre-allocated file
  3550 	//Commit pre-allocated file
  3545 	iPreallocatedFile->CommitTransactionL();
  3551 	iPreallocatedFile->CommitTransactionL();
  3550 /**
  3556 /**
  3551  *  It reverts the transaction.
  3557  *  It reverts the transaction.
  3552  */
  3558  */
  3553 void CClass0SmsReassemblyStore::Revert()
  3559 void CClass0SmsReassemblyStore::Revert()
  3554 	{
  3560 	{
  3555 	LOGSMSPROT3("CClass0SmsReassemblyStore::Revert(): this=0x%08X, iInTransaction=%d",
  3561 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CCLASS0SMSREASSEMBLYSTORE_REVERT_1, "CClass0SmsReassemblyStore::Revert(): this=0x%08X, iInTransaction=%d",(TUint)this, iInTransaction);
  3556     		 this, iInTransaction);
       
  3557 
  3562 
  3558 	iPreallocatedFile->Revert();
  3563 	iPreallocatedFile->Revert();
  3559 	iPermanentFileStore->Revert();
  3564 	iPermanentFileStore->Revert();
  3560 	iInTransaction = EFalse;
  3565 	iInTransaction = EFalse;
  3561 	}
  3566 	}