smsprotocols/smsstack/smsprot/Src/smspreassemblystore.cpp
branchRCL_3
changeset 65 630d2f34d719
parent 0 3553901f7fa8
child 66 07a122eea281
equal deleted inserted replaced
61:17af172ffa5f 65: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".
    11 // Contributors:
    11 // Contributors:
    12 //
    12 //
    13 // Description:
    13 // Description:
    14 //
    14 //
    15 
    15 
       
    16 
       
    17 #include "OstTraceDefinitions.h"
       
    18 #ifdef OST_TRACE_COMPILER_IN_USE
       
    19 #include "smspreassemblystoreTraces.h"
       
    20 #endif
       
    21 
    16 #include "smsstacklog.h"
    22 #include "smsstacklog.h"
    17 #include "gsmubuf.h"
    23 #include "gsmubuf.h"
    18 #include "smspreassemblystore.h"
    24 #include "smspreassemblystore.h"
    19 
    25 
    20 /**
    26 /**
    23  *  @param aSmsMessage refernce to sms message.
    29  *  @param aSmsMessage refernce to sms message.
    24  *	@param aNumSmss number of sms.
    30  *	@param aNumSmss number of sms.
    25  */
    31  */
    26 void CReassemblyStoreUtility::PopulateEntry(TSmsReassemblyEntry& aEntry,const CSmsMessage& aSmsMessage,TInt aNumSmss)
    32 void CReassemblyStoreUtility::PopulateEntry(TSmsReassemblyEntry& aEntry,const CSmsMessage& aSmsMessage,TInt aNumSmss)
    27 	{
    33 	{
    28 	LOGSMSPROT1("CReassemblyStoreUtility::PopulateEntry");
    34 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTOREUTILITY_POPULATEENTRY_1, "CReassemblyStoreUtility::PopulateEntry");
    29 	aEntry.SetReference(0);
    35 	aEntry.SetReference(0);
    30 	aEntry.SetTotal(1);
    36 	aEntry.SetTotal(1);
    31 	aEntry.SetCount(1);
    37 	aEntry.SetCount(1);
    32 
    38 
    33 	if (aSmsMessage.TextPresent())
    39 	if (aSmsMessage.TextPresent())
    85  *  @param aFs File Server handle.
    91  *  @param aFs File Server handle.
    86  *  @param aPath (retrurns) private path of the component.
    92  *  @param aPath (retrurns) private path of the component.
    87  */
    93  */
    88 void CReassemblyStoreUtility::PrivatePath(RFs& aFs, TDes& aPath)
    94 void CReassemblyStoreUtility::PrivatePath(RFs& aFs, TDes& aPath)
    89 	{
    95 	{
    90 	LOGSMSPROT1("CReassemblyStoreUtility::PrivatePath()");
    96 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTOREUTILITY_PRIVATEPATH_1, "CReassemblyStoreUtility::PrivatePath()");
    91 
    97 
    92 	TDriveUnit driveUnit(KStoreDrive);
    98 	TDriveUnit driveUnit(KStoreDrive);
    93 	TDriveName drive=driveUnit.Name();
    99 	TDriveName drive=driveUnit.Name();
    94 	aPath.Insert(0, drive);
   100 	aPath.Insert(0, drive);
    95 	//append private path
   101 	//append private path
   122 
   128 
   123 @internalComponent
   129 @internalComponent
   124 */
   130 */
   125 void CReassemblyStore::InitializeL()
   131 void CReassemblyStore::InitializeL()
   126 	{
   132 	{
   127 	LOGSMSPROT1("CClass0SmsReassemblyStore::InitializeL()");
   133 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_INITIALIZEL_1, "CClass0SmsReassemblyStore::InitializeL()");
   128 	// Initialize Re-assembly store.
   134 	// Initialize Re-assembly store.
   129 	OpenStoreL();
   135 	OpenStoreL();
   130 	BeginTransactionLC();
   136 	BeginTransactionLC();
   131 	TInt count = iEntryArray.Count();
   137 	TInt count = iEntryArray.Count();
   132 	while (count--)
   138 	while (count--)
   163  *  @param aPurgeIncompleteOnly Purge complete messages flag
   169  *  @param aPurgeIncompleteOnly Purge complete messages flag
   164  */
   170  */
   165 void CReassemblyStore::PurgeL(const TTimeIntervalMinutes& aTimeIntervalMinutes,TBool aPurgeIncompleteOnly)
   171 void CReassemblyStore::PurgeL(const TTimeIntervalMinutes& aTimeIntervalMinutes,TBool aPurgeIncompleteOnly)
   166 	{
   172 	{
   167 	//Call purging function
   173 	//Call purging function
   168 	LOGSMSPROT3("CReassemblyStore::PurgeL(): aTimeIntervalMinutes=%d, aPurgeIncompleteOnly=%d",
   174 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_PURGEL_1, "CReassemblyStore::PurgeL(): aTimeIntervalMinutes=%d, aPurgeIncompleteOnly=%d",aTimeIntervalMinutes.Int(), aPurgeIncompleteOnly);
   169 			 aTimeIntervalMinutes.Int(), aPurgeIncompleteOnly);
       
   170 
   175 
   171 	// TODO - flag
   176 	// TODO - flag
   172 	// we could also save the call of the method from the consruction of the smsprot
   177 	// we could also save the call of the method from the consruction of the smsprot
   173 	if( aPurgeIncompleteOnly )
   178 	if( aPurgeIncompleteOnly )
   174 		return;
   179 		return;
   175 
   180 
   176 	TInt count=iEntryArray.Count();
   181 	TInt count=iEntryArray.Count();
   177 	LOGSMSPROT2("CClass0SmsReassemblyStore::PurgeL(): count=%d", count);
   182 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_PURGEL_2, "CClass0SmsReassemblyStore::PurgeL(): count=%d", count);
   178 
   183 
   179 	TTime time;
   184 	TTime time;
   180 	time.UniversalTime();
   185 	time.UniversalTime();
   181 
   186 
   182 	// we open the file outside the loop
   187 	// we open the file outside the loop
   207 */
   212 */
   208 void CReassemblyStore::DeleteEnumeratedSIMEntries()
   213 void CReassemblyStore::DeleteEnumeratedSIMEntries()
   209 	{
   214 	{
   210 	const TInt count = iEntryArray.Count();
   215 	const TInt count = iEntryArray.Count();
   211 
   216 
   212 	LOGSMSPROT2("CReassemblyStore::DeleteEnumeratedSIMEntries(): %d messages in RAS", count);
   217 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_DELETEENUMERATEDSIMENTRIES_1, "CReassemblyStore::DeleteEnumeratedSIMEntries(): %d messages in RAS", count);
   213 
   218 
   214 	TInt index;
   219 	TInt index;
   215 
   220 
   216 	for (index = count-1;  index >= 0;  --index)
   221 	for (index = count-1;  index >= 0;  --index)
   217 		{
   222 		{
   232 
   237 
   233 @internalComponent
   238 @internalComponent
   234 */
   239 */
   235 TInt CReassemblyStore::NumberOfCompleteMessages()
   240 TInt CReassemblyStore::NumberOfCompleteMessages()
   236 	{
   241 	{
   237 	LOGSMSPROT2("CReassemblyStore::NumberOfCompleteMessages(): iEntryArray.Count()=%d",
   242 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_NUMBEROFCOMPLETEMESSAGES_1, "CReassemblyStore::NumberOfCompleteMessages(): iEntryArray.Count()=%d",iEntryArray.Count());
   238 				iEntryArray.Count());
       
   239 
   243 
   240 	//local variable for complete entries
   244 	//local variable for complete entries
   241 	TInt count( 0 );
   245 	TInt count( 0 );
   242 	// checks all entrys in the reassembly store
   246 	// checks all entrys in the reassembly store
   243 	for ( TInt i = iEntryArray.Count()-1; i >= 0; i-- )
   247 	for ( TInt i = iEntryArray.Count()-1; i >= 0; i-- )
   288 
   292 
   289 @internalComponent
   293 @internalComponent
   290 */
   294 */
   291 void CReassemblyStore::AddSegmentToReassemblyStoreL(CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms, TInt& aIndex, TBool& aIsComplete, TBool aIsEnumeration, TInt& aCount, TInt& aTotal)
   295 void CReassemblyStore::AddSegmentToReassemblyStoreL(CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms, TInt& aIndex, TBool& aIsComplete, TBool aIsEnumeration, TInt& aCount, TInt& aTotal)
   292 	{
   296 	{
   293 	LOGSMSPROT2("CReassemblyStore::AddSegmentToReassemblyStoreL(): isComplete Message=%d",
   297 	OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_ADDSEGMENTTOREASSEMBLYSTOREL_1, "CReassemblyStore::AddSegmentToReassemblyStoreL(): isComplete Message=%d",aSmsMessage.IsComplete());
   294 				aSmsMessage.IsComplete());
       
   295 
   298 
   296 	/*
   299 	/*
   297 	(1) If it is a single segment message create a new message
   300 	(1) If it is a single segment message create a new message
   298 	(2) If it is part of concatenated message find whether this is the first PDU
   301 	(2) If it is part of concatenated message find whether this is the first PDU
   299 	or it is the part of existing message.
   302 	or it is the part of existing message.
   322 		// Search the reassembly store for existing parts of the message.
   325 		// Search the reassembly store for existing parts of the message.
   323 		//
   326 		//
   324 		TInt  segStoreIndex(KErrNotFound);
   327 		TInt  segStoreIndex(KErrNotFound);
   325 
   328 
   326 		MatchPDUToExistingMessage(aSmsMessage, segStoreIndex);
   329 		MatchPDUToExistingMessage(aSmsMessage, segStoreIndex);
   327 		LOGSMSPROT2("CSmsReassemblyStore::AddSegmentToReassemblyStoreL(): "
   330 		OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_ADDSEGMENTTOREASSEMBLYSTOREL_2, "CSmsReassemblyStore::AddSegmentToReassemblyStoreL(): ""segStoreIndex=%d", segStoreIndex);
   328 					"segStoreIndex=%d", segStoreIndex);
       
   329 
   331 
   330 		//
   332 		//
   331 		// If not yet complete, then we must be part of a multiple PDU message.
   333 		// If not yet complete, then we must be part of a multiple PDU message.
   332 		// Search the reassembly store for existing parts of the message. This
   334 		// Search the reassembly store for existing parts of the message. This
   333 		// may set iIsComplete to true if all segments are then found.
   335 		// may set iIsComplete to true if all segments are then found.
   342 			//
   344 			//
   343 			aIndex = segStoreIndex;
   345 			aIndex = segStoreIndex;
   344 			UpdateExistingMessageL(aSmsMessage, aGsmSms, aIndex,
   346 			UpdateExistingMessageL(aSmsMessage, aGsmSms, aIndex,
   345 									aIsComplete, isDuplicateMsgRef,
   347 									aIsComplete, isDuplicateMsgRef,
   346 									isDuplicateSlot);
   348 									isDuplicateSlot);
   347 			LOGSMSPROT5("CSmsReassemblyStore::AddSegmentToReassemblyStoreL(): "
   349 			OstTraceDefExt4(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_ADDSEGMENTTOREASSEMBLYSTOREL_3, "CSmsReassemblyStore::AddSegmentToReassemblyStoreL(): ""aIndex=%d, isComplete=%d, isDuplicateMsgRef=%d, isDuplicateSlot=%d",aIndex, aIsComplete, isDuplicateMsgRef, isDuplicateSlot);
   348 						"aIndex=%d, isComplete=%d, isDuplicateMsgRef=%d, isDuplicateSlot=%d",
       
   349 						aIndex, aIsComplete, isDuplicateMsgRef, isDuplicateSlot);
       
   350 
   350 
   351 			if (isDuplicateMsgRef)
   351 			if (isDuplicateMsgRef)
   352 				{
   352 				{
   353 				//
   353 				//
   354 				// In most cases discard it, unless we are doing an enumeration???
   354 				// In most cases discard it, unless we are doing an enumeration???
   411 
   411 
   412 @internalComponent
   412 @internalComponent
   413 */
   413 */
   414 void CReassemblyStore::DeleteMessageL(const CSmsMessage& aSmsMessage, TBool aPassed)
   414 void CReassemblyStore::DeleteMessageL(const CSmsMessage& aSmsMessage, TBool aPassed)
   415 	{
   415 	{
   416 	LOGSMSPROT1("CReassemblyStore::DeleteMessageL()");
   416 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_DELETEMESSAGEL_1, "CReassemblyStore::DeleteMessageL()");
   417 	TInt index(0);
   417 	TInt index(0);
   418 	BeginTransactionLC();
   418 	BeginTransactionLC();
   419 	if (FindMessageL(aSmsMessage, aPassed, index))
   419 	if (FindMessageL(aSmsMessage, aPassed, index))
   420 		{
   420 		{
   421 		const TReassemblyEntry&  entry = iEntryArray[index];
   421 		const TReassemblyEntry&  entry = iEntryArray[index];
   433 
   433 
   434 @internalComponent
   434 @internalComponent
   435 */
   435 */
   436 void CReassemblyStore::UpdateLogServerIdOfMessageL(const CSmsMessage& aSmsMessage, TInt aIndex)
   436 void CReassemblyStore::UpdateLogServerIdOfMessageL(const CSmsMessage& aSmsMessage, TInt aIndex)
   437 	{
   437 	{
   438 	LOGSMSPROT1("CReassemblyStore::UpdateLogServerIdOfMessageL()");
   438 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_UPDATELOGSERVERIDOFMESSAGEL_1, "CReassemblyStore::UpdateLogServerIdOfMessageL()");
   439     TInt  foundIndex(KErrNotFound);
   439     TInt  foundIndex(KErrNotFound);
   440 	TBool  found(EFalse);
   440 	TBool  found(EFalse);
   441 
   441 
   442 	BeginTransactionLC();
   442 	BeginTransactionLC();
   443 
   443 
   458 
   458 
   459 @internalComponent
   459 @internalComponent
   460 */
   460 */
   461 void CReassemblyStore::SetMessagePassedToClientL(const CSmsMessage& aSmsMessage, TBool aPassed)
   461 void CReassemblyStore::SetMessagePassedToClientL(const CSmsMessage& aSmsMessage, TBool aPassed)
   462 	{
   462 	{
   463 	LOGSMSPROT1("CReassemblyStore::SetMessagePassedToClientL()");
   463 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_SETMESSAGEPASSEDTOCLIENTL_1, "CReassemblyStore::SetMessagePassedToClientL()");
   464 	TInt index(0);
   464 	TInt index(0);
   465 
   465 
   466 	BeginTransactionLC();
   466 	BeginTransactionLC();
   467 
   467 
   468 	if (FindMessageL(aSmsMessage , !aPassed, index))
   468 	if (FindMessageL(aSmsMessage , !aPassed, index))
   488 
   488 
   489 @internalComponent
   489 @internalComponent
   490 */
   490 */
   491 void CReassemblyStore::NewMessagePDUL(TInt& aIndex,CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
   491 void CReassemblyStore::NewMessagePDUL(TInt& aIndex,CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms)
   492 	{
   492 	{
   493 	LOGSMSPROT1("CReassemblyStore::NewMessagePDUL");
   493 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_NEWMESSAGEPDUL_1, "CReassemblyStore::NewMessagePDUL");
   494 
   494 
   495 	if (aSmsMessage.Time() >= iLastRealTime)
   495 	if (aSmsMessage.Time() >= iLastRealTime)
   496 		{
   496 		{
   497 		iLastRealTime=aSmsMessage.Time();
   497 		iLastRealTime=aSmsMessage.Time();
   498 		if(iLastReceivedTime >= aSmsMessage.Time())
   498 		if(iLastReceivedTime >= aSmsMessage.Time())
   543 */
   543 */
   544 void CReassemblyStore::UpdateExistingMessageL(CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms,
   544 void CReassemblyStore::UpdateExistingMessageL(CSmsMessage& aSmsMessage,const TGsmSms& aGsmSms,
   545 												TInt aIndex, TBool& aIsComplete,
   545 												TInt aIndex, TBool& aIsComplete,
   546 												TBool& aDuplicateMsgRef, TBool& aDuplicateSlot)
   546 												TBool& aDuplicateMsgRef, TBool& aDuplicateSlot)
   547 	{
   547 	{
   548 	LOGSMSPROT1("CReassemblyStore::UpdateExistingMessageL");
   548 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_UPDATEEXISTINGMESSAGEL_1, "CReassemblyStore::UpdateExistingMessageL");
   549 	aIsComplete = EFalse;
   549 	aIsComplete = EFalse;
   550 	BeginTransactionLC();
   550 	BeginTransactionLC();
   551 	UpdateExistingMessageL(aSmsMessage, aGsmSms, aDuplicateMsgRef, aDuplicateSlot);
   551 	UpdateExistingMessageL(aSmsMessage, aGsmSms, aDuplicateMsgRef, aDuplicateSlot);
   552 	CommitTransactionL();
   552 	CommitTransactionL();
   553 	if ((aDuplicateMsgRef == EFalse) && (aDuplicateSlot==EFalse))
   553 	if ((aDuplicateMsgRef == EFalse) && (aDuplicateSlot==EFalse))
   572 @internalComponent
   572 @internalComponent
   573 */
   573 */
   574 void CReassemblyStore::MatchPDUToExistingMessage(const CSmsMessage& aSmsMessage,
   574 void CReassemblyStore::MatchPDUToExistingMessage(const CSmsMessage& aSmsMessage,
   575 													TInt& aIndex)
   575 													TInt& aIndex)
   576 	{
   576 	{
   577 	LOGSMSPROT1("CReassemblyStore::MatchPDUToExistingMessage()");
   577 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_MATCHPDUTOEXISTINGMESSAGE_1, "CReassemblyStore::MatchPDUToExistingMessage()");
   578 
   578 
   579 	aIndex = KErrNotFound;
   579 	aIndex = KErrNotFound;
   580 
   580 
   581 	TGsmSmsTelNumber  parsedAddress;
   581 	TGsmSmsTelNumber  parsedAddress;
   582 	aSmsMessage.ParsedToFromAddress(parsedAddress);
   582 	aSmsMessage.ParsedToFromAddress(parsedAddress);
   609 				break;
   609 				break;
   610 				}
   610 				}
   611 			}
   611 			}
   612 		}
   612 		}
   613 
   613 
   614 	LOGSMSPROT3("CReassemblyStore::MatchPDUToExistingMessage(): reassemblyCount=%d, aIndex=%d", reassemblyCount, aIndex);
   614 	OstTraceDefExt2(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_MATCHPDUTOEXISTINGMESSAGE_2, "CReassemblyStore::MatchPDUToExistingMessage(): reassemblyCount=%d, aIndex=%d", reassemblyCount, aIndex);
   615 	} // CReassemblyStore::MatchPDUToExistingMessage
   615 	} // CReassemblyStore::MatchPDUToExistingMessage
   616 
   616 
   617 /**
   617 /**
   618 It retrieves the message from re-assembly store.
   618 It retrieves the message from re-assembly store.
   619 
   619 
   625 
   625 
   626 @internalComponent
   626 @internalComponent
   627 */
   627 */
   628 void CReassemblyStore::GetMessageL(TInt aIndex, CSmsMessage& aSmsMessage)
   628 void CReassemblyStore::GetMessageL(TInt aIndex, CSmsMessage& aSmsMessage)
   629 	{
   629 	{
   630 	LOGSMSPROT1("CReassemblyStore::GetMessageL()");
   630 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_GETMESSAGEL_1, "CReassemblyStore::GetMessageL()");
   631 	const TReassemblyEntry&  entry = iEntryArray[aIndex];
   631 	const TReassemblyEntry&  entry = iEntryArray[aIndex];
   632 	RetrieveMessageL(entry, aSmsMessage);
   632 	RetrieveMessageL(entry, aSmsMessage);
   633 	}
   633 	}
   634 
   634 
   635 /**
   635 /**
   645  */
   645  */
   646 TBool CReassemblyStore::FindMessageL(const CSmsMessage& aSmsMessage,
   646 TBool CReassemblyStore::FindMessageL(const CSmsMessage& aSmsMessage,
   647 										TBool aPassed,
   647 										TBool aPassed,
   648 										TInt& aIndex)
   648 										TInt& aIndex)
   649  	{
   649  	{
   650 	LOGSMSPROT1("CReassemblyStore::FindMessageL()");
   650 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_FINDMESSAGEL_1, "CReassemblyStore::FindMessageL()");
   651 
   651 
   652 	//
   652 	//
   653 	// Parse the GSM data from the SMS message...
   653 	// Parse the GSM data from the SMS message...
   654 	//
   654 	//
   655 	TGsmSmsTelNumber  parsedAddress;
   655 	TGsmSmsTelNumber  parsedAddress;
   671 			entry.Description2().Right(8) == parsedAddress.iTelNumber.Right(8))
   671 			entry.Description2().Right(8) == parsedAddress.iTelNumber.Right(8))
   672  			{
   672  			{
   673 			//
   673 			//
   674 			// Found!
   674 			// Found!
   675 			//
   675 			//
   676 			LOGSMSPROT2("CReassemblyStore::FindMessage(): Found! index=%d", index);
   676 			OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_FINDMESSAGEL_2, "CReassemblyStore::FindMessage(): Found! index=%d", index);
   677 
   677 
   678 			aIndex = index;
   678 			aIndex = index;
   679 			
   679 			
   680 			return ETrue;
   680 			return ETrue;
   681 			}
   681 			}
   682  		}
   682  		}
   683 
   683 
   684 	//
   684 	//
   685 	// Not found...
   685 	// Not found...
   686 	//
   686 	//
   687 	LOGSMSPROT1("CReassemblyStore::FindMessage(): Not found!");
   687 	OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CREASSEMBLYSTORE_FINDMESSAGEL_3, "CReassemblyStore::FindMessage(): Not found!");
   688 
   688 
   689 	return EFalse;
   689 	return EFalse;
   690 	} // CReassemblyStore::FindMessageL
   690 	} // CReassemblyStore::FindMessageL