diff -r 510c70acdbf6 -r 8ccc39f9d787 adaptationlayer/tsy/nokiatsy_dll/src/cmmphonebookoperationread.cpp --- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonebookoperationread.cpp Mon Nov 09 10:36:19 2009 +0000 +++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonebookoperationread.cpp Thu Jan 14 10:44:58 2010 +0200 @@ -24,9 +24,9 @@ #include "cmmmessagerouter.h" #include "cmmphonebookoperationread.h" #include "cmmphonebookoperationread3g_adn.h" -#include "osttracedefinitions.h" +#include "OstTraceDefinitions.h" #ifdef OST_TRACE_COMPILER_IN_USE -#include "cmmphonebookoperationreadtraces.h" +#include "cmmphonebookoperationreadTraces.h" #endif // EXTERNAL DATA STRUCTURES @@ -64,12 +64,13 @@ CMmPhoneBookOperationRead::CMmPhoneBookOperationRead() { - TFLOGSTRING("TSY: CMmPhoneBookOperationRead::CMmPhoneBookOperationRead"); +TFLOGSTRING("TSY: CMmPhoneBookOperationRead::CMmPhoneBookOperationRead"); OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD_CMMPHONEBOOKOPERATIONREAD, "CMmPhoneBookOperationRead::CMmPhoneBookOperationRead" ); iNumOfEntriesToRead = 0; iNumOfEntriesFilled = 0; iIndexToRead = 0; + iTypeOfReading = EBasicEfRead; } // ----------------------------------------------------------------------------- @@ -82,7 +83,7 @@ // None ) { - TFLOGSTRING("TSY: CMmPhoneBookOperationRead::~CMmPhoneBookOperationRead"); +TFLOGSTRING("TSY: CMmPhoneBookOperationRead::~CMmPhoneBookOperationRead"); OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD_CMMPHONEBOOKOPERATIONREAD, "CMmPhoneBookOperationRead::~CMmPhoneBookOperationRead" ); } @@ -95,10 +96,11 @@ CMmPhoneBookOperationRead* CMmPhoneBookOperationRead::NewL ( CMmPhoneBookStoreMessHandler* aMmPhoneBookStoreMessHandler, + CMmUiccMessHandler* aUiccMessHandler, const CMmDataPackage* aDataPackage // Data ) { - TFLOGSTRING("TSY: CMmPhoneBookOperationRead::NewL"); +TFLOGSTRING("TSY: CMmPhoneBookOperationRead::NewL"); OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD_NEWL, "CMmPhoneBookOperationRead::NewL" ); TName phonebookTypeName; @@ -110,12 +112,16 @@ static_cast( aDataPackage ); phoneBookData->GetPhoneBookName( phonebookTypeName ); - - mmPhoneBookOperationRead->iTransactionId = ETrIdPbRead; - + + // Store phoen Book name + mmPhoneBookOperationRead->iPhoneBookTypeName = phonebookTypeName; + // get the Transaction id for Phone book and operation combination + mmPhoneBookOperationRead->iLocationSearch = EFalse; mmPhoneBookOperationRead->iMmPhoneBookStoreMessHandler = aMmPhoneBookStoreMessHandler; + mmPhoneBookOperationRead->iMmUiccMessHandler = aUiccMessHandler; + return mmPhoneBookOperationRead; } @@ -129,7 +135,7 @@ // None ) { - TFLOGSTRING("TSY: CMmPhoneBookOperationRead::ConstructL"); +TFLOGSTRING("TSY: CMmPhoneBookOperationRead::ConstructL"); OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD_CONSTRUCTL, "CMmPhoneBookOperationRead::ConstructL" ); } @@ -144,10 +150,11 @@ TInt CMmPhoneBookOperationRead::UICCCreateReq ( TInt aIpc, - const CMmDataPackage* aDataPackage + const CMmDataPackage* aDataPackage, + TUint8 aTransId ) { - TFLOGSTRING("TSY: CMmPhoneBookOperationRead::UICCCreateReq"); +TFLOGSTRING("TSY: CMmPhoneBookOperationRead::UICCCreateReq"); OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD_UICCCREATEREQ, "CMmPhoneBookOperationRead::UICCCreateReq" ); TInt ret( KErrNotSupported ); @@ -155,9 +162,13 @@ const CPhoneBookDataPackage* phoneBookData = static_cast( aDataPackage ); + iSavedIPCForComplete = aIpc; + switch( aIpc ) { case EMmTsyPhoneBookStoreReadIPC: + case EMmTsyONStoreReadIPC: + case EMmTsyONStoreReadEntryIPC: { CArrayPtrSeg* prtToReadEntriesArray; RMobilePhoneBookStore::TPBIndexAndNumEntries* ptrToIndexAndEntries; @@ -172,38 +183,14 @@ iNumOfEntriesFilled = 0; iIndexToRead = ptrToIndexAndEntries->iIndex; - // get the Service type to be read - iServiceType = UICC_APPL_FILE_INFO; - - - // Handle ADN Phonebook - - - switch(iMmUiccMessHandler->GetCardType()) - { - case UICC_CARD_TYPE_ICC: - { - ret = USimPbReqRead( 0 ); - } - break; - case UICC_CARD_TYPE_UICC: - { - } - break; - case UICC_CARD_TYPE_UNKNOWN: - break; - default: - break; - } + ret = USimPbReqRead( iIndexToRead, aTransId ); } - break; } default: { // Nothing to do here - TFLOGSTRING2("TSY: CMmPhoneBookOperationRead::UICCCreateReq - \ - Unknown IPC: %d", aIpc); +TFLOGSTRING2("TSY: CMmPhoneBookOperationRead::UICCCreateReq - Unknown IPC: %d", aIpc); OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD_UICCCREATEREQ, "CMmPhoneBookOperationRead::UICCCreateReq;aIpc=%d", aIpc ); break; } @@ -220,184 +207,162 @@ // TInt CMmPhoneBookOperationRead::USimPbReqRead ( - TInt aRecordNo + TInt aRecordNo, + TUint8 aTransId ) { TFLOGSTRING("TSY: CMmPhoneBookOperationRead::USimPbReqRead"); OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD_USIMPBREQREAD, "CMmPhoneBookOperationRead::USimPbReqRead" ); TInt ret( KErrNone ); - // Get phonebook type from transactionId and convert it to USim pbtype - TUint16 simPhonebookType( ConvertToSimPhoneBookType( - iTransactionId & KMaskPhonebookType ) ); // Service type - // get the index to be read from phonebook TInt index( iIndexToRead ); TUiccReadLinearFixed cmdParams; - //cmdParams.messHandlerPtr = static_cast iMmPhoneBookStoreMessHandler; + cmdParams.messHandlerPtr = static_cast + ( iMmPhoneBookStoreMessHandler ); - cmdParams.filePath.Append(static_cast( MF_FILE >> 8 )); - cmdParams.filePath.Append(static_cast( MF_FILE )); - //cmdParams.filePath.Copy(aApplFieldId); - cmdParams.filePath.Append(static_cast( DF_PHONEBOOK >> 8 )); - cmdParams.filePath.Append(static_cast( DF_PHONEBOOK )); - + cmdParams.filePath.Append( static_cast( MF_FILE >> 8 )); + cmdParams.filePath.Append( static_cast( MF_FILE )); + cmdParams.filePath.Append( APPL_FILE_ID>>8); + cmdParams.filePath.Append( APPL_FILE_ID); + cmdParams.filePath.Append( static_cast( DF_PHONEBOOK >> 8 )); + cmdParams.filePath.Append( static_cast( DF_PHONEBOOK )); + cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; + cmdParams.record = aRecordNo; + cmdParams.trId = static_cast( aTransId ); + // Convert Phone Book name to file id + TUint16 fileIdExt ( 0x0000 ); + TUint16 pbFileId = ConvertToPBfileId( iPhoneBookTypeName, fileIdExt ); + TUint8 arrayIndex = ConvertToConfArrayIndex( pbFileId ); + // get the corect Location to be read from phone book - if( PB_MBDN_FID == simPhonebookType) + if( PB_MBDN_FID == pbFileId) { // Index to be read contains two types of information. // The least significant byte contains the profile number // and the most significant byte contains the type. index = index || 0x0100; // Only subscriber profile number 1 is supported - } - // Read phonebook elementary file to get the Entry information - if( !iExtensionRead ) - { - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = simPhonebookType; - - if( iServiceType == UICC_APPL_READ_LINEAR_FIXED ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - // Least significant byte gives the actual record no. to be read - cmdParams.record = aRecordNo; - } - else if(iServiceType == UICC_APPL_FILE_INFO) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - } - else - { - switch( simPhonebookType ) + if ( EMailboxIdRead == iTypeOfReading ) { - case PB_ADN_FID: - { - // For 2G ADN Phonebook EXT1 will be the extension number store - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = PB_EXT1_FID; - - if( UICC_APPL_READ_LINEAR_FIXED == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - cmdParams.record = aRecordNo; - } - else if( UICC_APPL_FILE_INFO == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - break; - } - case PB_FDN_FID: - { - // For FDN Phonebook EXT2 will be the extension number store - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = PB_EXT2_FID; - - if( UICC_APPL_READ_LINEAR_FIXED == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - cmdParams.record = aRecordNo; - } - else if( UICC_APPL_FILE_INFO == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - break; - } - case PB_SDN_FID: - { - // For SDN Phonebook EXT3 will be the extension number store - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = PB_EXT3_FID; - - if( UICC_APPL_READ_LINEAR_FIXED == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - cmdParams.record = aRecordNo; - } - else if( UICC_APPL_FILE_INFO == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - break; - } - case PB_BDN_FID: - { - // For BDN Phonebook EXT4 will be the extension number store - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = PB_EXT4_FID; - - if( UICC_APPL_READ_LINEAR_FIXED == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - cmdParams.record = aRecordNo; - } - else if( UICC_APPL_FILE_INFO == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - break; - } - case PB_MBDN_FID: - { - // For MBDN Phonebook EXT6 will be the extension number store - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = PB_EXT6_FID; - - if( UICC_APPL_READ_LINEAR_FIXED == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - cmdParams.record = aRecordNo; - } - else if( UICC_APPL_FILE_INFO == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - break; - } - case PB_MSISDN_FID: - { - // For MSISDN Phonebook EXT5 will be the extension number store - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = PB_EXT5_FID; - - if( UICC_APPL_READ_LINEAR_FIXED == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - cmdParams.record = aRecordNo; - } - else if( UICC_APPL_FILE_INFO == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - break; - } - case PB_VMBX_FID: - { - // For VMBX Phonebook EXT2 will be the extension number store - cmdParams.trId = ETrIdPbRead; - cmdParams.fileId = PB_EXT2_FID; - - if( UICC_APPL_READ_LINEAR_FIXED == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; - cmdParams.record = aRecordNo; - } - else if( UICC_APPL_FILE_INFO == iServiceType ) - { - cmdParams.serviceType = UICC_APPL_FILE_INFO; - } - break; - } + iTypeOfReading = EBasicEfRead; + } + else + { + iTypeOfReading = EMailboxIdRead; } } - ret = iMmPhoneBookStoreMessHandler->UiccMessHandler()-> - CreateUiccApplCmdReq( cmdParams ); - TFLOGSTRING2("TSY: CreateUiccApplCmdReq returns %d", ret); + // Check for Extension Data is Present or not + if ( EBasicEfRead == iTypeOfReading ) + { + cmdParams.fileId = pbFileId; + // Check for the record Number to be read is valid record number + if( iIndexToRead <= iMmPhoneBookStoreMessHandler-> + iPBStoreConf[arrayIndex].iNoOfRecords) + { + // Check for Number of Slots To be Read + if( iNumOfEntriesToRead > 0) + { + // Check for Valid PhoneBook Entry no. + if( iIndexToRead > 0) + { + // Read Request to read that index + cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; + cmdParams.record = iIndexToRead; + // till End of Record + cmdParams.dataAmount = 0; + // Start from begining of record + cmdParams.dataOffset = 0; + } + else + { + // Start from first location and Search for First Valid + // Entry in the Stored List and if some Entry is invalid + // then Read From Sim and Check the Staus its Free + // or not till Number of slots to be read equals to 0 + + // Read Request to read that index + cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; + // read First record + iIndexToRead = 1; + cmdParams.record = iIndexToRead; + // till End of Record + cmdParams.dataAmount = 0; + // Start from begining of record + cmdParams.dataOffset = 0; + + // Set Flag for first valid Entry location Search + iLocationSearch = ETrue; + } + } + } + else + { + // return error for invalid Entry (Out of max range idf entries) + ret = KErrArgument; + } + }// end of if case for checking extension data + else if ( EExtensionRead == iTypeOfReading ) + { + // Send Request to Read Extension Data + // Check for UST Table supports for EXT File + if ( iMmPhoneBookStoreMessHandler->iPBStoreConf[arrayIndex].iExtension ) + { + // Check for Extension data record in valid + if ( iMmPhoneBookStoreMessHandler-> + iPBStoreConf[arrayIndex].iExtNoOfRec >= aRecordNo ) + { + // Read Request to read that index + cmdParams.fileId = fileIdExt; + cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; + cmdParams.record = aRecordNo; + // till End of Record + cmdParams.dataAmount = 0; + // Start from begining of record + cmdParams.dataOffset = 0; + } + else + { + ret = KErrGeneral; + } + } + else + { + ret = KErrGeneral; + } + } + + else + { + // Read mailbox ID + if ( iMmPhoneBookStoreMessHandler-> + iPBStoreConf[arrayIndex].iExtNoOfRec >= aRecordNo ) + { + // Read Request to read MBI file + cmdParams.fileId = PB_MBI_FID; + cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; + cmdParams.record = aRecordNo; + // till End of Record + cmdParams.dataAmount = 0; + // Start from begining of record + cmdParams.dataOffset = 0; + } + else + { + ret = KErrGeneral; + } + } + + if( KErrNone == ret ) + { + ret = iMmPhoneBookStoreMessHandler->UiccMessHandler()-> + CreateUiccApplCmdReq( cmdParams ); +TFLOGSTRING2("TSY: CreateUiccApplCmdReq returns %d", ret); +OstTrace1( TRACE_NORMAL, DUP2_CMMPHONEBOOKOPERATIONREAD_USIMPBREQREAD, "CMmPhoneBookOperationRead::USimPbReqRead;ret=%d", ret ); + } + return ret; } @@ -407,210 +372,272 @@ // ----------------------------------------------------------------------------- -// CMmPhoneBookOperationRead::CreateReq +// CMmPhoneBookOperationRead::HandleUICCPbRespL // Separate request // ----------------------------------------------------------------------------- // -TInt CMmPhoneBookOperationRead::HandleUICCPbRespL +TBool CMmPhoneBookOperationRead::HandleUICCPbRespL ( - TBool & /*aComplete*/, TInt aStatus, + TUint8 /*aDetails*/, const TDesC8 &aFileData, TInt aTransId ) { - TFLOGSTRING("TSY: CMmPhoneBookOperationRead::HandleUICCPbRespL"); - OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead::HandleUICCPbRespL" ); +TFLOGSTRING("TSY: CMmPhoneBookOperationRead::HandleUICCPbRespL"); +OstTrace0( TRACE_NORMAL, CMMPHONEBOOKOPERATIONREAD_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead::HandleUICCPbRespL" ); + TBool complete( EFalse ); TInt ret(KErrNone); + TInt retExt(KErrNone); // Initialize Application file ID to send in next request TBuf8<2> applFieldId; - applFieldId.Append(0x7F); - applFieldId.Append(0x10); - - // Check for Error if returned from UICC Server + // Handle possible error case if ( UICC_STATUS_OK != aStatus ) { - TFLOGSTRING("TSY: CMmPhoneBookOperationRead::HandleUICCPbRespRead-\ - Unsuccessfully completed by SIMSON"); -//OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEBOOKOPERATIONREAD_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead::HandleUICCPbRespL, Unsuccessfully completed by UICC Server" ); +TFLOGSTRING("TSY: CMmPhoneBookOperationRead::HandleUICCPbRespL-Unsuccessfully completed by UICC"); +OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEBOOKOPERATIONREAD_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead::HandleUICCPbRespL. Unsuccessfully completed by UICC" ); + ret = CMmStaticUtility::UICCCSCauseToEpocError(aStatus ); } - - // Get phonebook type from transactionId and convert it to USim pbtype - TUint16 simPhonebookType( ConvertToSimPhoneBookType( - iTransactionId & KMaskPhonebookType ) ); // Service type + // Convert Phone Book name to file id + TUint16 fileIdExt( 0x0000 ); + TUint16 pbFileId = ConvertToPBfileId( iPhoneBookTypeName, fileIdExt ); + TUint8 arrayIndex = ConvertToConfArrayIndex( pbFileId ); - if(UICC_STATUS_OK == aStatus) + if ( UICC_STATUS_OK == aStatus ) { - switch(aTransId) + if ( EBasicEfRead == iTypeOfReading ) { - case ETrIdPbReadADN: + iStoreEntry = new ( ELeave ) TPBEntry(); + // update Entry Data + iStoreEntry->iEntryIndex = iIndexToRead; + + // check if Entry is valid Entry or Empty Entry + TInt retval = EmptyEntryCheck(aFileData); + + // if Entry is not empty + if( KErrNone == retval) { - // handle USIM ADN phonebook read - //HandleUICC3gADNRespL(aStatus, aFileData, aTransId); - } - break; - case ETrIdPbRead: // Same Read for all phonebook Type extension EF's - { - if(!iExtensionRead) - { - if(iServiceType == UICC_APPL_FILE_INFO) - { - // Check for the record no. to read is valid or not - TInt offSet ( aFileData.Find(&KTagFCIFileDescriptor,1) ); - if(KErrNotFound != offSet ) - { - // Number of entries is 1 byte long - iNumOfPhoneBookRecords = aFileData[offSet + UICC_FCI_EF_FDESC_OFFSET_NUM_ENTR]; - // Get the record length - // -14 is for data other than alpha string - //Get16bit(iRecordLength, aFileData, (offSet+4) ); + // Update Entry Status + iStoreEntry->iEntryPresent = ETrue; - if((iNumOfPhoneBookRecords*255) >= (iIndexToRead & 0x00FF)) - { - // read that entry no - iServiceType = UICC_APPL_UPDATE_LINEAR_FIXED; - if(iNumOfEntriesToRead > 0) - { - // Mask iIndexToRead lower byte to get the entry no need to be read - USimPbReqRead( iIndexToRead && 0x00FF ); - } - else - { - ret = KErrNotSupported; - } - } - else - { - // invalid location to read - ret = KErrGeneral; - } - } - } - else if(iServiceType == UICC_APPL_UPDATE_LINEAR_FIXED) - { - // to read next record - iIndexToRead++; - iNumOfEntriesToRead--; - // Seperate Entry data form UICC Server response message - // Case: - if ( UICC_STATUS_OK == aStatus ) - { - TInt retval ( SeparatePhoneBookEntryFromUiccMsgL( - aFileData, - iNameBuf, - simPhonebookType) ); + // Reset Flag for location Search when first Entry is found + iLocationSearch = EFalse; + + // Seperate Entry data form UICC Server response message + // Case: + iMmPhoneBookStoreMessHandler-> + iPBStoreConf[arrayIndex].GetPBEntryFromUICCData( aFileData, + iNumberBuf, + iNameBuf); + + // Check for Is there any extension data + // And the Extension data record number is valid + // Index to read Extension file Data is Alpha string Length + 14 + // minus 1 is for Array index Calculation (it starts from 0) + + if ( 0xFF == aFileData[ iMmPhoneBookStoreMessHandler-> + iPBStoreConf[arrayIndex].iAlphaStringlength+ 13] ) + { + // Append Entry to list + iMmPhoneBookStoreMessHandler->StoreEntryToPhoneBookList( + iStoreEntry, + arrayIndex ); + + // Decrement the number of entries to be read when it is + // stored in commonTSY Array + iNumOfEntriesToRead--; - if ( 0xFF == aFileData[iRecordLength] ) // Check for Is there any extension data - { - // the there is no extension data - CPhoneBookStoreEntry* phoneBookStoreMsg = - new( ELeave ) CPhoneBookStoreEntry; - CleanupStack::PushL( phoneBookStoreMsg ); - phoneBookStoreMsg->ConstructL(); + // the there is no extension data + CPhoneBookStoreEntry* phoneBookStoreMsg = + new( ELeave ) CPhoneBookStoreEntry; + CleanupStack::PushL( phoneBookStoreMsg ); + phoneBookStoreMsg->ConstructL(); + iMmPhoneBookStoreMessHandler->StorePhonebookEntryL( + iNameBuf, + iNumberBuf, + *phoneBookStoreMsg, + pbFileId, + iIndexToRead, + iMailboxIdExist ); + TF_ASSERT( NULL != iPhoneBookStoreCacheArray ); - if(KErrNone == retval) - { - StorePhonebookEntry(iNameBuf,iNumberBuf,*phoneBookStoreMsg); - TF_ASSERT( NULL != iPhoneBookStoreCacheArray ); - iPhoneBookStoreCacheArray->AppendL( phoneBookStoreMsg ); - CleanupStack::Pop( phoneBookStoreMsg ); - iNumOfEntriesFilled++; - TFLOGSTRING2("TSY: CMmPhoneBookOperationRead::HandleUSimPbRespL - Append entries into array %i",iNumOfEntriesFilled); - } - else - { - CleanupStack::PopAndDestroy( phoneBookStoreMsg ); - } + iPhoneBookStoreCacheArray->AppendL( phoneBookStoreMsg ); + CleanupStack::Pop( phoneBookStoreMsg ); + iNumOfEntriesFilled++; +TFLOGSTRING2("TSY: CMmPhoneBookOperationRead::HandleUSimPbRespL - Append entries into array %i",iNumOfEntriesFilled); +OstTrace1( TRACE_NORMAL, DUP4_CMMPHONEBOOKOPERATIONREAD_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead::HandleUICCPbRespL;iNumOfEntriesFilled=%d", iNumOfEntriesFilled ); + } // End of if Ext Data is not Present + else + { + iTypeOfReading = EExtensionRead; + // Record no to be read from EXT File + TInt recordNo = aFileData[iMmPhoneBookStoreMessHandler-> + iPBStoreConf[arrayIndex].iAlphaStringlength + 13]; + + // Append EXT record no. + iStoreEntry->PBEntryExtRecord.Append( recordNo ); - // Check for Extension number present or not - } - else - { - USimPbReqRead( aFileData[iRecordLength] ); - iExtensionRead = ETrue; - iServiceType = UICC_APPL_READ_LINEAR_FIXED; - } - } + retExt = USimPbReqRead( recordNo, aTransId ); + // if while reading EXT error comes (for invalid Entry)than + // read next entry + if(( KErrNone != retExt )) + { + iNumOfEntriesToRead--; + iTypeOfReading = EBasicEfRead; } + } + } + else + { + //Update Entry Status + iStoreEntry->iEntryPresent = EFalse; + // Reset Entry andd Append to the List + iMmPhoneBookStoreMessHandler->StoreEntryToPhoneBookList( + iStoreEntry, + arrayIndex ); + + // Entry is Empty read next Entry + if(!iLocationSearch) + { + // Decrement the no of Entries to be read + iNumOfEntriesToRead--; } - else // Handling for Extension Numbers - { - if(UICC_APPL_UPDATE_LINEAR_FIXED == iServiceType) - { - if(0xFF != aFileData[13]) // Check for next extension data record - { - // Store Number upto last byte - iNumberBuf.Append(aFileData.Mid(1,11)); - // Again Send request to read next record number and appenf it in number - iServiceType = UICC_APPL_READ_LINEAR_FIXED; - USimPbReqRead( aFileData[13] ); - } - else - { - // Check for length upto which no is stored - TInt offset = aFileData.Find(&KTagUnusedbyte,1); - // store Data - iNumberBuf.Append(aFileData.Mid(1,offset)); + } + + // to read next record + iIndexToRead++; + + }// End of without EXT File Data Case - // the there is no extension data - CPhoneBookStoreEntry* phoneBookStoreMsg = - new( ELeave ) CPhoneBookStoreEntry; - CleanupStack::PushL( phoneBookStoreMsg ); - phoneBookStoreMsg->ConstructL(); - - StorePhonebookEntry(iNameBuf,iNumberBuf,*phoneBookStoreMsg); - - TF_ASSERT( NULL != iPhoneBookStoreCacheArray ); - iPhoneBookStoreCacheArray->AppendL( phoneBookStoreMsg ); - CleanupStack::Pop( phoneBookStoreMsg ); - iNumOfEntriesFilled++; - TFLOGSTRING2("TSY: CMmPhoneBookOperationRead::HandleUSimPbRespL - \ - Append entries into array %i",iNumOfEntriesFilled); - //OstTrace1( TRACE_NORMAL, DUP2_CMMPHONEBOOKOPERATIONREAD_HANDLEUSIMPBRESPL, "CMmPhoneBookOperationRead::HandleUSimPbRespL;Append entries into array=%d", iNumOfEntriesFilled ); + // Handling for Extension Numbers + else if ( EExtensionRead == iTypeOfReading ) + { + // Check for next extension data record + if ( 0xFF != aFileData[UICC_EXT_REC_NO_OFFSET] ) + { + // Again Append the EXT no to Array + iStoreEntry->PBEntryExtRecord.Append( + aFileData[UICC_EXT_REC_NO_OFFSET] ); - } - } + // Store Number upto last byte + iNumberBuf.Append(aFileData.Mid(1,11)); + // Again Send request to read next record number and appenf it + // in number + retExt = USimPbReqRead( + aFileData[UICC_EXT_REC_NO_OFFSET], aTransId ); + if( KErrNone != retExt) + { + iNumOfEntriesToRead--; + iTypeOfReading = EBasicEfRead; } } - break; - default: - // There is no such phonebook exist - ret = KErrGeneral; - break; + else + { + // Append Entry to list and reset all the EXT data + iMmPhoneBookStoreMessHandler->StoreEntryToPhoneBookList( + iStoreEntry, + arrayIndex ); + + // Reset Extension File record + iExtensionRead = EFalse; + + // Check for Extended Data is Addition number + if( 0x02 == aFileData[0]) + { + // Check for length upto which no is stored + TInt offset = aFileData.Find(&KTagUnusedbyte,1); + // store Data + iNumberBuf.Append(aFileData.Mid(1,( offset - 1 ))); + // Decrement no of Entries to be read after Storing it to + // CommonTSY Array in EXT data case + iNumOfEntriesToRead--; + + // the there is extension data + CPhoneBookStoreEntry* phoneBookStoreMsg = + new( ELeave ) CPhoneBookStoreEntry; + CleanupStack::PushL( phoneBookStoreMsg ); + phoneBookStoreMsg->ConstructL(); + + iMmPhoneBookStoreMessHandler->StorePhonebookEntryL( + iNameBuf, + iNumberBuf, + *phoneBookStoreMsg, + pbFileId, + iIndexToRead, + iMailboxIdExist ); + + TF_ASSERT( NULL != iPhoneBookStoreCacheArray ); + iPhoneBookStoreCacheArray->AppendL( phoneBookStoreMsg ); + CleanupStack::Pop( phoneBookStoreMsg ); + iNumOfEntriesFilled++; +TFLOGSTRING2("TSY: CMmPhoneBookOperationRead::HandleUSimPbRespL - Append entries into array %i",iNumOfEntriesFilled); +OstTrace1( TRACE_NORMAL, DUP5_CMMPHONEBOOKOPERATIONREAD_HANDLEUICCPBRESPL, "CMmPhoneBookOperationRead::HandleUICCPbRespL;iNumOfEntriesFilled=%d", iNumOfEntriesFilled ); + + } + } + } + else + { + // Read mailbox ID + + // There are 4 bytes describing mailbox id and one of them can + // be valid at a time + // 1 Mailbox Dialling Number Identifier – Voicemail + // 2 Mailbox Dialling Number Identifier – Fax + // 3 Mailbox Dialling Number Identifier – Electronic Mail + // 4 Mailbox Dialling Number Identifier – Other + + for ( TUint8 i( 0 ); i < 4; i++ ) + { + iMailboxIdExist = EFalse; + if ( 0 != aFileData[i] ) + { + iMailboxIdExist = ETrue; + iIndexToRead = aFileData[i]; + break; + } + } + +TFLOGSTRING2("TSY: CMmPhoneBookOperationRead::HandleUSimPbRespL - Append entries into array %i",iNumOfEntriesFilled); + } + + if( ( ( EBasicEfRead == iTypeOfReading ) || + ( EMailboxIdRead == iTypeOfReading ) ) && + ( 0 != iNumOfEntriesToRead ) ) + { + ret = USimPbReqRead( iIndexToRead, aTransId ); } } - // Case: - if ( KErrNone != ret || 0 == iNumOfEntriesToRead ) + // Complete request + if( ( KErrNone != ret )|| ( 0 == iNumOfEntriesToRead )) + { + // Check fo Any Entries Found + if( ( UICC_STATUS_OK == aStatus )&& ( 0 == iNumOfEntriesFilled ) ) { - // If no entries found - if ( 0 == iNumOfEntriesFilled ) - { - ret = KErrNotFound; - } - - TName phoneBookName; - CPhoneBookDataPackage phoneBookData; + ret = KErrNotFound; + } + + CPhoneBookDataPackage phoneBookData; + phoneBookData.SetPhoneBookName( iPhoneBookTypeName ); + iNumOfEntriesFilled = 0; + iMmPhoneBookStoreMessHandler->MessageRouter()->Complete( + iSavedIPCForComplete, + &phoneBookData, + ret ); - // Convert number of phonebook type to Sim pbtype - ConvertToPBname( aTransId, phoneBookName ); - phoneBookData.SetPhoneBookName( phoneBookName ); - iNumOfEntriesFilled = 0; - iMmPhoneBookStoreMessHandler->MessageRouter()->Complete( - EMmTsyPhoneBookStoreReadIPC, - &phoneBookData, - ret ); - - iPhoneBookStoreCacheArray = NULL; - // Set flag to indicate that we can remove this operation from array - } - return ret; + iPhoneBookStoreCacheArray = NULL; + // Set flag to indicate that we can remove this operation from array + complete = ETrue; + } + + return complete; }