diff -r 6295dc2169f3 -r 8486d82aef45 adaptationlayer/tsy/nokiatsy_dll/src/cmmuiccmesshandler.cpp --- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmuiccmesshandler.cpp Wed Apr 21 14:29:55 2010 +0300 +++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmuiccmesshandler.cpp Tue Oct 19 13:16:20 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2009-2010 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" @@ -15,8 +15,6 @@ * */ - - // INCLUDE FILES #include "cmmuiccmesshandler.h" #include "cmmphonetsender.h" @@ -24,6 +22,7 @@ #include "cmmmessagerouter.h" #include "cmmstaticutility.h" #include "cmmphonemesshandler.h" +#include "terminalprofile.h" // terminal profile #include #include @@ -47,7 +46,15 @@ const TUint8 KUiccSbApduLengthOffset( 6 ); const TUint8 KUiccSbApduDataOffset( 8 ); const TUint16 KUiccSbApduSize( SIZE_UICC_SB_APDU + KApduDataLength ); +// Truncated AID length +const TUint8 KTruncatedAidLength = 7; +// Truncated AID ( 3GPP USIM RID + app code ) +// RID 'A000000087' +// App code '1002' +_LIT8( KTruncatedAID, "\xA0\x00\x00\x00\x87\x10\x02" ); +const TUint8 KSizeOfTerminalProfileSb = 40; +const TInt KCardStatusFieldLength = 1; // ============================= LOCAL FUNCTIONS =============================== @@ -56,9 +63,28 @@ // Temporary for testing purposes, terminal profile sending will be moved // to SAT TSY TFLOGSTRING("TSY: CMmUiccMessHandler::SendTerminalProfile TEMPORARY SOLUTION FOR TESTING"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_SENDTERMINALPROFILE, "CMmUiccMessHandler::SendTerminalProfile TEMPORARY SOLUTION FOR TESTING" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_SENDTERMINALPROFILE_TD, "CMmUiccMessHandler::SendTerminalProfile TEMPORARY SOLUTION FOR TESTING" ); + + + // Pointer to terminal profile buffer + const TUint8* terminalProfilePtr( NULL ); + // Size of terminal profile + TInt sizeofTerminalProfile( 0 ); - // Create UICC_CAT_TERMINAL_PROFILE message + if( UICC_CARD_TYPE_UICC == iCardType ) + { + terminalProfilePtr = &KTerminalProfileUicc[0]; + sizeofTerminalProfile = sizeof( KTerminalProfileUicc ); +TFLOGSTRING("TSY: CMmUiccMessHandler::SendTerminalProfile TEMPORARY SOLUTION FOR TESTING - Card type UICC"); + } + else // ICC type + { + terminalProfilePtr = &KTerminalProfileIcc[0]; + sizeofTerminalProfile = sizeof( KTerminalProfileIcc ); +TFLOGSTRING("TSY: CMmUiccMessHandler::SendTerminalProfile TEMPORARY SOLUTION FOR TESTING - Card type ICC"); + } + + // Create UICC_CAT_REQ message TIsiSend isiMsg( iPhoNetSender->SendBufferDes() ); isiMsg.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_UICC ); isiMsg.Set8bit( ISI_HEADER_SIZE, UICC_CAT_REQ_OFFSET_TRANSID ); // transaction id @@ -66,8 +92,8 @@ isiMsg.Set8bit( ISI_HEADER_SIZE + UICC_CAT_REQ_OFFSET_SERVICETYPE, UICC_CAT_TERMINAL_PROFILE ); isiMsg.Set8bit( ISI_HEADER_SIZE + UICC_CAT_REQ_OFFSET_NSB, 1 ); // num of subblocks - // Create subblock - TBuf8<30> terminalProfileBuf( 0 ); + // Create UICC_SB_TERMINAL_PROFILE subblock + TBuf8 terminalProfileBuf( 0 ); TIsiSubBlock uiccSbTerminalProfile( terminalProfileBuf, UICC_SB_TERMINAL_PROFILE, @@ -78,13 +104,15 @@ terminalProfileBuf.Append( KUiccPadding ); // Terminal profile length (16-bit) - terminalProfileBuf.Append( KUiccPadding ); - terminalProfileBuf.Append( 1 ); terminalProfileBuf.Append( 0 ); + terminalProfileBuf.Append( sizeofTerminalProfile ); + + // Terminal profile + terminalProfileBuf.Append( terminalProfilePtr, sizeofTerminalProfile ); // Append subblock to ISI message isiMsg.CopyData( - ISI_HEADER_SIZE + 4, + ISI_HEADER_SIZE + SIZE_UICC_CAT_REQ, uiccSbTerminalProfile.CompleteSubBlock() ); iPhoNetSender->Send( isiMsg.Complete() ); @@ -200,7 +228,7 @@ CMmPhoNetReceiver* aPhoNetReceiver) { TFLOGSTRING("TSY: CMmUiccMessHandler::ConstructL"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CONSTRUCTL, "CMmUiccMessHandler::ConstructL" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CONSTRUCTL_TD, "CMmUiccMessHandler::ConstructL" ); // Reset the pointer array iMessHandlerPrtList.Reset(); @@ -226,6 +254,12 @@ // Initialized for USIM application iApplFileId.Append( 0x7F ); iApplFileId.Append( 0xFF ); + + TUiccParamsApduReq params; + params.messHandlerPtr = static_cast( this ); + params.trId = ETrIdGetCardStatus; + params.serviceType = UICC_CARD_STATUS_GET; + CreateUiccCardReq( params ); } // ----------------------------------------------------------------------------- @@ -239,7 +273,7 @@ CMmMessageRouter* aMessageRouter ) { TFLOGSTRING("TSY: CMmUiccMessHandler::NewL"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_NEWL, "CMmUiccMessHandler::NewL" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_NEWL_TD, "CMmUiccMessHandler::NewL" ); CMmUiccMessHandler* uiccMessHandler( new ( ELeave ) CMmUiccMessHandler() ); CleanupStack::PushL( uiccMessHandler ); @@ -257,7 +291,7 @@ CMmUiccMessHandler::~CMmUiccMessHandler() { TFLOGSTRING("TSY: CMmUiccMessHandler::~CMmUiccMessHandler"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CMMUICCMESSHANDLER, "CMmUiccMessHandler::~CMmUiccMessHandler" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CMMUICCMESSHANDLER_TD, "CMmUiccMessHandler::~CMmUiccMessHandler" ); } // ----------------------------------------------------------------------------- @@ -268,7 +302,7 @@ // void CMmUiccMessHandler::ReceiveMessageL( const TIsiReceiveC& aIsiMsg ) { - TInt status( KErrNone ); + TUint8 status( UICC_STATUS_FAIL ); TUint8 details ( UICC_NO_DETAILS ); TUint8 messageId( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) ); TUint8 trId( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_TRANSID ) ); @@ -276,68 +310,83 @@ TPtrC8 fileData; TFLOGSTRING3("TSY: CMmUiccMessHandler::ReceiveMessageL, message ID :0x%x, transaction ID: %d", messageId, trId ); -OstTraceExt2( TRACE_NORMAL, CMMUICCMESSHANDLER_RECEIVEMESSAGEL, "CMmUiccMessHandler::ReceiveMessageL;messageId=%hhx;trId=%hhu", messageId, trId ); +OstTraceExt2( TRACE_NORMAL, CMMUICCMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmUiccMessHandler::ReceiveMessageL;messageId=%hhx;trId=%hhu", messageId, trId ); + MUiccOperationBase* messHandler( NULL ); // Get the correct message handler for this operation - MUiccOperationBase* messHandler( iMessHandlerPrtList.At( trId ) ); + if( trId < iMessHandlerPrtList.Count() ) + { + messHandler = iMessHandlerPrtList.At( trId ); + } switch( messageId ) { case UICC_CAT_IND: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL:UICC_CAT_IND"); // Send terminal profile ( to be moved to SAT TSY later ) - SendTerminalProfile(); + serviceType = aIsiMsg.Get8bit( + ISI_HEADER_SIZE + UICC_CAT_IND_OFFSET_SERVICETYPE ); + if( UICC_READY == serviceType ) + { + SendTerminalProfile(); + } break; } case UICC_CAT_RESP: { // To be moved to SAT TSY later +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_CAT_RESP"); break; } case UICC_CARD_IND: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_CARD_IND"); serviceType = aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_CARD_IND_OFFSET_SERVICETYPE ); // Start application activation procedure if the card is ready and // the application is not active yet - if ( UICC_CARD_READY == serviceType && + if (UICC_CARD_READY == serviceType && UICC_STATUS_APPL_ACTIVE != iApplicationStatus ) { TUiccParamsBase params; params.messHandlerPtr = static_cast( this ); params.trId = ETrIdGetUiccApplication; - CreateUiccApplicationReq( params, UICC_APPL_LIST ); + CreateUiccApplicationReq( params, UICC_APPL_LIST, iCardType ); } // No else. Application was active already break; } case UICC_RESP: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_RESP"); iUiccServerStatus = HandleUiccResp( aIsiMsg ); - // Start application activation procedure if the card is ready and - // the application is not active yet + // Start application activation procedure if UICC server is ready + // but appplication activations is not done by TSY if ( UICC_STATUS_START_UP_COMPLETED == iUiccServerStatus && - UICC_STATUS_APPL_ACTIVE != iApplicationStatus) + UICC_STATUS_APPL_ACTIVE != iApplicationStatus ) { // Read the application ID TUiccParamsBase params; params.messHandlerPtr = static_cast( this ); params.trId = ETrIdGetUiccApplication; - CreateUiccApplicationReq( params, UICC_APPL_LIST ); + //CreateUiccApplicationReq( params, UICC_APPL_LIST, iCardType ); } break; } case UICC_APPLICATION_RESP: { - status = HandleUiccApplicationResp( aIsiMsg ); + status = aIsiMsg.Get8bit( + ISI_HEADER_SIZE + UICC_APPLICATION_RESP_OFFSET_STATUS ); + HandleUiccApplicationResp( aIsiMsg ); break; } case UICC_APPLICATION_IND: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_APPLICATION_IND"); TInt8 serviceType( aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_APPLICATION_IND_OFFSET_SERVICETYPE ) ); - iApplicationStatus = UICC_STATUS_APPL_ACTIVE; // Application activation indication with service type // UICC_APPL_ACTIVATED, as part of PowerOnSim sequence. // Transaction id is set to ETrIdSimPowerOn and operation @@ -345,7 +394,7 @@ if( UICC_APPL_ACTIVATED == serviceType ) { iDoNotRemoveTransactionID = EFalse; - status = KErrNone; + status = UICC_STATUS_OK; trId = ETrIdSimPowerOn; messHandler = iMessHandlerPrtList.At( trId ); } @@ -353,31 +402,33 @@ } case UICC_APPL_CMD_RESP: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_APPL_CMD_RESP"); status = aIsiMsg.Get8bit( - ISI_HEADER_SIZE + UICC_APPL_CMD_RESP_OFFSET_STATUS ); - + ISI_HEADER_SIZE + UICC_APPL_CMD_RESP_OFFSET_STATUS ); + details = aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_APPL_CMD_RESP_OFFSET_DETAILS ); - TInt8 serviceType( aIsiMsg.Get8bit( + TUint8 serviceType( aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_APPL_CMD_RESP_OFFSET_SERVICETYPE ) ); if ( UICC_STATUS_OK == status ) { // If READ operation was required, read data from subblock if ( UICC_APPL_READ_TRANSPARENT == serviceType || - UICC_APPL_READ_LINEAR_FIXED == serviceType ) + UICC_APPL_READ_LINEAR_FIXED == serviceType ) { fileData.Set( GetFileData( aIsiMsg ) ); } - if ( UICC_APPL_FILE_INFO == serviceType ) + else if ( UICC_APPL_FILE_INFO == serviceType ) { fileData.Set( GetFileFCI( aIsiMsg ) ); } - if ( UICC_APPL_APDU_SEND == serviceType ) + else if ( UICC_APPL_APDU_SEND == serviceType ) { fileData.Set( GetApduData( aIsiMsg ) ); } + // No else } else { @@ -388,9 +439,10 @@ } case UICC_APDU_RESP: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_APDU_RESP"); status = aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_APDU_RESP_OFFSET_STATUS ); - TInt8 serviceType( aIsiMsg.Get8bit( + TUint8 serviceType( aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_APDU_RESP_OFFSET_SERVICETYPE ) ); // Extract actual APDU from SB_APDU @@ -406,7 +458,8 @@ } case UICC_APDU_RESET_IND: { - TInt8 serviceType( aIsiMsg.Get8bit( +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_APDU_RESET_IND"); + TUint8 serviceType( aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_APDU_RESET_IND_OFFSET_SERVICETYPE ) ); // Indication that SAP APDU interface is activated @@ -420,23 +473,31 @@ } case UICC_CONNECTOR_RESP: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_CONNECTOR_RESP"); status = aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_CONNECTOR_RESP_OFFSET_STATUS ); + break; } - break; case UICC_CARD_RESP: { +TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_CARD_RESP"); status = aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_CARD_RESP_OFFSET_STATUS ); TUint8 serviceType( aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_CARD_RESP_OFFSET_SERVICETYPE ) ); + iCardType = aIsiMsg.Get8bit( + ISI_HEADER_SIZE + UICC_CARD_RESP_OFFSET_CARDTYPE ); +TFLOGSTRING2("TSY: CMmUiccMessHandler::ReceiveMessageL: UICC_CARD_RESP iCardType = %d", iCardType ); + if( UICC_STATUS_OK == status && UICC_CARD_STATUS_GET == serviceType ) { + UiccCardRespStatus( aIsiMsg ); + } // File data from SIZE_UICC_SB_CARD_STATUS TUint uiccSbFileDataOffset( 0 ); - TInt cardStatusFieldLength( 1 ); + if ( KErrNone == aIsiMsg.FindSubBlockOffsetById( ISI_HEADER_SIZE + SIZE_UICC_CARD_RESP, @@ -447,15 +508,15 @@ fileData.Set(aIsiMsg.GetData( uiccSbFileDataOffset + UICC_SB_CARD_STATUS_OFFSET_CARDSTATUS, - cardStatusFieldLength) ); + KCardStatusFieldLength ) ); } - } + + break; } - break; default: { TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL, default" ); -OstTrace0( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_RECEIVEMESSAGEL, "CMmUiccMessHandler::ReceiveMessageL, default" ); +OstTrace0( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmUiccMessHandler::ReceiveMessageL, default" ); break; } } @@ -471,7 +532,7 @@ else { TFLOGSTRING("TSY: CMmUiccMessHandler::ReceiveMessageL, message handler not found -> no further handling of this message" ); -OstTrace0( TRACE_NORMAL, DUP3_CMMUICCMESSHANDLER_RECEIVEMESSAGEL, "CMmUiccMessHandler::ReceiveMessageL, message handler not found -> no further handling of this message" ); +OstTrace0( TRACE_NORMAL, DUP3_CMMUICCMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmUiccMessHandler::ReceiveMessageL, message handler not found -> no further handling of this message" ); } } @@ -491,7 +552,7 @@ TUint8 sizeOfApplPathSubblock( 0 ); TFLOGSTRING2("TSY: CMmUiccMessHandler::CreateUiccApplCmdReq, transaction ID: %d", trId ); -OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCAPPLCMDREQ, "CMmUiccMessHandler::CreateUiccApplCmdReq;trId=%d", trId ); +OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCAPPLCMDREQ_TD, "CMmUiccMessHandler::CreateUiccApplCmdReq;trId=%d", trId ); TUint8 applId( aApplType == UICC_APPL_TYPE_UICC_ISIM ? iIsimApplicationId : iApplicationId ); @@ -641,7 +702,8 @@ KUiccApplCmdReqOffset + SIZE_UICC_SB_CLIENT, sizeOfApplPathSubblock ); // Create and append UICC_SB_APDU - const TUiccSendApdu* tmpPtr = static_cast( &aParams ); + const TUiccSendApdu* tmpPtr = + static_cast( &aParams ); CreateUiccSbApdu( isiMsg, KUiccApplCmdReqOffset + SIZE_UICC_SB_CLIENT + @@ -653,7 +715,7 @@ { ret = KErrArgument; TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccApplCmdReq, unknown service type!" ); -OstTrace0( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_CREATEUICCAPPLCMDREQ, "CMmUiccMessHandler::CreateUiccApplCmdReq, unknown service type!" ); +OstTrace0( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_CREATEUICCAPPLCMDREQ_TD, "CMmUiccMessHandler::CreateUiccApplCmdReq, unknown service type!" ); break; } } // End of switch ( serviceType ) @@ -670,7 +732,7 @@ else { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccApplCmdReq, cannot handle the request, server busy!" ); -OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCAPPLCMDREQ, "CMmUiccMessHandler::CreateUiccApplCmdReq, cannot handle the request, server busy!" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCAPPLCMDREQ_TD, "CMmUiccMessHandler::CreateUiccApplCmdReq, cannot handle the request, server busy!" ); ret = KErrServerBusy; } return ret; @@ -687,7 +749,7 @@ TUint8 aApplType ) { TFLOGSTRING2("TSY: CMmUiccMessHandler::CreateUiccApplicationReq, service type: %d", aServiceType ); -OstTraceExt1( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCAPPLICATIONREQ, "CMmUiccMessHandler::CreateUiccApplicationReq;aServiceType=%hhu", aServiceType ); +OstTraceExt1( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCAPPLICATIONREQ_TD, "CMmUiccMessHandler::CreateUiccApplicationReq;aServiceType=%hhu", aServiceType ); TInt ret (KErrGeneral); TUiccTrId trId( aParams.trId ); @@ -710,7 +772,7 @@ isiMsg.Set8bit( ISI_HEADER_SIZE + UICC_APPLICATION_REQ_OFFSET_SERVICETYPE, aServiceType ); - + switch ( aServiceType ) { case UICC_APPL_LIST: @@ -720,11 +782,32 @@ } case UICC_APPL_HOST_ACTIVATE: { - numOfSubblocks = 1; + CreateUiccSbApplInfo( + isiMsg, + ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_REQ ); CreateUiccSbApplication( isiMsg, - ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_REQ, + ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_REQ + + SIZE_UICC_SB_APPL_INFO, aApplType ); + + if ( UICC_APPL_LAST == iApplicationId ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccApplicationReq - need to add UICC_SB_AID subblock" ); + + CreateUiccSbAid( + isiMsg, + ISI_HEADER_SIZE + + SIZE_UICC_APPLICATION_REQ + + SIZE_UICC_SB_APPL_INFO + + SIZE_UICC_SB_APPLICATION ); + + numOfSubblocks = 3; + } + else + { + numOfSubblocks = 2; + } break; } default: @@ -745,7 +828,7 @@ else { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccApplicationReq, cannot handle the request, server busy!" ); -OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCAPPLICATIONREQ, "CMmUiccMessHandler::CreateUiccApplicationReq, cannot handle the request, server busy!" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCAPPLICATIONREQ_TD, "CMmUiccMessHandler::CreateUiccApplicationReq, cannot handle the request, server busy!" ); ret = KErrServerBusy; } return ret; @@ -759,7 +842,7 @@ TUint8 CMmUiccMessHandler::GetApplicationId() const { TFLOGSTRING2("TSY: CMmUiccMessHandler::GetApplicationId, application ID: %d", iApplicationId ); -OstTraceExt1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPPLICATIONID, "CMmUiccMessHandler::GetApplicationId;aApplId=%hhu", iApplicationId ); +OstTraceExt1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPPLICATIONID_TD, "CMmUiccMessHandler::GetApplicationId;aApplId=%hhu", iApplicationId ); return iApplicationId; } @@ -771,7 +854,7 @@ TUint8 CMmUiccMessHandler::GetApplicationType() const { TFLOGSTRING2("TSY: CMmUiccMessHandler::GetApplicationType, application type: %d", iApplicationType ); -OstTraceExt1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPPLICATIONTYPE, "CMmUiccMessHandler::GetApplicationType;aApplType=%hhu", iApplicationType ); +OstTraceExt1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPPLICATIONTYPE_TD, "CMmUiccMessHandler::GetApplicationType;aApplType=%hhu", iApplicationType ); return iApplicationType; } @@ -783,7 +866,7 @@ const TDesC8& CMmUiccMessHandler::GetApplicationFileId() const { TFLOGSTRING("TSY: CMmUiccMessHandler::GetApplicationFileId" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPPLICATIONFILEID, "CMmUiccMessHandler::GetApplicationFileId" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPPLICATIONFILEID_TD, "CMmUiccMessHandler::GetApplicationFileId" ); return iApplFileId; } @@ -795,7 +878,7 @@ TUint8 CMmUiccMessHandler::GetCardType() const { TFLOGSTRING("TSY: CMmUiccMessHandler::GetCardType" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETCARDTYPE, "CMmUiccMessHandler::GetCardType" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETCARDTYPE_TD, "CMmUiccMessHandler::GetCardType" ); return iCardType; } @@ -807,7 +890,7 @@ TUint8 CMmUiccMessHandler::GetIsimApplicationStatus() const { TFLOGSTRING("TSY: CMmUiccMessHandler::GetIsimApplicationStatus" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETISIMAPPLICATIONSTATUS, "CMmUiccMessHandler::GetIsimApplicationStatus" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETISIMAPPLICATIONSTATUS_TD, "CMmUiccMessHandler::GetIsimApplicationStatus" ); return iIsimApplicationStatus; } @@ -819,7 +902,7 @@ TBool CMmUiccMessHandler::IsIsimApplicationFound() const { TFLOGSTRING("TSY: CMmUiccMessHandler::IsIsimApplicationFound" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_ISISIMAPPLICATIONFOUND, "CMmUiccMessHandler::IsIsimApplicationFound" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_ISISIMAPPLICATIONFOUND_TD, "CMmUiccMessHandler::IsIsimApplicationFound" ); return iIsimApplicationFound; } @@ -831,7 +914,7 @@ const RMobilePhone::TAID& CMmUiccMessHandler::GetAid() const { TFLOGSTRING("TSY: CMmUiccMessHandler::GetAid" ); -OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_GETAPPLICATIONFILEID, "CMmUiccMessHandler::GetApplicationFileId" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_GETAPPLICATIONFILEID_TD, "CMmUiccMessHandler::GetApplicationFileId" ); return iAid; } // ----------------------------------------------------------------------------- @@ -846,7 +929,7 @@ TUint8& aSizeOfSubblock ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbApplPath" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBAPPLPATH, "CMmUiccMessHandler::CreateUiccSbApplPath" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBAPPLPATH_TD, "CMmUiccMessHandler::CreateUiccSbApplPath" ); // UICC_SB_APPL_PATH subblock TBuf8 uiccSbApplPathBuf( 0 ); @@ -885,7 +968,7 @@ const TUint8 aApplType ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbClient" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBCLIENT, "CMmUiccMessHandler::CreateUiccSbClient" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBCLIENT_TD, "CMmUiccMessHandler::CreateUiccSbClient" ); // UICC_SB_CLIENT subblock TBuf8 uiccSbClientBuf( 0 ); @@ -919,7 +1002,7 @@ else { TFLOGSTRING2("TSY: CMmUiccMessHandler::CreateUiccSbClient: unknown appl type: 0x%x", aApplType ); -OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCSBCLIENT, "CMmUiccMessHandler::CreateUiccSbClient: unknown appl type: 0x%x", aApplType ); +OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCSBCLIENT_TD, "CMmUiccMessHandler::CreateUiccSbClient: unknown appl type: 0x%x", aApplType ); } } @@ -934,7 +1017,7 @@ TUint8 aMsgOffset ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbTransparent" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBTRANSPARENT, "CMmUiccMessHandler::CreateUiccSbTransparent" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBTRANSPARENT_TD, "CMmUiccMessHandler::CreateUiccSbTransparent" ); // UICC_SB_TRANSPARENT subblock TBuf8 uiccSbTransparentBuf( 0 ); @@ -967,7 +1050,7 @@ TUint8 aMsgOffset ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbLinearFixed" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBLINEARFIXED, "CMmUiccMessHandler::CreateUiccSbLinearFixed" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBLINEARFIXED_TD, "CMmUiccMessHandler::CreateUiccSbLinearFixed" ); // UICC_SB_LINEAR_FIXED subblock TBuf8 uiccSbLinearFixedBuf( 0 ); @@ -999,7 +1082,7 @@ ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbFileData" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBFILEDATA, "CMmUiccMessHandler::CreateUiccSbFileData" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBFILEDATA_TD, "CMmUiccMessHandler::CreateUiccSbFileData" ); // UICC_SB_FILE_DATA subblock TBuf8 uiccSbFileDataBuf( 0 ); @@ -1033,7 +1116,7 @@ TUint8 aApplType ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbApplication" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBAPPLICATION, "CMmUiccMessHandler::CreateUiccSbApplication" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBAPPLICATION_TD, "CMmUiccMessHandler::CreateUiccSbApplication" ); // SIZE_UICC_SB_APPLICATION_STR TBuf8 uiccSbApplicationBuf( 0 ); @@ -1072,10 +1155,63 @@ else { TFLOGSTRING2("TSY: CMmUiccMessHandler::CreateUiccSbApplication: unknown application type: 0x%x", aApplType ); -OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCSBAPPLICATION, "CMmUiccMessHandler::CreateUiccSbApplication: unknown application type: 0x%x", aApplType ); +OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CREATEUICCSBAPPLICATION_TD, "CMmUiccMessHandler::CreateUiccSbApplication: unknown application type: 0x%x", aApplType ); } } + +// ----------------------------------------------------------------------------- +// CMmUiccMessHandler::CreateUiccSbApplInfo +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CMmUiccMessHandler::CreateUiccSbApplInfo( + TIsiSend& aIsiMsg, + TUint8 aMsgOffset ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbApplInfo" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCSBAPPLINFO_TD, "CMmUiccMessHandler::CreateUiccSbApplInfo" ); + + TBuf8 uiccSbApplInfoBuf( 0 ); + TIsiSubBlock uiccSbApplInfo( + uiccSbApplInfoBuf, + UICC_SB_APPL_INFO, + EIsiSubBlockTypeId16Len16 ); + + uiccSbApplInfoBuf.Append( KUiccPadding ); + uiccSbApplInfoBuf.Append( KUiccPadding ); + uiccSbApplInfoBuf.Append( KUiccPadding ); + + uiccSbApplInfoBuf.Append( UICC_APPL_START_UP_NO_INIT_PROC ); + + aIsiMsg.CopyData( aMsgOffset, uiccSbApplInfo.CompleteSubBlock() ); + } + +// ----------------------------------------------------------------------------- +// CMmUiccMessHandler::CreateUiccSbAid +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CMmUiccMessHandler::CreateUiccSbAid( + TIsiSend& aIsiMsg, + TUint8 aMsgOffset ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbAid" ); + + TBuf8 uiccSbAidBuf( 0 ); + TIsiSubBlock uiccSbAid( + uiccSbAidBuf, + UICC_SB_AID, + EIsiSubBlockTypeId16Len16 ); + + // Add truncated AID length + uiccSbAidBuf.Append( KTruncatedAidLength ); + // Add 3GPP USIM RID and app code + uiccSbAidBuf.Append( KTruncatedAID ); + + aIsiMsg.CopyData( aMsgOffset, uiccSbAid.CompleteSubBlock() ); + } + // ----------------------------------------------------------------------------- // CMmUiccMessHandler::GetFileData // (other items were commented in a header). @@ -1084,7 +1220,7 @@ const TPtrC8 CMmUiccMessHandler::GetFileData( const TIsiReceiveC& aIsiMsg ) { TFLOGSTRING("TSY: CMmUiccMessHandler::GetFileData" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETFILEDATA, "CMmUiccMessHandler::GetFileData" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETFILEDATA_TD, "CMmUiccMessHandler::GetFileData" ); TPtrC8 data( KNullDesC8 ); @@ -1113,7 +1249,7 @@ TUint8 CMmUiccMessHandler::HandleUiccResp( const TIsiReceiveC& aIsiMsg ) { TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccResp" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_HANDLEUICCRESP, "CMmUiccMessHandler::HandleUiccResp" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_HANDLEUICCRESP_TD, "CMmUiccMessHandler::HandleUiccResp" ); TUint8 serverStatus( UICC_STATUS_NOT_READY ); // Check the service type @@ -1134,6 +1270,282 @@ return serverStatus; } + + +// ----------------------------------------------------------------------------- +// CMmUiccMessHandler::HandleUiccApplListResp +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CMmUiccMessHandler::HandleUiccApplListResp( + const TIsiReceiveC& aIsiMsg ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp" ); + + TInt ret( KErrNone ); + TUint16 startIndex( ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_RESP ); + + // Check if UICC_SB_APPL_DATA_OBJECT is included => UICC application + TUint uiccSbApplDataObjectOffset( 0 ); + TUint8 applicationType( 0 ); + TUint16 sbLen( 0 ); + + TBool usimOrSimApplFound( EFalse ); + + while ( KErrNone == aIsiMsg.FindSubBlockOffsetById( + startIndex, + UICC_SB_APPL_DATA_OBJECT, + EIsiSubBlockTypeId16Len16, + uiccSbApplDataObjectOffset ) ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp-UICC_APPL_LIST FIND_SB" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp - UICC_APPL_LIST FIND_SB" ); + applicationType = aIsiMsg.Get8bit( + uiccSbApplDataObjectOffset + + UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLICATIONTYPE ); + + sbLen = aIsiMsg.Get16bit( + uiccSbApplDataObjectOffset + + UICC_SB_APPL_DATA_OBJECT_OFFSET_SBLEN ); + + if ( ( UICC_APPL_TYPE_UICC_USIM == applicationType || + UICC_APPL_TYPE_ICC_SIM == applicationType ) && + EFalse == usimOrSimApplFound ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp-UICC_APPL_LIST FOUND_U/SIM" ); +OstTrace0( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp - UICC_APPL_LIST FOUND_U/SIM" ); + + iApplicationType = applicationType; + + iApplicationId = aIsiMsg.Get8bit( + uiccSbApplDataObjectOffset + + UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLID ); + + TUint8 length( aIsiMsg.Get8bit( + uiccSbApplDataObjectOffset + + UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLDOLEN ) ); + + // Application data object contains EFdir data, + // 5 bytes are mandatory. See TS 102.221 V7.11.0 table 13.2 + if ( 5 <= length ) + { + TPtrC8 applDataObject( aIsiMsg.GetData( + uiccSbApplDataObjectOffset + + UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLDO, + length ) ); + // Length of AID is located in index 3 + TUint8 aidLength( applDataObject[3] ); + // Copy actual AID + iAid.Copy( applDataObject.Mid( 4, aidLength ) ); + } + + usimOrSimApplFound = ETrue; + } + else if( UICC_APPL_TYPE_UICC_ISIM == applicationType && + EFalse == iIsimApplicationFound ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp-UICC_APPL_LIST FOUND_ISIM" ); +OstTrace0( TRACE_NORMAL, DUP3_CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp - UICC_APPL_LIST FOUND_ISIM" ); + iIsimApplicationFound = ETrue; + + iIsimApplicationId = aIsiMsg.Get8bit( + uiccSbApplDataObjectOffset + + UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLID ); + iIsimApplicationStatus = aIsiMsg.Get8bit( + uiccSbApplDataObjectOffset + + UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLSTATUS ); + } + startIndex = uiccSbApplDataObjectOffset + sbLen; + } + + if ( !usimOrSimApplFound && + UICC_CARD_TYPE_UICC == iCardType ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp-UICC_APPL_LIST, NO SUBBLOCK - handle USIM" ); +OstTrace0( TRACE_NORMAL, DUP4_CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp - UICC_APPL_LIST, NO SUBBLOCK - handle USIM" ); + applicationType = UICC_APPL_TYPE_UICC_USIM; + iApplicationType = applicationType; + iApplicationId = UICC_APPL_LAST; + } + else if ( !usimOrSimApplFound && + UICC_CARD_TYPE_ICC == iCardType ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp-UICC_APPL_LIST, NO SUBBLOCK - handle SIM" ); +OstTrace0( TRACE_NORMAL, DUP5_CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp - UICC_APPL_LIST, NO SUBBLOCK - handle SIM" ); + applicationType = UICC_APPL_TYPE_ICC_SIM; + iApplicationType = applicationType; + iApplicationId = UICC_APPL_ID_UNKNOWN; + } + // No else + + if ( UICC_CARD_TYPE_ICC == iCardType ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp-UICC_APPL_LIST FOUND_SIM" ); +OstTrace0( TRACE_NORMAL, DUP6_CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp - UICC_APPL_LIST FOUND_SIM" ); + + // Application file ID for GSM + TBuf8<2> gsmFileId; + gsmFileId.Append( 0x7F ); + gsmFileId.Append( 0x20 ); + iApplFileId.Copy( gsmFileId ); + } + + // Activate the application + TUiccParamsBase params; + params.messHandlerPtr = static_cast( this ); + params.trId = ETrIdActivateUiccApplication; +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplListResp-UICC_APPL_LIST HOST_ACTI" ); +OstTrace0( TRACE_NORMAL, DUP7_CMMUICCMESSHANDLER_HANDLEUICCAPPLLISTRESP, "CMmUiccMessHandler::HandleUiccApplListResp - UICC_APPL_LIST HOST_ACTI" ); + + ret = CreateUiccApplicationReq( + params, + UICC_APPL_HOST_ACTIVATE, + iApplicationType ); + + return ret; + } + + + + + + + +// ----------------------------------------------------------------------------- +// CMmUiccMessHandler::HandleUiccApplHostActivate +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CMmUiccMessHandler::HandleUiccApplHostActivate( const TIsiReceiveC& aIsiMsg ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplHostActivate" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_HANDLEUICCAPPLHOSTACTIVATE, "CMmUiccMessHandler::HandleUiccApplHostActivate" ); + + TInt ret( KErrNone ); + TUint16 startIndex( ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_RESP ); + TUint8 trId( aIsiMsg.Get8bit( + ISI_HEADER_SIZE + UICC_APPLICATION_RESP_OFFSET_TRANSID ) ); + +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplicationResp-HOST_ACTI" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_HANDLEUICCAPPLHOSTACTIVATE, "CMmUiccMessHandler::HandleUiccApplHostActivate - HOST_ACTI" ); + + TUint uiccSbClientOffset( 0 ); + if ( KErrNone == aIsiMsg.FindSubBlockOffsetById( + startIndex, + UICC_SB_CLIENT, + EIsiSubBlockTypeId16Len16, + uiccSbClientOffset ) ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_CLIENT" ); +OstTrace0( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_HANDLEUICCAPPLHOSTACTIVATE, "CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_CLIENT" ); + if( ETrIdActivateUiccApplication == trId ) + { + iUiccClientId = aIsiMsg.Get8bit( + uiccSbClientOffset + + UICC_SB_CLIENT_OFFSET_CLIENTID ); + } + else if( ETrIdActivateIsimApplication == trId ) + { + iUiccIsimClientId = aIsiMsg.Get8bit( + uiccSbClientOffset + + UICC_SB_CLIENT_OFFSET_CLIENTID ); + } + } + + // UICC_SB_FCI contains PIN key references + TUint uiccSbFciOffset( 0 ); + if ( KErrNone == aIsiMsg.FindSubBlockOffsetById( + ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_RESP, + UICC_SB_FCI, + EIsiSubBlockTypeId16Len16, + uiccSbFciOffset ) ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_FCI" ); +OstTrace0( TRACE_NORMAL, DUP3_CMMUICCMESSHANDLER_HANDLEUICCAPPLHOSTACTIVATE, "CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_FCI" ); + + // Check is the SIM UICC + TPtrC8 data( KNullDesC8 ); + + // The whole sub block is returned + TInt sbLength( aIsiMsg.Get16bit( + uiccSbFciOffset + UICC_SB_FCI_OFFSET_SBLEN ) ); + data.Set( aIsiMsg.GetData( + uiccSbFciOffset, + sbLength ) ); + + TFci fci( data ); + if( UICC_CARD_TYPE_UICC == fci.GetTypeOfCard() ) + { + StorePinKeyReferences( data ); + } + } + + // In case of ICC there is two UICC_SB_CHV subblocks + // that contain PIN IDs for ICC application + TUint uiccSbChvOffset( 0 ); + while ( KErrNone == aIsiMsg.FindSubBlockOffsetById( + startIndex, + UICC_SB_CHV, + EIsiSubBlockTypeId16Len16, + uiccSbChvOffset ) ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_CHV" ); +OstTrace0( TRACE_NORMAL, DUP4_CMMUICCMESSHANDLER_HANDLEUICCAPPLHOSTACTIVATE, "CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_CHV" ); + + TUint8 chvQualifier( aIsiMsg.Get8bit( + uiccSbChvOffset + + UICC_SB_CHV_OFFSET_CHVQUALIFIER ) ); + if ( UICC_CHV1 == chvQualifier ) // PIN1 + { + iPin1Id = aIsiMsg.Get8bit( + uiccSbChvOffset + UICC_SB_CHV_OFFSET_PINID ); + } + else // PIN2 + { + iPin2Id = aIsiMsg.Get8bit( + uiccSbChvOffset + UICC_SB_CHV_OFFSET_PINID ); + } + startIndex = uiccSbChvOffset + SIZE_UICC_SB_CHV; + } + + // In case EFdir was empty or didn't exist in APPL_LIST + // response, HOST_ACTIVATE request is done differently. + // Response for HOST_ACTIVATE include UICC_SB_APPLICATION + // subblock. + TUint uiccSbApplicationOffset( 0 ); + if ( KErrNone == aIsiMsg.FindSubBlockOffsetById( + ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_RESP, + UICC_SB_APPLICATION, + EIsiSubBlockTypeId16Len16, + uiccSbApplicationOffset ) ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_APPLICATION" ); +OstTrace0( TRACE_NORMAL, DUP5_CMMUICCMESSHANDLER_HANDLEUICCAPPLHOSTACTIVATE, "CMmUiccMessHandler::HandleUiccApplHostActivate - UICC_SB_APPLICATION" ); + + // Update AID + iAid.Copy( KTruncatedAID ); + + // Update Application type + iApplicationType = aIsiMsg.Get8bit( + uiccSbApplicationOffset + + UICC_SB_APPLICATION_OFFSET_APPLICATIONTYPE ); + + // Update Appl ID + iApplicationId = aIsiMsg.Get8bit( + uiccSbApplicationOffset + + UICC_SB_APPLICATION_OFFSET_APPLID ); + } + + // Application is now ready to start receiving commands + iApplicationStatus = UICC_STATUS_APPL_ACTIVE; + InitializeSimServiceTableCache(); + InitializeCphsInformationCache(); + + return ret; + } + + // ----------------------------------------------------------------------------- // CMmUiccMessHandler::HandleUiccApplicationResp // (other items were commented in a header). @@ -1143,7 +1555,7 @@ const TIsiReceiveC& aIsiMsg ) { TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplicationResp" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_HANDLEUICCAPPLICATIONRESP, "CMmUiccMessHandler::HandleUiccApplicationResp" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_HANDLEUICCAPPLICATIONRESP_TD, "CMmUiccMessHandler::HandleUiccApplicationResp" ); TInt ret( KErrNone ); // Get service type and status @@ -1155,7 +1567,6 @@ ISI_HEADER_SIZE + UICC_APPLICATION_RESP_OFFSET_CARDTYPE ); TUint8 trId( aIsiMsg.Get8bit( ISI_HEADER_SIZE + UICC_APPLICATION_RESP_OFFSET_TRANSID ) ); - TUint16 startIndex( ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_RESP ); if ( UICC_STATUS_OK == status ) { @@ -1163,168 +1574,17 @@ { case UICC_APPL_LIST: { - // Check if UICC_SB_APPL_DATA_OBJECT is included => UICC application - TUint uiccSbApplDataObjectOffset( 0 ); - TUint8 applicationType( 0 ); - TUint16 sbLen( 0 ); - - TBool usimApplFound( EFalse ); - - while ( KErrNone == aIsiMsg.FindSubBlockOffsetById( - startIndex, - UICC_SB_APPL_DATA_OBJECT, - EIsiSubBlockTypeId16Len16, - uiccSbApplDataObjectOffset ) ) - { - applicationType = aIsiMsg.Get8bit( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLICATIONTYPE ); - - sbLen = aIsiMsg.Get16bit( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_SBLEN ); - - if ( UICC_APPL_TYPE_UICC_USIM == applicationType && - EFalse == usimApplFound ) - { - iApplicationType = applicationType; - - iApplicationId = aIsiMsg.Get8bit( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLID ); - iApplicationStatus = aIsiMsg.Get8bit( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLSTATUS ); - - TUint8 length( aIsiMsg.Get8bit( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLDOLEN ) ); - - // Application data object contains EF dir data, - // 5 bytes are mandatory. See TS 102.221 V7.11.0 table 13.2 - if ( 5 <= length ) - { - TPtrC8 applDataObject( aIsiMsg.GetData( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLDO, - length ) ); - // Length of AID is located in index 3 - TUint8 aidLength( applDataObject[3] ); - // Copy actual AID - iAid.Copy( applDataObject.Mid( 4, aidLength ) ); - } - - usimApplFound = ETrue; - } - else if( UICC_APPL_TYPE_UICC_ISIM == applicationType && - EFalse == iIsimApplicationFound ) - { - iIsimApplicationFound = ETrue; - - iIsimApplicationId = aIsiMsg.Get8bit( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLID ); - iIsimApplicationStatus = aIsiMsg.Get8bit( - uiccSbApplDataObjectOffset + - UICC_SB_APPL_DATA_OBJECT_OFFSET_APPLSTATUS ); - } - startIndex = uiccSbApplDataObjectOffset + sbLen; - } - if ( EFalse == usimApplFound ) // ICC application - { - iApplicationType = UICC_APPL_TYPE_ICC_SIM; - iApplicationId = UICC_APPL_ID_UNKNOWN; - // Application file ID for GSM - TBuf8<2> gsmFileId; - gsmFileId.Append( 0x7F ); - gsmFileId.Append( 0x20 ); - iApplFileId.Copy( gsmFileId ); - } - // Activate the application - if ( UICC_STATUS_APPL_ACTIVE != iApplicationStatus ) - { - TUiccParamsBase params; - params.messHandlerPtr = static_cast( this ); - params.trId = ETrIdActivateUiccApplication; - ret = CreateUiccApplicationReq( params, UICC_APPL_HOST_ACTIVATE ); - } + ret = HandleUiccApplListResp( aIsiMsg ); break; } case UICC_APPL_HOST_ACTIVATE: { - TUint uiccSbClientOffset( 0 ); - if ( KErrNone == aIsiMsg.FindSubBlockOffsetById( - startIndex, - UICC_SB_CLIENT, - EIsiSubBlockTypeId16Len16, - uiccSbClientOffset ) ) - { - if( ETrIdActivateUiccApplication == trId ) - { - iUiccClientId = aIsiMsg.Get8bit( - uiccSbClientOffset + - UICC_SB_CLIENT_OFFSET_CLIENTID ); - } - else if( ETrIdActivateIsimApplication == trId ) - { - iUiccIsimClientId = aIsiMsg.Get8bit( - uiccSbClientOffset + - UICC_SB_CLIENT_OFFSET_CLIENTID ); - } - } - // UICC_SB_FCI contains PIN key references - TUint uiccSbFciOffset( 0 ); - if ( KErrNone == aIsiMsg.FindSubBlockOffsetById( - ISI_HEADER_SIZE + SIZE_UICC_APPLICATION_RESP, - UICC_SB_FCI, - EIsiSubBlockTypeId16Len16, - uiccSbFciOffset ) ) - { - // Check is the SIM UICC - TPtrC8 data( KNullDesC8 ); - - // The whole sub block is returned - TInt sbLength( aIsiMsg.Get16bit( - uiccSbFciOffset + UICC_SB_FCI_OFFSET_SBLEN ) ); - data.Set( aIsiMsg.GetData( - uiccSbFciOffset, - sbLength ) ); - - TFci fci( data ); - if( UICC_CARD_TYPE_UICC == fci.GetTypeOfCard() ) - { - StorePinKeyReferences( data ); - } - } - - // In case of ICC there is two UICC_SB_CHV subblocks - // that contain PIN IDs for ICC application - TUint uiccSbChvOffset( 0 ); - while ( KErrNone == aIsiMsg.FindSubBlockOffsetById( - startIndex, - UICC_SB_CHV, - EIsiSubBlockTypeId16Len16, - uiccSbChvOffset ) ) - { - TUint8 chvQualifier( aIsiMsg.Get8bit( - uiccSbChvOffset + - UICC_SB_CHV_OFFSET_CHVQUALIFIER ) ); - if ( UICC_CHV1 == chvQualifier ) // PIN1 - { - iPin1Id = aIsiMsg.Get8bit( - uiccSbChvOffset + UICC_SB_CHV_OFFSET_PINID ); - } - else // PIN2 - { - iPin2Id = aIsiMsg.Get8bit( - uiccSbChvOffset + UICC_SB_CHV_OFFSET_PINID ); - } - startIndex = uiccSbChvOffset + SIZE_UICC_SB_CHV; - } + ret = HandleUiccApplHostActivate( aIsiMsg ); break; } default: { +TFLOGSTRING("TSY: CMmUiccMessHandler::HandleUiccApplicationResp - default"); break; } } @@ -1346,7 +1606,7 @@ const TPtrC8 CMmUiccMessHandler::GetFileFCI( const TIsiReceiveC& aIsiMsg ) { TFLOGSTRING("TSY: CMmUiccMessHandler::GetFileFCI"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETFILEFCI, "CMmUiccMessHandler::GetFileFCI" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETFILEFCI_TD, "CMmUiccMessHandler::GetFileFCI" ); TPtrC8 data( KNullDesC8 ); TUint uiccSbFileDataOffset( 0 ); @@ -1376,7 +1636,7 @@ const TUiccParamsBase& aParams ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccConnectorReq"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCCONNREQ, "CMmUiccMessHandler::CreateUiccConnectorReq" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCCONNREQ_TD, "CMmUiccMessHandler::CreateUiccConnectorReq" ); TInt ret (KErrGeneral); TInt trId( aParams.trId ); @@ -1418,7 +1678,9 @@ break; } default: + { break; + } } isiMsg.Set8bit( @@ -1442,7 +1704,7 @@ TInt CMmUiccMessHandler::CreateUiccApduReq( const TUiccParamsApduReq& aParams ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccApduReq"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCAPDUREQ, "CMmUiccMessHandler::CreateUiccApduReq" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCAPDUREQ_TD, "CMmUiccMessHandler::CreateUiccApduReq" ); TInt ret (KErrGeneral); TInt trId( aParams.trId ); @@ -1525,7 +1787,7 @@ TUint8 aAction ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbApduActions"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCASBPDUACTION, "CMmUiccMessHandler::CreateUiccSbApduActions" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCASBPDUACTION_TD, "CMmUiccMessHandler::CreateUiccSbApduActions" ); // SIZE_UICC_SB_APPLICATION_STR TBuf8 uiccSbApduActionBuf( 0 ); @@ -1555,7 +1817,7 @@ const TPtrC8 CMmUiccMessHandler::GetApduData( const TIsiReceiveC& aIsiMsg ) { TFLOGSTRING("TSY: CMmUiccMessHandler::GetApduData"); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPDUDATA, "CMmUiccMessHandler::GetApduData" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETAPDUDATA_TD, "CMmUiccMessHandler::GetApduData" ); TPtrC8 data( KNullDesC8 ); @@ -1588,7 +1850,7 @@ const TDesC8& aAPDUData) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccSbApdu" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATESBAPDU, "CMmUiccMessHandler::CreateUiccSbApdu" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATESBAPDU_TD, "CMmUiccMessHandler::CreateUiccSbApdu" ); // UICC_SB_APDU subblock TBuf8 uiccSbApduBuf( 0 ); @@ -1623,7 +1885,7 @@ TInt CMmUiccMessHandler::CreateUiccCardReq( const TUiccParamsBase& aParams ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccCardReq" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATECARDREQ, "CMmUiccMessHandler::CreateUiccCardReq" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATECARDREQ_TD, "CMmUiccMessHandler::CreateUiccCardReq" ); TInt ret ( KErrGeneral ); TInt trId( aParams.trId ); @@ -1667,7 +1929,7 @@ void CMmUiccMessHandler::InitializeSimServiceTableCache( TBool aComplete ) { TFLOGSTRING("TSY: CMmUiccMessHandler::InitializeSimServiceTableCache" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_INITIALIZESIMSERVICETABLECACHE, "CMmUiccMessHandler::InitializeSimServiceTableCache" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_INITIALIZESIMSERVICETABLECACHE_TD, "CMmUiccMessHandler::InitializeSimServiceTableCache" ); // Service table internal cacheing is done during strtup and SIM refresh. // Completing of IPC EMmTsyBootNotifySimStatusReadyIPC is done only @@ -1705,7 +1967,7 @@ const TDesC8& aFileData ) { TFLOGSTRING("TSY: CMmUiccMessHandler::SimServiceTableCacheResp" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_SIMSERVICETABLECACHERESP, "CMmUiccMessHandler::SimServiceTableCacheResp" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_SIMSERVICETABLECACHERESP_TD, "CMmUiccMessHandler::SimServiceTableCacheResp" ); if ( UICC_STATUS_OK == aStatus ) { @@ -1722,13 +1984,13 @@ else { TFLOGSTRING("TSY: CMmUiccMessHandler::SimServiceTableCacheResp unknown card type, cache not done" ); -OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_SIMSERVICETABLECACHERESP, "CMmUiccMessHandler::SimServiceTableCacheResp unknown card type, cache not done" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_SIMSERVICETABLECACHERESP_TD, "CMmUiccMessHandler::SimServiceTableCacheResp unknown card type, cache not done" ); } } else { TFLOGSTRING2("TSY: CMmUiccMessHandler::SimServiceTableCacheResp: reading failed (0x%x)", aStatus ); -OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_SIMSERVICETABLECACHERESP, "CMmUiccMessHandler::SimServiceTableCacheResp: reading failed (%x)", aStatus ); +OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_SIMSERVICETABLECACHERESP_TD, "CMmUiccMessHandler::SimServiceTableCacheResp: reading failed (%x)", aStatus ); } // Cacheing during startup @@ -1754,7 +2016,7 @@ TBool CMmUiccMessHandler::GetServiceStatus( TUint8 aServiceNo ) { TFLOGSTRING2("TSY: CMmUiccMessHandler::GetServiceStatus for card: ox%x", iCardType ); -OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETSERVICESTATUS, "CMmUiccMessHandler::GetServiceStatus for card: ox%x", iCardType ); +OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETSERVICESTATUS_TD, "CMmUiccMessHandler::GetServiceStatus for card: ox%x", iCardType ); TBool ret( EFalse ); @@ -1785,7 +2047,7 @@ if( iUSTFile[index] & mask ) { TFLOGSTRING2("TSY: CMmUiccMessHandler::GetServiceStatus: UICC service (%d) supported", aServiceNo ); -OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_GETSERVICESTATUS, "CMmUiccMessHandler::GetServiceStatus: UICC service (%d) supported", aServiceNo ); +OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_GETSERVICESTATUS_TD, "CMmUiccMessHandler::GetServiceStatus: UICC service (%d) supported", aServiceNo ); ret = ETrue; } } @@ -1822,7 +2084,7 @@ if( ( iSSTFile[index] & mask ) == mask ) { TFLOGSTRING2("TSY: CMmUiccMessHandler::GetServiceStatus: ICC service (%d) supported", aServiceNo ); -OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_GETSERVICESTATUS, "CMmUiccMessHandler::GetServiceStatus: ICC service (%d) supported", aServiceNo ); +OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_GETSERVICESTATUS_TD, "CMmUiccMessHandler::GetServiceStatus: ICC service (%d) supported", aServiceNo ); ret = ETrue; } } @@ -1842,8 +2104,8 @@ const TDesC8& aFileData ) { TFLOGSTRING3("TSY: CMmUiccMessHandler::ProcessUiccMsg, transaction ID: %d, status: %d", aTraId, aStatus ); -OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_PROCESSUICCMSG, "CMmUiccMessHandler::ProcessUiccMsg, transaction ID: %d", aTraId ); -OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_PROCESSUICCMSG, "CMmUiccMessHandler::ProcessUiccMsg, status: %d", aStatus ); +OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_PROCESSUICCMSG_TD, "CMmUiccMessHandler::ProcessUiccMsg, transaction ID: %d", aTraId ); +OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_PROCESSUICCMSG_TD, "CMmUiccMessHandler::ProcessUiccMsg, status: %d", aStatus ); TInt ret( KErrNone ); @@ -1862,7 +2124,7 @@ default: { TFLOGSTRING("TSY: CMmUiccMessHandler::ProcessUiccMsg, unknown transaction ID" ); -OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_PROCESSUICCMSG, "CMmUiccMessHandler::ProcessUiccMsg, unknown transaction ID" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_PROCESSUICCMSG_TD, "CMmUiccMessHandler::ProcessUiccMsg, unknown transaction ID" ); break; } } @@ -1878,7 +2140,7 @@ void CMmUiccMessHandler::StorePinKeyReferences( const TDesC8& aFileData ) { TFLOGSTRING("TSY: CMmUiccMessHandler::StorePinKeyReferences" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_STOREPINKEYREFERENCES, "CMmUiccMessHandler::StorePinKeyReferences" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_STOREPINKEYREFERENCES_TD, "CMmUiccMessHandler::StorePinKeyReferences" ); // Get offset for PIN Status Template DO TFci fci( aFileData ); @@ -1955,7 +2217,7 @@ TUint8 CMmUiccMessHandler::GetPin1KeyReference() { TFLOGSTRING("TSY: CMmUiccMessHandler::GetPin1KeyReference" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETPIN1KEYREFERENCE, "CMmUiccMessHandler::GetPin1KeyReference" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETPIN1KEYREFERENCE_TD, "CMmUiccMessHandler::GetPin1KeyReference" ); return iPin1Id; } @@ -1967,7 +2229,7 @@ TUint8 CMmUiccMessHandler::GetPin2KeyReference() { TFLOGSTRING("TSY: CMmUiccMessHandler::GetPin2KeyReference" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETPIN2KEYREFERENCE, "CMmUiccMessHandler::GetPin2KeyReference" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETPIN2KEYREFERENCE_TD, "CMmUiccMessHandler::GetPin2KeyReference" ); return iPin2Id; } @@ -1979,7 +2241,7 @@ RMobilePhone::TMobilePhoneSecurityCode CMmUiccMessHandler::GetActivePin() { TFLOGSTRING("TSY: CMmUiccMessHandler::GetActivePin" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETACTIVEPIN, "CMmUiccMessHandler::GetActivePin" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETACTIVEPIN_TD, "CMmUiccMessHandler::GetActivePin" ); return iActivePin; } @@ -1991,7 +2253,7 @@ void CMmUiccMessHandler::ChangeActivePin() { TFLOGSTRING("TSY: CMmUiccMessHandler::ChangeActivePin" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CHANGEACTIVEPIN, "CMmUiccMessHandler::ChangeActivePin" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CHANGEACTIVEPIN_TD, "CMmUiccMessHandler::ChangeActivePin" ); // Change the internal flag indicating which PIN is active if ( RMobilePhone::ESecurityCodePin1 == iActivePin ) { @@ -2011,7 +2273,7 @@ void CMmUiccMessHandler::InitializeCphsInformationCache() { TFLOGSTRING("TSY: CMmUiccMessHandler::InitializeCphsInformationCache" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_INITIALIZECPHSINFORMATIONCACHE, "CMmUiccMessHandler::InitializeCphsInformationCache" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_INITIALIZECPHSINFORMATIONCACHE_TD, "CMmUiccMessHandler::InitializeCphsInformationCache" ); // CPHS information is read only in case of ICC card if( UICC_CARD_TYPE_ICC == iCardType ) @@ -2045,7 +2307,7 @@ const TDesC8& aFileData ) { TFLOGSTRING("TSY: CMmUiccMessHandler::CphsInformationCacheResp" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP, "CMmUiccMessHandler::CphsInformationCacheResp" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP_TD, "CMmUiccMessHandler::CphsInformationCacheResp" ); if ( UICC_STATUS_OK == aStatus ) { @@ -2060,15 +2322,15 @@ else { TFLOGSTRING3("TSY: CMmUiccMessHandler::CphsInformationCacheResp: buffer too small (expected: %d, actual: %d), cannot store CPHS info", dataSize, iCPHSInformation.Length() ); -OstTrace0( TRACE_NORMAL, DUP3_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP, "CMmUiccMessHandler::CphsInformationCacheResp: buffer too small, cannot store CPHS info" ); -OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP, "CMmUiccMessHandler::CphsInformationCacheResp: expected size: %d", dataSize ); -OstTrace1( TRACE_NORMAL, DUP4_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP, "CMmUiccMessHandler::CphsInformationCacheResp: actual size: %d", iCPHSInformation.Length() ); +OstTrace0( TRACE_NORMAL, DUP3_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP_TD, "CMmUiccMessHandler::CphsInformationCacheResp: buffer too small, cannot store CPHS info" ); +OstTrace1( TRACE_NORMAL, DUP2_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP_TD, "CMmUiccMessHandler::CphsInformationCacheResp: expected size: %d", dataSize ); +OstTrace1( TRACE_NORMAL, DUP4_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP_TD, "CMmUiccMessHandler::CphsInformationCacheResp: actual size: %d", iCPHSInformation.Length() ); } } else { TFLOGSTRING2("TSY: CMmUiccMessHandler::CphsInformationCacheResp: reading failed (0x%x)", aStatus ); -OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP, "CMmUiccMessHandler::CphsInformationCacheResp: reading failed (0x%x)", aStatus ); +OstTrace1( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_CPHSINFORMATIONCACHERESP_TD, "CMmUiccMessHandler::CphsInformationCacheResp: reading failed (0x%x)", aStatus ); } } @@ -2080,7 +2342,7 @@ TBool CMmUiccMessHandler::GetCphsInformationStatus( TUint8 aServiceNo ) { TFLOGSTRING("TSY: CMmUiccMessHandler::GetCphsInformationStatus" ); -OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_GETCPHSINFORMATIONSTATUS, "CMmUiccMessHandler::GetCphsInformationStatus" ); +OstTrace0( TRACE_NORMAL, DUP1_CMMUICCMESSHANDLER_GETCPHSINFORMATIONSTATUS_TD, "CMmUiccMessHandler::GetCphsInformationStatus" ); TBool ret( EFalse ); @@ -2113,7 +2375,7 @@ if( ( iCPHSInformation[index] & mask ) == mask ) { TFLOGSTRING2("TSY: CMmUiccMessHandler::GetCphsInformationStatus: CPHS service (%d) supported", aServiceNo ); -OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETCPHSINFORMATIONSTATUS, "CMmUiccMessHandler::GetCphsInformationStatus: CPHS service (%d) supported", aServiceNo ); +OstTrace1( TRACE_NORMAL, CMMUICCMESSHANDLER_GETCPHSINFORMATIONSTATUS_TD, "CMmUiccMessHandler::GetCphsInformationStatus: CPHS service (%d) supported", aServiceNo ); ret = ETrue; } } @@ -2132,7 +2394,7 @@ lengthOfFCISb = CMmStaticUtility::Get16Bit( iData, UICC_SB_FCI_OFFSET_SBLEN ); TFLOGSTRING2("TSY: TFci::GetLength lengthOfFCISb = %d", lengthOfFCISb ); -OstTrace1( TRACE_NORMAL, TFCI_GETLENGTH, "TFci::GetLength;lengthOfFCISb=%d", lengthOfFCISb ); +OstTrace1( TRACE_NORMAL, TFCI_GETLENGTH_TD, "TFci::GetLength;lengthOfFCISb=%d", lengthOfFCISb ); return lengthOfFCISb; } @@ -2146,7 +2408,7 @@ { TUint8 uiccCardType( iData[UICC_SB_FCI_OFFSET_CARDTYPE] ); TFLOGSTRING2("TSY: TFci::GetTypeOfCard uiccCardType = %d", uiccCardType ); -OstTraceExt1( TRACE_NORMAL, TFCI_GETTYPEOFCARD, "TFci::GetTypeOfCard;uiccCardType=%hhu", uiccCardType ); +OstTraceExt1( TRACE_NORMAL, TFCI_GETTYPEOFCARD_TD, "TFci::GetTypeOfCard;uiccCardType=%hhu", uiccCardType ); return uiccCardType; } @@ -2159,7 +2421,7 @@ TInt TFci::GetOffsetOfTLV( const TUint8 aDescription ) { TFLOGSTRING("TSY: TFci::::GetOffsetOfTLV" ); -OstTrace0( TRACE_NORMAL, TFCI_GETOFFSETOFTLV, "TFci::GetOffsetOfTLV" ); +OstTrace0( TRACE_NORMAL, TFCI_GETOFFSETOFTLV_TD, "TFci::GetOffsetOfTLV" ); TInt indexOfData( 0 ); TInt length( GetLength() ); @@ -2211,7 +2473,7 @@ TInt TFci::GetNumberOfRecords() { TFLOGSTRING("TSY: TFci::GetNumberOfRecords" ); -OstTrace0( TRACE_NORMAL, TFCI_GETNUMBEROFRECORDS, "TFci::GetNumberOfRecords" ); +OstTrace0( TRACE_NORMAL, TFCI_GETNUMBEROFRECORDS_TD, "TFci::GetNumberOfRecords" ); TInt numberOfRecords( 0 ); TUint8 uiccCardType( GetTypeOfCard()); @@ -2248,11 +2510,11 @@ else { TFLOGSTRING("TSY: TFci::GetNumberOfRecords: UNKNOWN CARD TYPE" ); -OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETNUMBEROFRECORDS, "TFci::GetNumberOfRecords: UNKNOWN CARD TYPE" ); +OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETNUMBEROFRECORDS_TD, "TFci::GetNumberOfRecords: UNKNOWN CARD TYPE" ); } TFLOGSTRING2("TSY: TFci::GetNumberOfRecords numberOfRecords = %d", numberOfRecords ); -OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETNUMBEROFRECORDS, "TFci::GetNumberOfRecords;numberOfRecords=%d", numberOfRecords ); +OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETNUMBEROFRECORDS_TD, "TFci::GetNumberOfRecords;numberOfRecords=%d", numberOfRecords ); return numberOfRecords; } @@ -2265,7 +2527,7 @@ TInt TFci::GetRecordLength() { TFLOGSTRING("TSY: TFci::GetRecordLength" ); -OstTrace0( TRACE_NORMAL, TFCI_GETRECORDLENGTH, "TFci::GetRecordLength" ); +OstTrace0( TRACE_NORMAL, TFCI_GETRECORDLENGTH_TD, "TFci::GetRecordLength" ); TInt recordLength( 0 ); TUint8 uiccCardType( GetTypeOfCard()); @@ -2295,11 +2557,11 @@ else { TFLOGSTRING("TSY: TFci::GetRecordLength: UNKNOWN CARD TYPE" ); -OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETRECORDLENGTH, "TFci::GetRecordLength: UNKNOWN CARD TYPE" ); +OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETRECORDLENGTH_TD, "TFci::GetRecordLength: UNKNOWN CARD TYPE" ); } TFLOGSTRING2("TSY: TFci::GetRecordLength recordLength = %d", recordLength ); -OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETRECORDLENGTH, "TFci::GetRecordLength;recordLength=%d", recordLength ); +OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETRECORDLENGTH_TD, "TFci::GetRecordLength;recordLength=%d", recordLength ); return recordLength; } @@ -2312,7 +2574,7 @@ TInt TFci::GetSizeOfFile() { TFLOGSTRING("TSY: TFci::GetSizeOfFile" ); -OstTrace0( TRACE_NORMAL, TFCI_GETSIZEOFFILE, "TFci::GetSizeOfFile" ); +OstTrace0( TRACE_NORMAL, TFCI_GETSIZEOFFILE_TD, "TFci::GetSizeOfFile" ); TInt fileSize( 0 ); TUint8 uiccCardType( GetTypeOfCard() ); @@ -2342,12 +2604,12 @@ else { TFLOGSTRING("TSY: TFci::GetFileSize: UNKNOWN CARD TYPE" ); -OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETSIZEOFFILE, "TFci::GetSizeOfFile: UNKNOWN CARD TYPE" ); +OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETSIZEOFFILE_TD, "TFci::GetSizeOfFile: UNKNOWN CARD TYPE" ); } TFLOGSTRING2("TSY: TFci::GetSizeOfFile fileSize = %d", fileSize ); -OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETSIZEOFFILE, "TFci::GetSizeOfFile;fileSize=%d", fileSize ); +OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETSIZEOFFILE_TD, "TFci::GetSizeOfFile;fileSize=%d", fileSize ); return fileSize; } @@ -2360,7 +2622,7 @@ TInt TFci::GetFileIdentifier() { TFLOGSTRING("TSY: TFci::GetFileIdentifier" ); -OstTrace0( TRACE_NORMAL, TFCI_GETFILEIDENTIFIER, "TFci::GetFileIdentifier" ); +OstTrace0( TRACE_NORMAL, TFCI_GETFILEIDENTIFIER_TD, "TFci::GetFileIdentifier" ); TInt fileIdentifier( 0 ); TUint8 uiccCardType( GetTypeOfCard()); @@ -2392,11 +2654,11 @@ else { TFLOGSTRING("TSY: TFci::GetFileIdentifier: UNKNOWN CARD TYPE" ); -OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETFILEIDENTIFIER, "TFci::GetFileIdentifier: UNKNOWN CARD TYPE" ); +OstTrace0( TRACE_NORMAL, DUP2_TFCI_GETFILEIDENTIFIER_TD, "TFci::GetFileIdentifier: UNKNOWN CARD TYPE" ); } TFLOGSTRING2("TSY: TFci::GetFileIdentifier fileIdentifier = %d", fileIdentifier ); -OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETFILEIDENTIFIER, "TFci::GetFileIdentifier;fileIdentifier=%d", fileIdentifier ); +OstTrace1( TRACE_NORMAL, DUP1_TFCI_GETFILEIDENTIFIER_TD, "TFci::GetFileIdentifier;fileIdentifier=%d", fileIdentifier ); return fileIdentifier; } @@ -2409,7 +2671,7 @@ TUint8 TFci::GetFileStatus() { TFLOGSTRING("TSY: TFci::GetFileStatus" ); -OstTrace0( TRACE_NORMAL, TFCI_GETFILESTATUS, "TFci::GetFileStatus" ); +OstTrace0( TRACE_NORMAL, TFCI_GETFILESTATUS_TD, "TFci::GetFileStatus" ); TUint8 fileStatus( 0 ); TUint8 uiccCardType( GetTypeOfCard()); @@ -2426,11 +2688,11 @@ else { TFLOGSTRING("TSY: TFci::GetFileStatus: UNKNOWN CARD TYPE" ); -OstTrace0( TRACE_NORMAL, DUP1_TFCI_GETFILESTATUS, "TFci::GetFileStatus: UNKNOWN CARD TYPE" ); +OstTrace0( TRACE_NORMAL, DUP1_TFCI_GETFILESTATUS_TD, "TFci::GetFileStatus: UNKNOWN CARD TYPE" ); } TFLOGSTRING2("TSY: TFci::GetFileStatus fileStatus = %d", fileStatus ); -OstTraceExt1( TRACE_NORMAL, DUP2_TFCI_GETFILESTATUS, "TFci::GetFileStatus;fileStatus=%hhu", fileStatus ); +OstTraceExt1( TRACE_NORMAL, DUP2_TFCI_GETFILESTATUS_TD, "TFci::GetFileStatus;fileStatus=%hhu", fileStatus ); return fileStatus; } @@ -2443,8 +2705,90 @@ TUint8 CMmUiccMessHandler::GetUiccClientId() { TFLOGSTRING("TSY: CMmUiccMessHandler::GetUiccClientId" ); -OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETUICCCLIENTID, "CMmUiccMessHandler::GetUiccClientId" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETUICCCLIENTID_TD, "CMmUiccMessHandler::GetUiccClientId" ); return iUiccClientId; } +// ----------------------------------------------------------------------------- +// CMmUiccMessHandler::GetUiccApplicationStatus +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TUint8 CMmUiccMessHandler::GetUiccApplicationStatus() + { +TFLOGSTRING("TSY: CMmUiccMessHandler::GetUiccApplicationStatus" ); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_GETUICCAPPLICATIONSTATUS_TD, "CMmUiccMessHandler::GetUiccApplicationStatus" ); + return iApplicationStatus; + } + + +// ----------------------------------------------------------------------------- +// CMmUiccMessHandler::CreateUiccReq +// Builds UICC_REQ ISI message and sends it via phonet +// ----------------------------------------------------------------------------- +// +TInt CMmUiccMessHandler::CreateUiccReq() + { +TFLOGSTRING("TSY: CMmUiccMessHandler::CreateUiccReq"); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_CREATEUICCREQ_TD, "CMmUiccMessHandler::CreateUiccReq" ); + + // Create UICC_REQ message for querying card status + TIsiSend isiMsg( iPhoNetSender->SendBufferDes() ); + isiMsg.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_UICC ); + isiMsg.Set8bit( ISI_HEADER_OFFSET_TRANSID, ETrIdGetUiccStatus ); + isiMsg.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, UICC_REQ ); + isiMsg.Set8bit( ISI_HEADER_SIZE + UICC_REQ_OFFSET_SERVICETYPE, + UICC_STATUS_GET ); + // THERE IS NO OFFSET FOR SB COUNT CURRENTLY IN THE ISI HEADER + isiMsg.Set8bit( ISI_HEADER_SIZE + UICC_REQ_OFFSET_SERVICETYPE + 1, 0x00 ); + + return iPhoNetSender->Send( isiMsg.Complete() ); + } + +// ----------------------------------------------------------------------------- +// CMmUiccMessHandler::UiccCardRespStatus +// Uicc card response card status handling +// ----------------------------------------------------------------------------- +// +void CMmUiccMessHandler::UiccCardRespStatus( const TIsiReceiveC& aIsiMsg ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::UiccCardRespStatus"); +OstTrace0( TRACE_NORMAL, CMMUICCMESSHANDLER_UICCCARDRESPSTATUS_TD, "CMmUiccMessHandler::UiccCardRespStatus" ); + + TUint8 nbOfSubBlocks( aIsiMsg.Get8bit( + ISI_HEADER_SIZE + UICC_CARD_RESP_OFFSET_NSB ) ); + if( nbOfSubBlocks ) + { + + TUint uiccSbFileDataOffset( 0 ); + if( KErrNone == aIsiMsg.FindSubBlockOffsetById( + ISI_HEADER_SIZE + SIZE_UICC_CARD_RESP, + UICC_SB_CARD_STATUS, + EIsiSubBlockTypeId16Len16, + uiccSbFileDataOffset ) ) + { + + TInt cardStatus( aIsiMsg.Get8bit( + uiccSbFileDataOffset + + UICC_SB_CARD_STATUS_OFFSET_CARDSTATUS ) ); +TFLOGSTRING2("TSY: CMmUiccMessHandler::UiccCardRespStatus: UICC_CARD_RESP cardstatus = %d", cardStatus ); + if( UICC_STATUS_CARD_NOT_READY == cardStatus ) + { + SendTerminalProfile(); + } + else if( UICC_STATUS_CARD_READY == cardStatus && + UICC_APPL_ID_UNKNOWN == iApplicationId ) + { +TFLOGSTRING("TSY: CMmUiccMessHandler::UiccCardRespStatus: UICC_CARD_RESP ACTIVATE"); + // Activate the application + TUiccParamsBase params; + params.messHandlerPtr = static_cast( this ); + params.trId = ETrIdGetUiccApplication; + CreateUiccApplicationReq( params, UICC_APPL_LIST, iCardType ); + + } + } + } + } + // End of File