diff -r 510c70acdbf6 -r 8ccc39f9d787 adaptationlayer/tsy/nokiatsy_dll/src/cmmenstoremesshandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmenstoremesshandler.cpp Thu Jan 14 10:44:58 2010 +0200 @@ -0,0 +1,821 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +// INCLUDE FILES + +#include +//#include + +#include "cmmenstoremesshandler.h" +#include "cmmmessagerouter.h" +#include +#include +#include "cmmstaticutility.h" +#include "tsylogger.h" +#include "osttracedefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "cmmenstoremesshandlertraces.h" +#endif + +// EXTERNAL DATA STRUCTURES + //None + +// EXTERNAL FUNCTION PROTOTYPES + //None + +// CONSTANTS + +// These are doubled from CMmEnStoreTsy.h +const TUint8 KEccStorageNumberMaxCount = 5; // ETSI 11.11 +const TUint8 KEmergencyNbrLenInBytes = 3; +const TUint8 KDigitMask = 0x0F; + +// MACROS + //None + +// LOCAL CONSTANTS AND MACROS + //None + +// MODULE DATA STRUCTURES + //None + +// LOCAL FUNCTION PROTOTYPES + //None + +// ==================== LOCAL FUNCTIONS ======================================== + //None + +// ==================== MEMBER FUNCTIONS ======================================= + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::CMmENStoreMessHandler +// C++ constructor. +// ----------------------------------------------------------------------------- +// +CMmENStoreMessHandler::CMmENStoreMessHandler() + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::CMmENStoreMessHandler() - Start"); +OstTrace0( TRACE_NORMAL, CMMENSTOREMESSHANDLER_CMMENSTOREMESSHANDLER, "CMmENStoreMessHandler::CMmENStoreMessHandler" ); + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::~CMmENStoreMessHandler +// C++ destructor. +// ----------------------------------------------------------------------------- +// +CMmENStoreMessHandler::~CMmENStoreMessHandler() + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::~CMmENStoreMessHandler() - End"); +OstTrace0( TRACE_NORMAL, DUP1_CMMENSTOREMESSHANDLER_CMMENSTOREMESSHANDLER, "CMmENStoreMessHandler::~CMmENStoreMessHandler" ); + + if( iEnNumberArray ) + { + iEnNumberArray->ResetAndDestroy(); + delete iEnNumberArray; + } + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::NewL +// Creates a new ENStoreMessageHandler object instance. +// Create EN store message handler +// Set internal variables +// Return Values: CMmENStoreMessHandler*: Pointer to object +// ----------------------------------------------------------------------------- +// +CMmENStoreMessHandler* CMmENStoreMessHandler::NewL( + CMmMessageRouter* aMessageRouter, // pointer to the message router + CMmUiccMessHandler* aUiccMessHandler // pointer to UICC message handler + ) + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::NewL"); +OstTrace0( TRACE_NORMAL, CMMENSTOREMESSHANDLER_NEWL, "CMmENStoreMessHandler::NewL" ); + + // Create EN store message handler + CMmENStoreMessHandler* enStoreMessHandler = + new( ELeave ) CMmENStoreMessHandler(); + + // Set internal variables + CleanupStack::PushL( enStoreMessHandler ); + enStoreMessHandler->iMessageRouter = aMessageRouter; + enStoreMessHandler->iMmUiccMessHandler = aUiccMessHandler; + enStoreMessHandler->ConstructL(); + + + CleanupStack::Pop( enStoreMessHandler ); + + return enStoreMessHandler; + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::ConstructL +// Initialises object attributes. +// ----------------------------------------------------------------------------- +// +void CMmENStoreMessHandler::ConstructL() + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::ConstructL()"); +OstTrace0( TRACE_NORMAL, CMMENSTOREMESSHANDLER_CONSTRUCTL, "CMmENStoreMessHandler::ConstructL" ); + + iEnNumberArray = new ( ELeave ) CArrayPtrFlat( 1 ); + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::ProcessUiccMsg +// Handles data received from UICC server +// ----------------------------------------------------------------------------- +// +TInt CMmENStoreMessHandler::ProcessUiccMsg( + TInt aTraId, + TInt aStatus, + TUint8 /*aDetails*/, + const TDesC8& aFileData ) + { +TFLOGSTRING3("TSY:CMmENStoreMessHandler::ProcessUiccMsg, aTraId: %d, status: %d", aTraId, aStatus ); +OstTraceExt2( TRACE_NORMAL, DUP2_CMMENSTOREMESSHANDLER_PROCESSUICCMSG, "CMmENStoreMessHandler::ProcessUiccMsg;aTraId=%d;aStatus=%d", aTraId, aStatus ); + + + TInt ret( KErrNone ); + + switch( aTraId ) + { + case ETrIdEnStoreRead: + { + ret = UiccReadEmergCodesResp( aStatus, aFileData ); + break; + } + case ETrIdEnStoreGetInfo: + { + ret = UiccENStoreGetInfoResp( aStatus, aFileData ); + break; + } + default: + { +TFLOGSTRING("TSY:CMmENStoreMessHandler::ProcessUiccMsg - unknown transaction ID" ); +OstTrace0( TRACE_NORMAL, CMMENSTOREMESSHANDLER_PROCESSUICCMSG, "CMmENStoreMessHandler::ProcessUiccMsg - unknown transaction ID" ); + break; + } + } + return ret; + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::UiccReadEmergCodesResp +// Handles received ISI message from UICC Server. +// ----------------------------------------------------------------------------- +// +TInt CMmENStoreMessHandler::UiccReadEmergCodesResp + ( + TInt aStatus, + const TDesC8& aFileData + ) + { +TFLOGSTRING2("TSY:CMmENStoreMessHandler::UiccReadEmergCodesResp, status: %d", aStatus ); +OstTrace1( TRACE_NORMAL, DUP2_CMMENSTOREMESSHANDLER_UICCREADEMERGCODESRESP, "CMmENStoreMessHandler::UiccReadEmergCodesResp;aStatus=%d", aStatus ); + + TInt ret( KErrNone ); + // Create data package + CMmDataPackage numberData; + + // Check the requesting function using transaction type and + // process the matching function call + switch ( iCurrentIpc ) + { + case EMmTsyENStoreReadAllPhase1IPC: + { + if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() ) + { + if ( UICC_STATUS_OK == aStatus ) + { + // If we are reading first record, + // iEnNumberArray must be reseted + if ( 1 == iRecordNbr ) + { + iEnNumberArray->ResetAndDestroy(); + } + TENStoreResponse* enStoreEntry = NULL; + TBuf8<( RMobileENStore::KEmergencyNumberSize )> numberBuf; + TBuf8< KEmergencyNbrLenInBytes > readIn; + + readIn.Copy( aFileData ); + + GetEmergencyNumberDigits( readIn, numberBuf ); + + if ( 0 < numberBuf.Length() ) + { + enStoreEntry = new ( ELeave ) TENStoreResponse(); + // Copy the number + enStoreEntry->iECCNumber.Copy( numberBuf ); + enStoreEntry->iLocation = ( TUint8 )iRecordNbr; + iEnNumberArray->AppendL( enStoreEntry ); + } + iRecordNbr++; + if ( iRecordNbr <= iEntryCount ) + { + ret = UiccReadEmergCodesReq( + iRecordNbr, + ETrIdEnStoreRead ); + } + else + { + iEntryCount = 0; + } + } + else + { + iEntryCount = 0; + iEnNumberArray->ResetAndDestroy(); + + if( UICC_STATUS_NOT_READY == aStatus ) + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotReady, + KErrGsmMMServiceOptionTemporaryOutOfOrder ); + } + else + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotFound, + KErrGsm0707NotFound ); + } + } + } + else if( UICC_CARD_TYPE_ICC == iMmUiccMessHandler->GetCardType() ) + { + if ( UICC_STATUS_OK == aStatus ) + { + iEnNumberArray->ResetAndDestroy(); + + TENStoreResponse* enStoreEntry = NULL; + + for( TInt index = 1; + index <= ( aFileData.Length() / KEmergencyNbrLenInBytes ); + index++ ) + { + TBuf8<( RMobileENStore::KEmergencyNumberSize )> numberBuf; + TBuf8< KEmergencyNbrLenInBytes > readIn; + +TFLOGSTRING3("TSY: CMmENStoreMessHandler::UiccReadEmergCodesResp. length:%d, index:%d", aFileData.Length(), index); +OstTraceExt2( TRACE_NORMAL, DUP4_CMMENSTOREMESSHANDLER_UICCREADEMERGCODESRESP, "CMmENStoreMessHandler::UiccReadEmergCodesResp;aFileData.Length()=%d;index=%d", aFileData.Length(), index ); + + readIn.Copy(aFileData.Mid( + ((index * KEmergencyNbrLenInBytes ) - 3), + KEmergencyNbrLenInBytes)); + + GetEmergencyNumberDigits( readIn, numberBuf ); + + if ( 0 < numberBuf.Length() ) + { + enStoreEntry = new ( ELeave ) TENStoreResponse(); + // Copy the number + enStoreEntry->iECCNumber.Copy( numberBuf ); + enStoreEntry->iLocation = ( TUint8 ) index; + iEnNumberArray->AppendL( enStoreEntry ); + } + } + } + else + { + iEntryCount = 0; + + if( UICC_STATUS_NOT_READY == aStatus ) + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotReady, + KErrGsmMMServiceOptionTemporaryOutOfOrder ); + } + else + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotFound, + KErrGsm0707NotFound ); + } + } + } + if ( iEntryCount == 0 ) + { + // Complete response with the array of EN entries with ret + // Pack the data for sending to the manager + numberData.PackData( &iEnNumberArray ); + + // Complete request + iMessageRouter->Complete( iCurrentIpc, &numberData, ret ); + + // Reset current IPC. + iCurrentIpc = 0; + } + break; + } + + // Read ECC from certain location + case EMmTsyENStoreReadIPC: + { + // Create TENStoreResponse structure + TENStoreResponse enStoreNumber; + if ( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() ) + { + if ( 1 <= iReadECCLocation ) + { + if ( UICC_STATUS_OK == aStatus ) + { + TBuf8<( RMobileENStore::KEmergencyNumberSize )> numberBuf; + // Read location + enStoreNumber.iLocation = ( TUint8 )iReadECCLocation; + + TBuf8< KEmergencyNbrLenInBytes > readIn; + + readIn.Copy( aFileData ); + + GetEmergencyNumberDigits( readIn, numberBuf ); + enStoreNumber.iECCNumber.Copy( numberBuf ); + } + else if( UICC_STATUS_NOT_READY == aStatus ) + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotReady, + KErrGsmMMServiceOptionTemporaryOutOfOrder ); + } + else + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotFound, + KErrGsm0707NotFound ); + } + } + else + { + // Location index is not valid. Complete request with error. +TFLOGSTRING2("TSY: CMmENStoreMessHandler::UiccReadEmergCodesResp\ + - Invalid index: %d", iReadECCLocation); +OstTrace1( TRACE_NORMAL, DUP1_CMMENSTOREMESSHANDLER_UICCREADEMERGCODESRESP, "CMmENStoreMessHandler::UiccReadEmergCodesResp - Invalid index:;iReadECCLocation=%d", iReadECCLocation ); + + ret = KErrArgument; + } + } + else if( UICC_CARD_TYPE_ICC == iMmUiccMessHandler->GetCardType() ) + { + // Check that location index is valid + if ( 1 <= iReadECCLocation + && KEccStorageNumberMaxCount >= iReadECCLocation ) + { + if ( UICC_STATUS_OK == aStatus ) + { + TBuf8<( RMobileENStore::KEmergencyNumberSize )> numberBuf; + // Read location + enStoreNumber.iLocation = ( TUint8 )iReadECCLocation; + + TBuf8< KEmergencyNbrLenInBytes > readIn; + + readIn.Copy(aFileData.Mid( + ((iReadECCLocation * KEmergencyNbrLenInBytes) - 3), + ((iReadECCLocation * KEmergencyNbrLenInBytes) - 1 ))); + + GetEmergencyNumberDigits( readIn, numberBuf ); + enStoreNumber.iECCNumber.Copy( numberBuf ); + } + else if( UICC_STATUS_NOT_READY == aStatus ) + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotReady, + KErrGsmMMServiceOptionTemporaryOutOfOrder ); + } + else + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotFound, + KErrGsm0707NotFound ); + } + } + else + { + // Location index is not valid. Complete request with error. +TFLOGSTRING2("TSY: CMmENStoreMessHandler::UiccReadEmergCodesResp - Invalid index: %d", iReadECCLocation); +OstTrace1( TRACE_NORMAL, CMMENSTOREMESSHANDLER_UICCREADEMERGCODESRESP, "CMmENStoreMessHandler::UiccReadEmergCodesResp - Invalid index:;iReadECCLocation=%d", iReadECCLocation ); + ret = KErrArgument; + } + } + // Complete response with ret + // Pack the data for sending to the manager + numberData.PackData( &enStoreNumber ); + + // Complete failed request + iMessageRouter->Complete( iCurrentIpc, &numberData, ret ); + + // Reset current IPC. + iCurrentIpc = 0; + break; + } + + // Read function for ECC info purposes + case EMmTsyENStoreGetInfoIPC: + { + if ( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() ) + { + if ( UICC_STATUS_OK == aStatus ) + { + TBuf8< KEmergencyNbrLenInBytes > readIn; + + readIn.Copy(aFileData.Mid( 0, KEmergencyNbrLenInBytes )); + + TUint8 read_value = readIn[0] & KDigitMask; + if( KDigitMask != read_value ) + { + iUsedEntries++; + } + iRecordNbr++; + if ( iRecordNbr <= iEntryCount ) + { + ret = UiccReadEmergCodesReq( + iRecordNbr, + ETrIdEnStoreRead ); + } + else + { + iEntryCount = 0; + } + } + else if( UICC_STATUS_NOT_READY == aStatus ) + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotReady, + KErrGsmMMServiceOptionTemporaryOutOfOrder ); + } + else + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotFound, + KErrGsm0707NotFound ); + } + } + else if( UICC_CARD_TYPE_ICC == iMmUiccMessHandler->GetCardType() ) + { + iUsedEntries = 0; + if( UICC_STATUS_OK == aStatus ) + { + for( TInt index = 1; + index <= ( aFileData.Length() / KEmergencyNbrLenInBytes ); + index++ ) + { + TBuf8< KEmergencyNbrLenInBytes > readIn; + + readIn.Copy(aFileData.Mid( + ((index * KEmergencyNbrLenInBytes) - 3), + KEmergencyNbrLenInBytes)); + + TUint8 read_value = readIn[0] & KDigitMask; + if( KDigitMask != read_value ) + { + iUsedEntries++; + } + } + iEntryCount = 0; + if( 0 == iUsedEntries ) + { + ret = KErrNotFound; + } + } + else if( UICC_STATUS_NOT_READY == aStatus ) + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotReady, + KErrGsmMMServiceOptionTemporaryOutOfOrder ); + } + else + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotFound, + KErrGsm0707NotFound ); + } + } + + if ( 0 == iEntryCount ) + { +TFLOGSTRING2("TSY: CMmENStoreMessHandler::UiccReadEmergCodesResp. iUsedEntries:%d", iUsedEntries); +OstTrace1( TRACE_NORMAL, DUP3_CMMENSTOREMESSHANDLER_UICCREADEMERGCODESRESP, "CMmENStoreMessHandler::UiccReadEmergCodesResp;iUsedEntries=%d", iUsedEntries ); + + // Complete response with ret + // Pack the data for sending to the manager + numberData.PackData( &iUsedEntries ); + + iMessageRouter->Complete( iCurrentIpc, &numberData, ret ); + + // Reset current IPC. + iCurrentIpc = 0; + // Reset entry count. + iEntryCount = 0; + } + break; + + } + } + + return ret; + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::GetEmergencyNumberDigits +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CMmENStoreMessHandler::GetEmergencyNumberDigits( + const TDesC8& aReadIn, + TDes8& aNumberBuf) + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::GetEmergencyNumberDigits" ); +OstTrace0( TRACE_NORMAL, CMMENSTOREMESSHANDLER_GETEMERGENCYNUMBERDIGITS, "CMmENStoreMessHandler::GetEmergencyNumberDigits" ); + + TUint8 read_value = 0; + TBuf8<( RMobileENStore::KEmergencyNumberSize )> numberBuf; + + for( TInt position = 0 ; position < KEmergencyNbrLenInBytes ; position++ ) + { + read_value = aReadIn[position] & KDigitMask; + if( read_value != KDigitMask ) + { + // Emergency number will be returned in ASCII + aNumberBuf.Append( read_value + '0' ); + + read_value = aReadIn[position] >> 4; + if( read_value != KDigitMask ) + { + // Emergency number will be returned in ASCII + aNumberBuf.Append( read_value + '0' ); + } + else + { + break; + } + } + else + { + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::UiccENStoreGetInfoResp +// Handles received ISI message from UICC Server. +// ----------------------------------------------------------------------------- +// +TInt CMmENStoreMessHandler::UiccENStoreGetInfoResp + ( + TInt aStatus, + const TDesC8& aFileData + ) + { +TFLOGSTRING2("TSY:CMmENStoreMessHandler::UiccENStoreGetInfoResp, status: %d", aStatus ); +OstTrace1( TRACE_NORMAL, CMMENSTOREMESSHANDLER_UICCENSTOREGETINFORESP, "CMmENStoreMessHandler::UiccENStoreGetInfoResp;aStatus=%d", aStatus ); + + TInt ret( KErrNone ); + + // To be returned to ENStoreTsy, used entries + iUsedEntries = 0; + iRecordNbr = 1; + + if ( UICC_STATUS_OK == aStatus ) + { + TFci fci( aFileData ); + iEntryCount = fci.GetNumberOfRecords(); + + ret = UiccReadEmergCodesReq( iRecordNbr, ETrIdEnStoreRead ); + } + else + { + if( UICC_STATUS_NOT_READY == aStatus ) + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotReady, + KErrGsmMMServiceOptionTemporaryOutOfOrder ); + } + else + { + ret = CMmStaticUtility::EpocErrorCode( KErrNotFound, + KErrGsm0707NotFound ); + } + // Create data package + CMmDataPackage numberData; + + iUsedEntries = 0; + // Complete response with ret + // Pack the data for sending to the manager + numberData.PackData( &iUsedEntries ); + + iMessageRouter->Complete( iCurrentIpc, &numberData, ret ); + + // Reset current IPC. + iCurrentIpc = 0; + // Reset entry count. + iEntryCount = 0; + } + + return ret; + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::SimReadEmergCodesReq +// Constructs an ISI-message to read information from SIM +// Create ECC number request message +// Set servicetype +// Set location, -1 used, when get info about used entries +// Data buffer for service type +// return call send message via phonet +// ----------------------------------------------------------------------------- +// +TInt CMmENStoreMessHandler::UiccReadEmergCodesReq + ( + TInt aIndex, // Index of ECC + TUiccTrId aTraId + ) + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::UiccReadEmergCodesReq"); +OstTrace0( TRACE_NORMAL, DUP1_CMMENSTOREMESSHANDLER_UICCREADEMERGCODESREQ, "CMmENStoreMessHandler::UiccReadEmergCodesReq" ); + + TInt ret( KErrNone ); + + // Store location that is needed while reading single EN entry + //iReadECCLocation = aIndex; + + // Set parameters for UICC_APPL_CMD_REQ message + if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() ) + { + TUiccReadLinearFixed cmdParams; + + cmdParams.messHandlerPtr = static_cast( this ); + cmdParams.trId = aTraId; + cmdParams.fileId = KElemEmergencyCallCodes; + cmdParams.fileIdSfi = UICC_ANY_SIZE; + cmdParams.serviceType = UICC_APPL_READ_LINEAR_FIXED; + + // File id path + cmdParams.filePath.Append( KMasterFileId >> 8 ); + cmdParams.filePath.Append( KMasterFileId ); + cmdParams.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); + + cmdParams.record = aIndex; + cmdParams.dataAmount = KEmergencyNbrLenInBytes; + cmdParams.dataOffset = 0; + + ret = iMmUiccMessHandler->CreateUiccApplCmdReq( cmdParams ); + } + else if(UICC_CARD_TYPE_ICC == iMmUiccMessHandler->GetCardType()) + { + + TUiccReadTransparent cmdParams; + + cmdParams.messHandlerPtr = static_cast( this ); + cmdParams.trId = aTraId; + + cmdParams.dataAmount = 0; + cmdParams.dataOffset = 0; + cmdParams.fileId = KElemEmergencyCallCodes; + cmdParams.fileIdSfi = UICC_SFI_NOT_PRESENT; + cmdParams.serviceType = UICC_APPL_READ_TRANSPARENT; + + // File id path + cmdParams.filePath.Append( KMasterFileId >> 8 ); + cmdParams.filePath.Append( KMasterFileId ); + cmdParams.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); + + ret = iMmUiccMessHandler->CreateUiccApplCmdReq( cmdParams ); + } + else + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::SimReadEmergCodesReq: unknown card type."); +OstTrace0( TRACE_NORMAL, CMMENSTOREMESSHANDLER_UICCREADEMERGCODESREQ, "CMmENStoreMessHandler::UiccReadEmergCodesReq - Unknown card type." ); + ret = KErrGeneral; + } +TFLOGSTRING2("TSY: CMmENStoreMessHandler::UiccReadEmergCodesReq ret: %d", ret); +OstTrace1( TRACE_NORMAL, DUP2_CMMENSTOREMESSHANDLER_UICCREADEMERGCODESREQ, "CMmENStoreMessHandler::UiccReadEmergCodesReq;ret=%d", ret ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::ReadEfEccFileInfo +// Sends file info request for EFecc +// ----------------------------------------------------------------------------- +// +TInt CMmENStoreMessHandler::ReadEfEccFileInfo( TUiccTrId aTraId ) + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::ReadEfEccFileInfo"); +OstTrace0( TRACE_NORMAL, DUP3_CMMENSTOREMESSHANDLER_READEFECCFILEINFO, "CMmENStoreMessHandler::ReadEfEccFileInfo" ); + + TInt ret( KErrNone ); + + TUiccApplFileInfo params; + params.messHandlerPtr = static_cast( this ); + params.serviceType = UICC_APPL_FILE_INFO; + params.fileId = KElemEmergencyCallCodes; + params.fileIdSfi = 1; + params.filePath.Append( KMasterFileId >> 8 ); + params.filePath.Append( KMasterFileId ); + params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() ); + params.trId = aTraId; + + ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params ); + +TFLOGSTRING2("TSY: CMmENStoreMessHandler::ReadEfEccFileInfo ret %d", ret); +OstTrace1( TRACE_NORMAL, CMMENSTOREMESSHANDLER_READEFECCFILEINFO, "CMmENStoreMessHandler::ReadEfEccFileInfo;ret=%d", ret ); + return ret; + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::ExtFuncL +// ----------------------------------------------------------------------------- +// +TInt CMmENStoreMessHandler::ExtFuncL + ( + TInt aIpc, + const CMmDataPackage* aDataPackage + ) + { +TFLOGSTRING2("TSY: CMmENStoreMessHandler::ExtFuncL - Ipc: %d", aIpc); +OstTrace1( TRACE_NORMAL, CMMENSTOREMESSHANDLER_EXTFUNCL, "CMmENStoreMessHandler::ExtFuncL;aIpc=%d", aIpc ); + + // Unpack parameters + TInt index( 0 ); + TInt ret( KErrNone ); + TUiccTrId traId( ETrIdNotDefined ); + aDataPackage->UnPackData( index ); + + // Save IPC value. Will be used to complete the request appropriately + iCurrentIpc = aIpc; + + switch ( aIpc ) + { + case EMmTsyENStoreReadAllPhase1IPC: + { + if ( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() ) + { + traId = ETrIdEnStoreGetInfo; + ret = ReadEfEccFileInfo( traId ); + } + else if ( UICC_CARD_TYPE_ICC == iMmUiccMessHandler->GetCardType() ) + { + traId = ETrIdEnStoreRead; + ret = UiccReadEmergCodesReq( index, traId ); + } + break; + } + case EMmTsyENStoreReadIPC: + { + traId = ETrIdEnStoreRead; + iReadECCLocation = index; + ret = UiccReadEmergCodesReq( index, traId ); + break; + } + case EMmTsyENStoreGetInfoIPC: + { + traId = ETrIdEnStoreGetInfo; + if ( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() ) + { + ret = ReadEfEccFileInfo( traId ); + } + else if ( UICC_CARD_TYPE_ICC == iMmUiccMessHandler->GetCardType() ) + { + traId = ETrIdEnStoreRead; + ret = UiccReadEmergCodesReq( index, traId ); + } + else + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::ExtFuncL: unknown card type."); +OstTrace0( TRACE_NORMAL, DUP1_CMMENSTOREMESSHANDLER_EXTFUNCL, "CMmENStoreMessHandler::ExtFuncL - unknown card type." ); + ret = KErrGeneral; + } + break; + } + default: + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::SimReadEmergCodesRespL. Switch aIpc case default"); +OstTrace0( TRACE_NORMAL, DUP2_CMMENSTOREMESSHANDLER_EXTFUNCL, "CMmENStoreMessHandler::ExtFuncL - Switch aIpc case default" ); + // Do nothing + break; + } + } + + + return ret; + } + +// ----------------------------------------------------------------------------- +// CMmENStoreMessHandler::HandleError +// Handles CMmENStoreMessHandler's errors that comes via PhoNetReceiver RunError +// method. +// ----------------------------------------------------------------------------- +// +void CMmENStoreMessHandler::HandleError + ( + const TIsiReceiveC& /*aIsiMessage*/, // Isi message + TInt /*aError*/ // Error code + ) + { +TFLOGSTRING("TSY: CMmENStoreMessHandler::HandleError"); +OstTrace0( TRACE_NORMAL, CMMENSTOREMESSHANDLER_HANDLEERROR, "CMmENStoreMessHandler::HandleError" ); + } + +// ================= OTHER EXPORTED FUNCTIONS ================================== + //None + +// End of File