adaptationlayer/tsy/nokiatsy_dll/src/cmmphonemesshandler.cpp
changeset 8 6295dc2169f3
parent 5 8ccc39f9d787
child 9 8486d82aef45
equal deleted inserted replaced
7:fa67e03b87df 8:6295dc2169f3
     1 /*
     1 /*
     2 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of the License "Eclipse Public License v1.0"
     5 * under the terms of the License "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    63 // MACROS
    63 // MACROS
    64     //None
    64     //None
    65 
    65 
    66 // LOCAL CONSTANTS AND MACROS
    66 // LOCAL CONSTANTS AND MACROS
    67 
    67 
    68 const TUint8 KPhoneTransId = 6; //hard coded transaction ID
    68 const TUint8 KPhoneTransId = 6;
    69 const TUint8 KImsiSize = 8;
       
    70 const TUint8 KServiceProviderSize = 36;
    69 const TUint8 KServiceProviderSize = 36;
    71 const TUint8 KSpnFileSize = 16;
    70 const TUint8 KSpnFileSize = 16;
    72 
    71 
    73 const TUint8 KServiceAcl( 35 );
    72 const TUint8 KServiceAcl( 35 );
    74 const TUint8 KAclStateMask( 4 );
    73 const TUint8 KAclStateMask( 4 );
    75 const TUint8 KNumOfApnsIndex( 0 );
    74 const TUint8 KNumOfApnsIndex( 0 );
    76 const TUint8 KApnDataIndex( 1 );
    75 const TUint8 KApnDataIndex( 1 );
       
    76 const TUint8 KCpsLength( 18 );
       
    77 const TUint8 KSpnLength( 17 );
       
    78 const TUint8 KLineInfoLength( 1 );
       
    79 const TUint8 KAclStatusLength( 1 );
       
    80 
       
    81 const TUint8 KImsiSize = 9;
       
    82 const TUint8 KUnusedNibble = 0x0F;
       
    83 const TUint8 KImsiStringByteCount = 0;
       
    84 const TUint8 KFirstImsiDigit = 1;
       
    85 const TUint8 KSecondImsiDigit = 2;
       
    86 const TUint8 KNibbleMask = 0x0f;
       
    87 const TUint8 KNibbleShift = 4;
    77 
    88 
    78 // ------------------------------------------------------
    89 // ------------------------------------------------------
    79 // --- Alternate Line Service (ALS)-related constants ---
    90 // --- Alternate Line Service (ALS)-related constants ---
    80 // ------------------------------------------------------
    91 // ------------------------------------------------------
    81 // Consts for mapping the Als Line values, as used in SIMSON's
    92 // Consts for mapping the Als Line values, as used in SIMSON's
    82 // SIM_SERV_DYNAMIC_FLAGS_STR structure.
    93 // SIM_SERV_DYNAMIC_FLAGS_STR structure.
    83 const TUint8 KAlsAuxiliaryLine = 0x00; // ALS alternate line
    94 const TUint8 KAlsAuxiliaryLine = 0x00;
    84 const TUint8 KAlsPrimaryLine = 0x01;   // ALS primary line
    95 const TUint8 KAlsPrimaryLine = 0x01;
    85 
    96 
    86 // ----------------------------------------------
    97 // ----------------------------------------------
    87 // --- (U)ICC Service Table-related constants ---
    98 // --- (U)ICC Service Table-related constants ---
    88 // ----------------------------------------------
    99 // ----------------------------------------------
    89 
   100 
   128 // Creates a new PhoneMessageHandler object instance.
   139 // Creates a new PhoneMessageHandler object instance.
   129 // --------------------------------------------------------------------------
   140 // --------------------------------------------------------------------------
   130 //
   141 //
   131 CMmPhoneMessHandler* CMmPhoneMessHandler::NewL
   142 CMmPhoneMessHandler* CMmPhoneMessHandler::NewL
   132         (
   143         (
   133         CMmPhoNetSender* aPhoNetSender,  //a ptr to the phonet sender
   144         CMmPhoNetSender* aPhoNetSender,
   134         CMmPhoNetReceiver* aPhoNetReceiver,  //a ptr to the phonet receiver
   145         CMmPhoNetReceiver* aPhoNetReceiver,
   135         CMmMessageRouter* aMessageRouter, // pointer to the msg router
   146         CMmMessageRouter* aMessageRouter,
   136         CMmSupplServMessHandler* aSupplServMessHandler,
   147         CMmSupplServMessHandler* aSupplServMessHandler,
   137         CMmUiccMessHandler* aUiccMessHandler
   148         CMmUiccMessHandler* aUiccMessHandler
   138         )
   149         )
   139     {
   150     {
   140 TFLOGSTRING("TSY: CMmPhoneMessHandler::NewL");
   151 TFLOGSTRING("TSY: CMmPhoneMessHandler::NewL");
   143     CMmPhoneMessHandler* phoneMessHandler =
   154     CMmPhoneMessHandler* phoneMessHandler =
   144         new ( ELeave ) CMmPhoneMessHandler();
   155         new ( ELeave ) CMmPhoneMessHandler();
   145 
   156 
   146     CleanupStack::PushL( phoneMessHandler );
   157     CleanupStack::PushL( phoneMessHandler );
   147     phoneMessHandler->iPhoNetSender = aPhoNetSender;
   158     phoneMessHandler->iPhoNetSender = aPhoNetSender;
   148     phoneMessHandler->ConstructL( aMessageRouter );
   159     phoneMessHandler->ConstructL(
   149     phoneMessHandler->iSupplServMessHandler = aSupplServMessHandler;
   160         aMessageRouter,
   150     phoneMessHandler->iMmUiccMessHandler = aUiccMessHandler;
   161         aPhoNetSender,
       
   162         aSupplServMessHandler,
       
   163         aUiccMessHandler );
   151 
   164 
   152     aPhoNetReceiver->RegisterL(
   165     aPhoNetReceiver->RegisterL(
   153         phoneMessHandler,
   166         phoneMessHandler,
   154 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
   167 #ifdef INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING
   155         PN_INFO,
   168         PN_INFO,
   178 // Initialises object attributes.
   191 // Initialises object attributes.
   179 // --------------------------------------------------------------------------
   192 // --------------------------------------------------------------------------
   180 //
   193 //
   181 void CMmPhoneMessHandler::ConstructL
   194 void CMmPhoneMessHandler::ConstructL
   182         (
   195         (
   183         CMmMessageRouter* aMessageRouter
   196         CMmMessageRouter* aMessageRouter,
       
   197         CMmPhoNetSender* aPhoNetSender,
       
   198         CMmSupplServMessHandler* aSupplServMessHandler,
       
   199         CMmUiccMessHandler* aUiccMessHandler
   184         )
   200         )
   185     {
   201     {
   186 TFLOGSTRING("TSY: CMmPhoneMessHandler::ConstructL");
   202 TFLOGSTRING("TSY: CMmPhoneMessHandler::ConstructL");
   187 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_CONSTRUCTL, "CMmPhoneMessHandler::ConstructL" );
   203 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_CONSTRUCTL, "CMmPhoneMessHandler::ConstructL" );
   188 
   204 
   189     // Internal pointers, must be nulled before used.
   205     iPhoNetSender = aPhoNetSender;
       
   206     iSupplServMessHandler = aSupplServMessHandler;
       
   207     iMmUiccMessHandler = aUiccMessHandler;
       
   208     iMessageRouter = aMessageRouter;
       
   209 
   190     iSSTFileData = NULL;
   210     iSSTFileData = NULL;
   191     iStoreInfo = NULL;
   211     iStoreInfo = NULL;
   192     iLocIndex = 0;
   212     iLocIndex = 0;
   193 
       
   194     iMessageRouter = aMessageRouter;
       
   195 
   213 
   196     iCommonTSYRefreshPending = EFalse;
   214     iCommonTSYRefreshPending = EFalse;
   197     iRefreshError = EFalse;
   215     iRefreshError = EFalse;
   198     iCompleteRefresfDone = EFalse;
   216     iCompleteRefresfDone = EFalse;
   199     iInternalRefreshFiles = 0;
   217     iInternalRefreshFiles = 0;
   210 CMmPhoneMessHandler::~CMmPhoneMessHandler()
   228 CMmPhoneMessHandler::~CMmPhoneMessHandler()
   211     {
   229     {
   212 TFLOGSTRING("TSY: CMmPhoneMessHandler destructed.");
   230 TFLOGSTRING("TSY: CMmPhoneMessHandler destructed.");
   213 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_CMMPHONEMESSHANDLER, "CMmPhoneMessHandler::~CMmPhoneMessHandler" );
   231 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_CMMPHONEMESSHANDLER, "CMmPhoneMessHandler::~CMmPhoneMessHandler" );
   214 
   232 
   215     // Delete iStoreInfo and set it to NULL, if it exist.
       
   216     if( iStoreInfo )
   233     if( iStoreInfo )
   217         {
   234         {
   218         delete iStoreInfo;
   235         delete iStoreInfo;
   219         }
   236         }
   220 
   237 
   221     // Delete iSSTFileData and set it to NULL, if it exist.
       
   222     if( iSSTFileData )
   238     if( iSSTFileData )
   223         {
   239         {
   224         // Delete object
       
   225         delete iSSTFileData;
   240         delete iSSTFileData;
   226         }
   241         }
   227 
   242 
   228     if( iAPNList )
   243     if( iAPNList )
   229         {
   244         {
   350 // --------------------------------------------------------------------------
   365 // --------------------------------------------------------------------------
   351 //
   366 //
   352 TInt CMmPhoneMessHandler::ExtFuncL
   367 TInt CMmPhoneMessHandler::ExtFuncL
   353         (
   368         (
   354         TInt aIpc,
   369         TInt aIpc,
   355         const CMmDataPackage* aDataPackage // Data package
   370         const CMmDataPackage* aDataPackage
   356         )
   371         )
   357     {
   372     {
   358 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ExtFuncL. Licensee specific implemtantion. IPC: %d", aIpc);
   373 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ExtFuncL. Licensee specific implemtantion. IPC: %d", aIpc);
   359 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_EXTFUNCL, "CMmPhoneMessHandler::ExtFuncL;Licensee specific implemtantion aIpc=%d", aIpc );
   374 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_EXTFUNCL, "CMmPhoneMessHandler::ExtFuncL;Licensee specific implemtantion aIpc=%d", aIpc );
   360 
   375 
   361     //*************************************************************//
       
   362     // NOTE.
       
   363     //
       
   364     // LICENSEE SPECIFIC MESSAGE HANDLER IMPLEMENTATION STARTS HERE
       
   365     //
       
   366     //*************************************************************//
       
   367 
       
   368     TInt ret( KErrNone );
   376     TInt ret( KErrNone );
   369     TUint8 transId( KPhoneTransId );
   377     TUint8 transId( KPhoneTransId );
   370 
   378 
   371     switch ( aIpc )
   379     switch ( aIpc )
   372         {
   380         {
   376             break;
   384             break;
   377             }
   385             }
   378         case EMobilePhoneSetALSLine:
   386         case EMobilePhoneSetALSLine:
   379             {
   387             {
   380             TUint8 alsLine;
   388             TUint8 alsLine;
   381             aDataPackage->UnPackData( alsLine );
   389             if ( aDataPackage )
   382             ret = UiccWriteDynamicFlagsReq( alsLine );
   390                 {
       
   391                 aDataPackage->UnPackData( alsLine );
       
   392                 ret = UiccWriteDynamicFlagsReq( alsLine );
       
   393                 }
       
   394             else
       
   395                 {
       
   396                 ret = KErrArgument;
       
   397                 }
   383             break;
   398             break;
   384             }
   399             }
   385         case EMobilePhoneGetCustomerServiceProfile:
   400         case EMobilePhoneGetCustomerServiceProfile:
   386             {
   401             {
   387             ret = UiccCspFileReq();
   402             ret = UiccCspFileReq();
   565 // message has been received.
   580 // message has been received.
   566 // --------------------------------------------------------------------------
   581 // --------------------------------------------------------------------------
   567 //
   582 //
   568 void CMmPhoneMessHandler::ReceiveMessageL
   583 void CMmPhoneMessHandler::ReceiveMessageL
   569         (
   584         (
   570         const TIsiReceiveC &aIsiMessage  // ISI message received
   585         const TIsiReceiveC &aIsiMessage
   571         )
   586         )
   572     {
   587     {
   573     TInt resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
   588     TInt resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
   574     TInt messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
   589     TInt messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
   575 
   590 
   582         case PN_INFO:
   597         case PN_INFO:
   583 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
   598 #else /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
   584         case PN_MODEM_INFO:
   599         case PN_MODEM_INFO:
   585 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
   600 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
   586             {
   601             {
   587             switch( messageId )
   602             if ( INFO_SERIAL_NUMBER_READ_RESP == messageId )
   588                 {
   603                 {
   589                 case INFO_SERIAL_NUMBER_READ_RESP:
   604                 InfoSerialNumberReadResp( aIsiMessage );
   590                     {
   605                 }
   591                     InfoSerialNumberReadResp( aIsiMessage );
   606             else
   592                     break;
   607                 {
   593                     }
       
   594                 default:
       
   595                     {
       
   596 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default.\n" );
   608 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default.\n" );
   597 OstTrace0( TRACE_NORMAL, DUP4_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default" );
   609 OstTrace0( TRACE_NORMAL, DUP4_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default" );
   598                     break;
       
   599                     }
       
   600                 }
   610                 }
   601             break; // end case PN_MODEM_INFO
   611             break; // end case PN_MODEM_INFO
   602             }
   612             }
   603         case PN_UICC:
   613         case PN_UICC:
   604             {
   614             {
   605             switch( messageId )
   615             if ( UICC_REFRESH_IND == messageId )
   606                 {
   616                 {
   607                 case UICC_REFRESH_IND:
   617                 UiccRefreshInd( aIsiMessage );
   608                     {
   618                 }
   609                     UiccRefreshInd( aIsiMessage );
   619             else if ( UICC_REFRESH_RESP == messageId )
   610                     break;
   620                 {
   611                     }
   621                 UiccRefreshResp( aIsiMessage );
   612                 case UICC_REFRESH_RESP:
   622                 }
   613                     {
   623             // No else
   614                     UiccRefreshResp( aIsiMessage );
   624             break;
   615                     break;
   625             }
   616                     }
   626        default:
   617                 default:
       
   618                     {
       
   619                     break;
       
   620                     }
       
   621                 }
       
   622             break;
       
   623             }
       
   624         default:
       
   625             {
   627             {
   626 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - default.\n" );
   628 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - default.\n" );
   627 OstTrace0( TRACE_NORMAL, DUP5_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - default" );
   629 OstTrace0( TRACE_NORMAL, DUP5_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - default" );
   628             break;
   630             break;
   629             }
   631             }
   630         } // End of switch
   632         } // End of switch
   631     }
   633     }
   632 
   634 
   633 // --------------------------------------------------------------------------
   635 // --------------------------------------------------------------------------
   634 // CMmPhoneMessHandler::InfoSerialNumberReadReq
   636 // CMmPhoneMessHandler::InfoSerialNumberReadReq
   635 // Constructs INFO_SERIAL_NUMBER_READ_REQ ISI message..
   637 // Constructs INFO_SERIAL_NUMBER_READ_REQ ISI message.
   636 // Returns KErrNone on success, other error value on failure.
   638 // Returns KErrNone on success, other error value on failure.
   637 // --------------------------------------------------------------------------
   639 // --------------------------------------------------------------------------
   638 //
   640 //
   639 TInt CMmPhoneMessHandler::InfoSerialNumberReadReq
   641 TInt CMmPhoneMessHandler::InfoSerialNumberReadReq
   640         (
   642         (
   641         TUint8 aTransactionId, // transaction id
   643         TUint8 aTransactionId,
   642         TUint8 aTarget // type of requested serial number
   644         TUint8 aTarget // type of requested serial number
   643         )
   645         )
   644     {
   646     {
   645 TFLOGSTRING("TSY: CMmPhoneMessHandler::InfoSerialNumberReadReq.");
   647 TFLOGSTRING("TSY: CMmPhoneMessHandler::InfoSerialNumberReadReq.");
   646 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADREQ, "CMmPhoneMessHandler::InfoSerialNumberReadReq" );
   648 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADREQ, "CMmPhoneMessHandler::InfoSerialNumberReadReq" );
   671     {
   673     {
   672     TInt err( KErrNotFound );
   674     TInt err( KErrNotFound );
   673 
   675 
   674     TBuf8<KSerialNumberLength> serialData;
   676     TBuf8<KSerialNumberLength> serialData;
   675 
   677 
   676     // Get status
       
   677     TUint8 status( aIsiMessage.Get8bit(
   678     TUint8 status( aIsiMessage.Get8bit(
   678         ISI_HEADER_SIZE + INFO_SERIAL_NUMBER_READ_RESP_OFFSET_STATUS ) );
   679         ISI_HEADER_SIZE + INFO_SERIAL_NUMBER_READ_RESP_OFFSET_STATUS ) );
   679 
   680 
   680 TFLOGSTRING2("TSY: CMmPhoneMessHandler::InfoSerialNumberReadResp, status=0x%02x",status);
   681 TFLOGSTRING2("TSY: CMmPhoneMessHandler::InfoSerialNumberReadResp, status=0x%02x",status);
   681 OstTraceExt1( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADRESP, "CMmPhoneMessHandler::InfoSerialNumberReadResp;status=%hhx", status );
   682 OstTraceExt1( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADRESP, "CMmPhoneMessHandler::InfoSerialNumberReadResp;status=%hhx", status );
   682 
   683 
   683     // If status is Ok get information from possible sub block(s).
   684     // Get information from possible sub block(s).
   684     if ( INFO_OK == status )
   685     if ( INFO_OK == status )
   685         {
   686         {
       
   687         TBool subblockFound( EFalse );
       
   688         TUint sbSerialNumberStartOffset( 0 );
       
   689 
   686         // If sub blocks
   690         // If sub blocks
   687         if ( 0 != aIsiMessage.Get8bit(
   691         if ( 0 != aIsiMessage.Get8bit(
   688             ISI_HEADER_SIZE +
   692             ISI_HEADER_SIZE +
   689             INFO_SERIAL_NUMBER_READ_RESP_OFFSET_SUBBLOCKCOUNT ) )
   693             INFO_SERIAL_NUMBER_READ_RESP_OFFSET_SUBBLOCKCOUNT ) )
   690             {
   694             {
   691             TUint sbSerialNumberStartOffset( 0 );
   695             subblockFound = ETrue;
   692 
   696             }
   693             if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
   697 
   694                 ISI_HEADER_SIZE + SIZE_INFO_SERIAL_NUMBER_READ_RESP,
   698         if ( subblockFound && ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
   695                 INFO_SB_SN_IMEI_PLAIN,
   699             ISI_HEADER_SIZE + SIZE_INFO_SERIAL_NUMBER_READ_RESP,
   696                 EIsiSubBlockTypeId8Len8,
   700             INFO_SB_SN_IMEI_PLAIN,
   697                 sbSerialNumberStartOffset ) )
   701             EIsiSubBlockTypeId8Len8,
   698                 {
   702             sbSerialNumberStartOffset ) ) )
   699                 // Read the string length - the zero terminator...
   703             {
   700                 TUint8 strLength( aIsiMessage.Get8bit(
   704             // Read the string length - the zero terminator
   701                     sbSerialNumberStartOffset +
   705             TUint8 strLength( aIsiMessage.Get8bit(
   702                     INFO_SB_SN_IMEI_PLAIN_OFFSET_STRLEN ) - 1 );
   706                 sbSerialNumberStartOffset +
   703                 // ...and compare it to the available buffer size
   707                 INFO_SB_SN_IMEI_PLAIN_OFFSET_STRLEN ) - 1 );
   704                 // (50 bytes in etel),
   708 
   705                 // and choose the shorter one strLength =
   709             TUint8 dataOffset(
   706                 // ( RMobilePhone::KPhoneSerialNumberSize > strLength )?
   710                 sbSerialNumberStartOffset +
   707                 // strLength : RMobilePhone::KPhoneSerialNumberSize;
   711                 INFO_SB_SN_IMEI_PLAIN_OFFSET_IMEIPLAINU8 );
   708 
   712 
   709                 TUint8 dataOffset(
   713             serialData.Append( aIsiMessage.GetData(
   710                     sbSerialNumberStartOffset +
   714                 dataOffset,
   711                     INFO_SB_SN_IMEI_PLAIN_OFFSET_IMEIPLAINU8 );
   715                 strLength ).Left( KSerialNumberLength ) );
   712 
   716 
   713                 serialData.Append( aIsiMessage.GetData(
   717             err = KErrNone;
   714                     dataOffset,
   718             }
   715                     strLength ).Left( KSerialNumberLength ) );
   719         }
   716 
   720 
   717                 err = KErrNone;
       
   718                 }
       
   719             }
       
   720         }
       
   721 
       
   722     // Complete to CommonTSY, ONLY if all data has already been received
       
   723     // packed parameter: TBuf8<KSerialNumberLength> serialData
       
   724     CMmDataPackage dataPackage;
   721     CMmDataPackage dataPackage;
   725     dataPackage.PackData( &serialData );
   722     dataPackage.PackData( &serialData );
   726     iMessageRouter->Complete( EMobilePhoneGetPhoneId, &dataPackage, err );
   723     iMessageRouter->Complete( EMobilePhoneGetPhoneId, &dataPackage, err );
   727     }
   724     }
   728 
   725 
   734 TInt CMmPhoneMessHandler::UiccReadDynamicFlagsReq()
   731 TInt CMmPhoneMessHandler::UiccReadDynamicFlagsReq()
   735     {
   732     {
   736 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadDynamicFlagsReq");
   733 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadDynamicFlagsReq");
   737 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADDYNAMICFLAGSREQ, "CMmPhoneMessHandler::UiccReadDynamicFlagsReq" );
   734 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADDYNAMICFLAGSREQ, "CMmPhoneMessHandler::UiccReadDynamicFlagsReq" );
   738 
   735 
   739     // Set parameters for UICC_APPL_CMD_REQ message
   736     return UiccApplCmdReq(
   740     TUiccWriteTransparent params;
   737         ETrIdReadDynamicFlags,
   741     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
   738         UICC_APPL_READ_TRANSPARENT,
   742     params.trId = ETrIdReadDynamicFlags;
   739         0,
   743     params.dataOffset = 0;
   740         0,
   744     params.dataAmount = 0;
   741         KElemFileDynFlagsOrange,
   745     params.fileId = KElemFileDynFlagsOrange;
   742         UICC_SFI_NOT_PRESENT );
   746     params.fileIdSfi = UICC_SFI_NOT_PRESENT;
       
   747     params.serviceType = UICC_APPL_READ_TRANSPARENT;
       
   748     // File id path
       
   749     params.filePath.Append( KMasterFileId >> 8 );
       
   750     params.filePath.Append( KMasterFileId );
       
   751     params.filePath.Append( KOrangeDedicatedFile >> 8 );
       
   752     params.filePath.Append( KOrangeDedicatedFile );
       
   753 
       
   754     return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
   755     }
   743     }
   756 
   744 
   757 // --------------------------------------------------------------------------
   745 // --------------------------------------------------------------------------
   758 // CMmPhoneMessHandler::UiccWriteDynamicFlagsReq
   746 // CMmPhoneMessHandler::UiccWriteDynamicFlagsReq
   759 // Write dynamic flags
   747 // Write dynamic flags
   783         ret = KErrArgument;
   771         ret = KErrArgument;
   784         }
   772         }
   785 
   773 
   786     if ( KErrNone == ret )
   774     if ( KErrNone == ret )
   787         {
   775         {
   788         // Set parameters for UICC_APPL_CMD_REQ message
   776         TBuf8<KLineInfoLength> fileData;
   789         TUiccWriteTransparent params;
   777         fileData.Append( line );
   790         params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
   778         ret = UiccApplCmdReq(
   791         params.trId = ETrIdWriteDynamicFlags;
   779             ETrIdWriteDynamicFlags,
   792         params.dataOffset = 0;
   780             UICC_APPL_UPDATE_TRANSPARENT,
   793         params.fileId = KElemFileDynFlagsOrange;
   781             0,
   794         params.fileIdSfi = UICC_SFI_NOT_PRESENT;
   782             0,
   795         params.serviceType = UICC_APPL_UPDATE_TRANSPARENT;
   783             KElemFileDynFlagsOrange,
   796 
   784             UICC_SFI_NOT_PRESENT,
   797         // File id path
   785             fileData);
   798         params.filePath.Append( KMasterFileId >> 8 );
   786         }
   799         params.filePath.Append( KMasterFileId );
   787     // No else
   800         params.filePath.Append( KOrangeDedicatedFile >> 8 );
   788 
   801         params.filePath.Append( KOrangeDedicatedFile );
       
   802 
       
   803         params.fileData.Append( line );
       
   804         ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
   805         }
       
   806     return ret;
   789     return ret;
   807     }
   790     }
   808 
   791 
   809 // --------------------------------------------------------------------------
   792 // --------------------------------------------------------------------------
   810 // CMmPhoneMessHandler::UiccReadDynamicFlagsResp
   793 // CMmPhoneMessHandler::UiccReadDynamicFlagsResp
   820 
   803 
   821     RMobilePhone::TMobilePhoneALSLine alsLine
   804     RMobilePhone::TMobilePhoneALSLine alsLine
   822         ( RMobilePhone::EAlternateLineUnknown );
   805         ( RMobilePhone::EAlternateLineUnknown );
   823 
   806 
   824     TInt ret( KErrNone );
   807     TInt ret( KErrNone );
   825     if ( UICC_STATUS_OK == aStatus )
   808     if ( UICC_STATUS_OK == aStatus && ( 0 < aFileData.Length() ) )
   826         {
   809         {
   827         // Dynamic flags byte: if bit 0 is 1, it is line 1, else line 2
   810         // Dynamic flags byte
   828         if ( aFileData[0] & 0x1 )
   811         if ( aFileData[0] & 0x1 )
   829             {
   812             {
   830             alsLine = RMobilePhone::EAlternateLinePrimary;
   813             alsLine = RMobilePhone::EAlternateLinePrimary;
   831             }
   814             }
   832         else
   815         else
   873 TInt CMmPhoneMessHandler::UiccCspFileReq()
   856 TInt CMmPhoneMessHandler::UiccCspFileReq()
   874     {
   857     {
   875 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccCspFileReq");
   858 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccCspFileReq");
   876 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILEREQ, "CMmPhoneMessHandler::UiccCspFileReq" );
   859 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILEREQ, "CMmPhoneMessHandler::UiccCspFileReq" );
   877 
   860 
   878     // Set parameters for UICC_APPL_CMD_REQ message
   861     return UiccApplCmdReq(
   879     TUiccReadTransparent params;
   862         ETrIdReadCsp,
   880     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
   863         UICC_APPL_READ_TRANSPARENT,
   881     params.trId = ETrIdReadCsp;
   864         18,
   882     params.dataAmount = 18;
   865         0,
   883     params.dataOffset = 0; // Read from first byte
   866         KElemFileCustomerServiceProfile,
   884     params.fileId = KElemFileCustomerServiceProfile;
   867         UICC_SFI_NOT_PRESENT );
   885     params.serviceType = UICC_APPL_READ_TRANSPARENT;
       
   886 
       
   887     // File id path
       
   888     params.filePath.Append( KMasterFileId >> 8 );
       
   889     params.filePath.Append( KMasterFileId );
       
   890     params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
   891 
       
   892     return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
   893     }
   868     }
   894 
   869 
   895 // --------------------------------------------------------------------------
   870 // --------------------------------------------------------------------------
   896 // CMmPhoneMessHandler::UiccCspFileResp
   871 // CMmPhoneMessHandler::UiccCspFileResp
   897 // Complete CSP
   872 // Complete CSP
   903 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccHandleCallFwdFlagsResp");
   878 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccHandleCallFwdFlagsResp");
   904 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILERESP, "CMmPhoneMessHandler::UiccCspFileResp" );
   879 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILERESP, "CMmPhoneMessHandler::UiccCspFileResp" );
   905 
   880 
   906     RMobilePhone::TMobilePhoneCspFileV1 cspFileEtel;
   881     RMobilePhone::TMobilePhoneCspFileV1 cspFileEtel;
   907 
   882 
   908     if ( aStatus == KErrNone )
   883     if ( aStatus == KErrNone && ( KCpsLength <= aFileData.Length() ) )
   909         {
   884         {
   910         TUint8 i( 0 );
   885         TUint8 i( 0 );
   911         // Call offering capabilities
   886         // Call offering capabilities
   912         if ( KUiccCspCallOfferingCode == aFileData[i++] )
   887         if ( KUiccCspCallOfferingCode == aFileData[i++] )
   913             {
   888             {
   959         // Value added services capabilities
   934         // Value added services capabilities
   960         if ( KUiccCspValueAddedServicesCode == aFileData[i++] )
   935         if ( KUiccCspValueAddedServicesCode == aFileData[i++] )
   961             {
   936             {
   962             cspFileEtel.iValueAddedServices = aFileData[i++];
   937             cspFileEtel.iValueAddedServices = aFileData[i++];
   963             }
   938             }
   964         } // End of if ( aStatus == KErrNone )
   939         } // End of if
   965     else
   940     else
   966         {
   941         {
   967         aStatus = KErrNotFound;
   942         aStatus = KErrNotFound;
   968         }
   943         }
   969 
   944 
   970     // Complete with CSP data and error code
       
   971     CMmDataPackage dataPackage;
   945     CMmDataPackage dataPackage;
   972     dataPackage.PackData( &cspFileEtel );
   946     dataPackage.PackData( &cspFileEtel );
   973 
   947 
   974     iMessageRouter->Complete(
   948     iMessageRouter->Complete(
   975         EMobilePhoneGetCustomerServiceProfile,
   949         EMobilePhoneGetCustomerServiceProfile,
   985 TInt CMmPhoneMessHandler::UiccImsiReq( )
   959 TInt CMmPhoneMessHandler::UiccImsiReq( )
   986     {
   960     {
   987 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiReq");
   961 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiReq");
   988 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIREQ, "CMmPhoneMessHandler::UiccImsiReq" );
   962 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIREQ, "CMmPhoneMessHandler::UiccImsiReq" );
   989 
   963 
   990     // Set parameters for UICC_APPL_CMD_REQ message
   964     return UiccApplCmdReq(
   991     TUiccReadTransparent params;
   965         ETrIdReadImsi,
   992     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
   966         UICC_APPL_READ_TRANSPARENT,
   993     params.trId = ETrIdReadImsi;
   967         9,
   994     params.dataAmount = 9; // Length + IMSI = 9 bytes
   968         0,
   995     params.dataOffset = 0; // Read from first byte
   969         KElemFileImsi,
   996     params.fileId = KElemFileImsi;
   970         7 );
   997     params.fileIdSfi = 7;
       
   998     params.serviceType = UICC_APPL_READ_TRANSPARENT;
       
   999 
       
  1000     // File id path
       
  1001     params.filePath.Append( KMasterFileId >> 8 );
       
  1002     params.filePath.Append( KMasterFileId );
       
  1003     params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  1004 
       
  1005     return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  1006     }
   971     }
  1007 
   972 
  1008 // --------------------------------------------------------------------------
   973 // --------------------------------------------------------------------------
  1009 // CMmPhoneMessHandler::UiccImsiResp
   974 // CMmPhoneMessHandler::UiccImsiResp
  1010 // Complete IMSI
   975 // Complete IMSI
  1015 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiResp" );
   980 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiResp" );
  1016 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIRESP, "CMmPhoneMessHandler::UiccImsiResp" );
   981 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIRESP, "CMmPhoneMessHandler::UiccImsiResp" );
  1017 
   982 
  1018     TInt err( KErrNone );
   983     TInt err( KErrNone );
  1019     TBuf8<RMobilePhone::KIMSISize> imsiData;
   984     TBuf8<RMobilePhone::KIMSISize> imsiData;
  1020     if ( UICC_STATUS_OK == aStatus )
   985 
  1021         {
   986     if ( ( UICC_STATUS_OK == aStatus ) &&
  1022         TUint8 i( 0 );
   987          ( KImsiSize == aFileData.Length() ) )
  1023         TUint8 valueMSB( 0 );
   988         {
  1024         TUint8 valueLSB( 0 );
   989         // 1st digit of the buffer is byte count (see 3GPP TS 51.011
  1025         // Get length of IMSI (the first byte)
   990         // 10.3.2 EFIMSI (IMSI)). Get first IMSI number from second byte higher
  1026         TUint8 lengthOfImsi( aFileData[0] );
   991         // nibbles. Lower part has parity information and it is ignored.
  1027         // Get the first IMSI number: MSB semioctet of byte 2
   992         imsiData.AppendNum( 
  1028         valueMSB = static_cast<TUint8>( aFileData[1] >> 4 );
   993             ( ( aFileData[KFirstImsiDigit]>> KNibbleShift )&KNibbleMask ),
  1029         // Check the validity
   994             EDecimal );
  1030         if ( KImsiSize >= lengthOfImsi && 10 > valueMSB  )
   995 
  1031             {
   996         for( TUint8 i = KSecondImsiDigit;
  1032             imsiData.AppendNum( valueMSB, EDecimal);
   997              i <= aFileData[KImsiStringByteCount];
  1033             }
   998              i++ )
  1034         else
   999             {
  1035             {
  1000             // Unused nibbles are set to 'F' so pack only valid digits.
  1036             err = KErrCorrupt;
  1001             if ( KUnusedNibble != aFileData[i]&KNibbleMask )
  1037             }
  1002                 {
  1038 
  1003                 imsiData.AppendNum( ( ( aFileData[i]&KNibbleMask ) ), EDecimal );
  1039         if ( KErrNone == err )
  1004                 }
  1040             {
  1005             else
  1041             // Check and append the rest of IMSI numbers
  1006                 {
  1042             for ( i = 2; i <= lengthOfImsi; i++ )
  1007                 // Last digit found.
  1043                 {
  1008                 break;
  1044                 valueLSB = static_cast<TUint8>( aFileData[i] & 0x0F );
  1009                 }
  1045                 valueMSB = static_cast<TUint8>( aFileData[i] >> 4 );
  1010             if ( KUnusedNibble != ( ( aFileData[i]>>KNibbleShift )&KNibbleMask ) )
  1046 
  1011                 {
  1047                 // If both values are valid
  1012                 imsiData.AppendNum( 
  1048                 if ( 10 > valueLSB && 10 > valueMSB )
  1013                     ( ( aFileData[i]>>KNibbleShift )&KNibbleMask ),
  1049                     {
  1014                     EDecimal );
  1050                     imsiData.AppendNum( valueLSB, EDecimal);
  1015                 }
  1051                     imsiData.AppendNum( valueMSB, EDecimal);
  1016             else
  1052                     }
  1017                 {
  1053                 // Last nibble is unused
  1018                 // Last digit found.
  1054                 else if( 10 > valueLSB && 0xF == valueMSB )
  1019                 break;
  1055                     {
  1020                 }
  1056                     imsiData.AppendNum( valueLSB, EDecimal);
  1021             }
  1057                     break;
  1022         err = KErrNone;
  1058                     }
       
  1059                 // Either is invalid
       
  1060                 else
       
  1061                     {
       
  1062                     err = KErrCorrupt;
       
  1063                     break;
       
  1064                     }
       
  1065                 }
       
  1066             }
       
  1067         }
  1023         }
  1068     else
  1024     else
  1069         {
  1025         {
  1070         err = KErrNotFound;
  1026         err = KErrNotFound;
  1071         }
  1027         }
  1072 
  1028 
  1073     // Complete with packed parameter
       
  1074     CMmDataPackage dataPackage;
  1029     CMmDataPackage dataPackage;
  1075     dataPackage.PackData( &imsiData );
  1030     dataPackage.PackData( &imsiData );
  1076 
  1031 
  1077     iMessageRouter->Complete(
  1032     iMessageRouter->Complete(
  1078         EMobilePhoneGetSubscriberId,
  1033         EMobilePhoneGetSubscriberId,
  1088 TInt CMmPhoneMessHandler::UiccReadServiceProviderName()
  1043 TInt CMmPhoneMessHandler::UiccReadServiceProviderName()
  1089     {
  1044     {
  1090 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderName");
  1045 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderName");
  1091 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAME, "CMmPhoneMessHandler::UiccReadServiceProviderName" );
  1046 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAME, "CMmPhoneMessHandler::UiccReadServiceProviderName" );
  1092 
  1047 
  1093     // Read SIM file '6F46', Service Provider Name
  1048     return UiccApplCmdReq(
  1094     // Set parameters for UICC_APPL_CMD_REQ message
  1049         ETrIdReadServiceProviderName,
  1095     TUiccReadTransparent params;
  1050         UICC_APPL_READ_TRANSPARENT,
  1096     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  1051         17,
  1097     params.trId = ETrIdReadServiceProviderName;
  1052         0,
  1098     // Read all 17 bytes
  1053         KElemFileServiceProviderName,
  1099     params.dataAmount = 17;
  1054         UICC_SFI_NOT_PRESENT );
  1100     params.dataOffset = 0;
       
  1101     params.fileId = KElemFileServiceProviderName;
       
  1102     params.serviceType = UICC_APPL_READ_TRANSPARENT;
       
  1103 
       
  1104     // File id path
       
  1105     params.filePath.Append( KMasterFileId >> 8 );
       
  1106     params.filePath.Append( KMasterFileId );
       
  1107     params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  1108 
       
  1109     return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  1110     }
  1055     }
  1111 
  1056 
  1112 // --------------------------------------------------------------------------
  1057 // --------------------------------------------------------------------------
  1113 // CMmPhoneMessHandler::UiccReadServiceProviderNameResp
  1058 // CMmPhoneMessHandler::UiccReadServiceProviderNameResp
  1114 // Complete service provider name
  1059 // Complete service provider name
  1119     const TDesC8& aFileData )
  1064     const TDesC8& aFileData )
  1120     {
  1065     {
  1121 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderNameResp");
  1066 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderNameResp");
  1122 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAMERESP, "CMmPhoneMessHandler::UiccReadServiceProviderNameResp" );
  1067 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAMERESP, "CMmPhoneMessHandler::UiccReadServiceProviderNameResp" );
  1123 
  1068 
  1124     TInt ret( KErrNone );
  1069     TInt ret( KErrNotFound );
  1125     if ( KErrNone == aStatus )
  1070     if ( KErrNone == aStatus && ( KSpnLength == aFileData.Length() ) )
  1126         {
  1071         {
  1127         // Store data and read SPN display info
  1072         // Store data and read SPN display info
  1128         ret = UiccProcessServiceTypeCheck( aFileData );
  1073         ret = UiccProcessServiceTypeCheck( aFileData );
  1129         }
  1074         }
  1130 
  1075 
  1228     const TDesC8& aFileData )
  1173     const TDesC8& aFileData )
  1229     {
  1174     {
  1230 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck");
  1175 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck");
  1231 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCPROCESSSERVICETYPECHECK, "CMmPhoneMessHandler::UiccProcessServiceTypeCheck" );
  1176 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCPROCESSSERVICETYPECHECK, "CMmPhoneMessHandler::UiccProcessServiceTypeCheck" );
  1232 
  1177 
  1233     // Copy service provider name, starting from byte 2
       
  1234     TBuf8<KSpnFileSize> spnBuffer( aFileData.Mid( 1 ) );
  1178     TBuf8<KSpnFileSize> spnBuffer( aFileData.Mid( 1 ) );
  1235     TBuf8<KServiceProviderSize> spnOutputBuffer;
  1179     TBuf8<KServiceProviderSize> spnOutputBuffer;
  1236     CMmStaticUtility::ConvertGsmDataToUcs2(
  1180     CMmStaticUtility::ConvertGsmDataToUcs2(
  1237         spnBuffer,
  1181         spnBuffer,
  1238         KSpnFileSize,
  1182         KSpnFileSize,
  1264     if ( 0 == ( displayCondition & 0x02 ) )
  1208     if ( 0 == ( displayCondition & 0x02 ) )
  1265         {
  1209         {
  1266         iSecondDisplayCondition = RMobilePhone::KDisplaySPNRequired;
  1210         iSecondDisplayCondition = RMobilePhone::KDisplaySPNRequired;
  1267         }
  1211         }
  1268 
  1212 
  1269     // PLMN and SPN control information summed up to iDisplayReq field
       
  1270     iServiceProviderName.iDisplayReq =
  1213     iServiceProviderName.iDisplayReq =
  1271         iServiceProviderName.iDisplayReq + iSecondDisplayCondition;
  1214         iServiceProviderName.iDisplayReq + iSecondDisplayCondition;
  1272 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - display condition: %d", (TUint8)iServiceProviderName.iDisplayReq);
  1215 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - display condition: %d", (TUint8)iServiceProviderName.iDisplayReq);
  1273 
  1216 
  1274     // Buffer for service provider name
       
  1275     TBuf16<KSpnFileSize> tempBuf;
  1217     TBuf16<KSpnFileSize> tempBuf;
  1276     TIsiUtility::CopyFromBigEndian( spnOutputBuffer, tempBuf );
  1218     TIsiUtility::CopyFromBigEndian( spnOutputBuffer, tempBuf );
  1277     // Copy service provider name
  1219     // Copy service provider name
  1278     iServiceProviderName.iSPName.Copy( tempBuf );
  1220     iServiceProviderName.iSPName.Copy( tempBuf );
  1279 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - SPN Name: %S", &iServiceProviderName.iSPName);
  1221 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - SPN Name: %S", &iServiceProviderName.iSPName);
  1280 
  1222 
  1281 
  1223 
  1282     // We still need to get the PLMN list to complete the information.
  1224     // We still need to get the PLMN list to complete the information.
  1283     // Read the SIM file EF SPDI ('6FCD')
  1225     // Read the SIM file EF SPDI ('6FCD')
  1284     // Set parameters for UICC_APPL_CMD_REQ message
  1226     return UiccApplCmdReq(
  1285     TUiccReadTransparent params;
  1227         ETrIdReadServiceProviderDisplayInfo,
  1286     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  1228         UICC_APPL_READ_TRANSPARENT,
  1287     params.trId = ETrIdReadServiceProviderDisplayInfo;
  1229         0,
  1288     // Read all the data
  1230         0,
  1289     params.dataAmount = 0;
  1231         KElemFileServiceProviderDisplayInfo,
  1290     params.dataOffset = 0;
  1232         0x1B );
  1291     params.fileId = KElemFileServiceProviderDisplayInfo;
       
  1292     params.fileIdSfi = 0x1B;
       
  1293     params.serviceType = UICC_APPL_READ_TRANSPARENT;
       
  1294 
       
  1295     // File id path
       
  1296     params.filePath.Append( KMasterFileId >> 8 );
       
  1297     params.filePath.Append( KMasterFileId );
       
  1298     params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  1299 
       
  1300     return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  1301     }
  1233     }
  1302 
  1234 
  1303 // --------------------------------------------------------------------------
  1235 // --------------------------------------------------------------------------
  1304 // CMmPhoneMessHandler::UiccProcessSpnNameInfo
  1236 // CMmPhoneMessHandler::UiccProcessSpnNameInfo
  1305 // Processes SPN name info response
  1237 // Processes SPN name info response
  1318     if ( KErrNone == aStatus )
  1250     if ( KErrNone == aStatus )
  1319         {
  1251         {
  1320         TInt lengthOfLengthInBytes( 0 );
  1252         TInt lengthOfLengthInBytes( 0 );
  1321 
  1253 
  1322         // Display info is coded in TLV format in USIM.
  1254         // Display info is coded in TLV format in USIM.
  1323         // Check the tag
       
  1324         if ( 0xA3 == aFileData[i] )
  1255         if ( 0xA3 == aFileData[i] )
  1325             {
  1256             {
  1326             i++;
  1257             i++;
  1327             // If bit8 is set, rest of bits tell the number of bytes used for
  1258             // If bit8 is set, rest of bits tell the number of bytes used for
  1328             // length
  1259             // length
  1331                 lengthOfLengthInBytes = aFileData[i] & 0x7F;
  1262                 lengthOfLengthInBytes = aFileData[i] & 0x7F;
  1332                 i += lengthOfLengthInBytes;
  1263                 i += lengthOfLengthInBytes;
  1333                 }
  1264                 }
  1334             i++;
  1265             i++;
  1335 
  1266 
  1336             // Check the tag
       
  1337             if ( 0x80 == aFileData[i] )
  1267             if ( 0x80 == aFileData[i] )
  1338                 {
  1268                 {
  1339                 // Check how many bytes are used for length field
  1269                 // Check how many bytes are used for length field
  1340                 i++;
  1270                 i++;
  1341                 if ( 0 ==  ( aFileData[i] & 0x80 ) )
  1271                 if ( 0 ==  ( aFileData[i] & 0x80 ) )
  1375         }
  1305         }
  1376 
  1306 
  1377     // Copy PLMNs and complete
  1307     // Copy PLMNs and complete
  1378     if ( KErrNone == aStatus )
  1308     if ( KErrNone == aStatus )
  1379         {
  1309         {
  1380         // Number of PLMNs cannot exceed 170
       
  1381         if ( 170 < numOfPlmns )
  1310         if ( 170 < numOfPlmns )
  1382             {
  1311             {
  1383             numOfPlmns = 170;
  1312             numOfPlmns = 170;
  1384             }
  1313             }
  1385 
  1314 
  1386         // At first append number of PLMNs and second display condition
       
  1387         TUint16 word( static_cast<TUint16>(
  1315         TUint16 word( static_cast<TUint16>(
  1388                 numOfPlmns << 8 | iSecondDisplayCondition ) );
  1316                 numOfPlmns << 8 | iSecondDisplayCondition ) );
  1389         iServiceProviderName.iPLMNField.Append( word );
  1317         iServiceProviderName.iPLMNField.Append( word );
  1390 
  1318 
  1391         // Copy PLMNs to 16 bit buffer
       
  1392         for ( TUint8 j( 0 ); j < lengthOfDataInBytes / 2; j++, i += 2 )
  1319         for ( TUint8 j( 0 ); j < lengthOfDataInBytes / 2; j++, i += 2 )
  1393             {
  1320             {
  1394             // PLMN entries are copied to 16-bit buffer as follows:
  1321             // PLMN entries are copied to 16-bit buffer as follows:
  1395             // 1st byte to 8 LSB bits of 16-bit buffer
  1322             // 1st byte to 8 LSB bits of 16-bit buffer
  1396             // 2nd byte to 8 MSB bits of 16-bit buffer
  1323             // 2nd byte to 8 MSB bits of 16-bit buffer
  1397             word = static_cast<TUint16>(
  1324             word = static_cast<TUint16>(
  1398                 ( aFileData[i+1] << 8 ) | aFileData[i] );
  1325                 ( aFileData[i+1] << 8 ) | aFileData[i] );
  1399             iServiceProviderName.iPLMNField.Append( word );
  1326             iServiceProviderName.iPLMNField.Append( word );
  1400             }
  1327             }
  1401         // Last word is added
  1328 
  1402         iServiceProviderName.iPLMNField.Append( ( 0xFF << 8 ) | aFileData[i] );
  1329         iServiceProviderName.iPLMNField.Append( ( 0xFF << 8 ) | aFileData[i] );
  1403 
  1330 
  1404         // Complete SPN info
       
  1405         CMmDataPackage dataPackage;
  1331         CMmDataPackage dataPackage;
  1406         dataPackage.PackData( &iServiceProviderName );
  1332         dataPackage.PackData( &iServiceProviderName );
  1407         iMessageRouter->Complete(
  1333         iMessageRouter->Complete(
  1408             EMobilePhoneGetServiceProviderName,
  1334             EMobilePhoneGetServiceProviderName,
  1409             &dataPackage,
  1335             &dataPackage,
  1410             KErrNone );
  1336             KErrNone );
  1411         }
  1337         }
  1412     else // Complete error without data
  1338     else
  1413         {
  1339         {
  1414         iMessageRouter->Complete(
  1340         iMessageRouter->Complete(
  1415              EMobilePhoneGetServiceProviderName,
  1341              EMobilePhoneGetServiceProviderName,
  1416              KErrNotFound );
  1342              KErrNotFound );
  1417         }
  1343         }
  1418 
  1344 
  1419     // Reset iServiceProviderName for next time.
       
  1420     iServiceProviderName.iSPName.Zero();
  1345     iServiceProviderName.iSPName.Zero();
  1421     iServiceProviderName.iPLMNField.Zero();
  1346     iServiceProviderName.iPLMNField.Zero();
  1422     }
  1347     }
  1423 
  1348 
  1424 // --------------------------------------------------------------------------
  1349 // --------------------------------------------------------------------------
  1483         }
  1408         }
  1484 
  1409 
  1485     // If NTSY or CTSY cacheing is ongoing, message is not sent
  1410     // If NTSY or CTSY cacheing is ongoing, message is not sent
  1486     if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles )
  1411     if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles )
  1487         {
  1412         {
  1488         if ( iRefreshError ) // Some cacheing was failed, set error status
  1413         if ( iRefreshError ) // Some cacheing was failed
  1489             {
  1414             {
  1490             aStatus = UICC_REFRESH_NOT_OK;
  1415             aStatus = UICC_REFRESH_NOT_OK;
  1491             }
  1416             }
  1492 
  1417 
  1493         TIsiSend isiMsg( iPhoNetSender->SendBufferDes() );
  1418         TIsiSend isiMsg( iPhoNetSender->SendBufferDes() );
  1506             0 ); // No subblocks
  1431             0 ); // No subblocks
  1507 
  1432 
  1508         ret = iPhoNetSender->Send( isiMsg.Complete() );
  1433         ret = iPhoNetSender->Send( isiMsg.Complete() );
  1509         iRefreshError = EFalse;
  1434         iRefreshError = EFalse;
  1510 
  1435 
  1511         // When NTSY/CTSY refresh was performed, set iCompleteRefresfDone flag
  1436         // When NTSY/CTSY refresh was performed
  1512         // that IPC EMmTsySimRefreshDoneIPC will be completed to CTSY
  1437         // IPC EMmTsySimRefreshDoneIPC will be completed to CTSY
  1513         if ( UICC_REFRESH_DONE == aStatus || UICC_REFRESH_NOT_OK == aStatus )
  1438         if ( UICC_REFRESH_DONE == aStatus || UICC_REFRESH_NOT_OK == aStatus )
  1514             {
  1439             {
  1515             iCompleteRefresfDone = ETrue;
  1440             iCompleteRefresfDone = ETrue;
  1516             }
  1441             }
  1517         }
  1442         }
  1595 OstTrace0( TRACE_NORMAL, DUP7_CMMPHONEMESSHANDLER_HANDLEUICCREFRESH, "CMmPhoneMessHandler::HandleUiccRefresh: APN refresh" );
  1520 OstTrace0( TRACE_NORMAL, DUP7_CMMPHONEMESSHANDLER_HANDLEUICCREFRESH, "CMmPhoneMessHandler::HandleUiccRefresh: APN refresh" );
  1596                 iMessageRouter->Complete(
  1521                 iMessageRouter->Complete(
  1597                     EMobilePhoneNotifyAPNListChanged,
  1522                     EMobilePhoneNotifyAPNListChanged,
  1598                     KErrNone );
  1523                     KErrNone );
  1599 
  1524 
  1600                 // Clear and delete cache
       
  1601                 if ( iAPNList )
  1525                 if ( iAPNList )
  1602                     {
  1526                     {
  1603                     iAPNList->Reset();
  1527                     iAPNList->Reset();
  1604                     delete iAPNList;
  1528                     delete iAPNList;
  1605                     iAPNList = NULL;
  1529                     iAPNList = NULL;
  1701         // responsible of making phonebook initialization. => No need for
  1625         // responsible of making phonebook initialization. => No need for
  1702         // internal initialization.
  1626         // internal initialization.
  1703         if ( !( refreshFiles & KCacheAdn )
  1627         if ( !( refreshFiles & KCacheAdn )
  1704             && !( refreshFiles & KCacheFdn ) )
  1628             && !( refreshFiles & KCacheFdn ) )
  1705             {
  1629             {
  1706             // Creating buffer for phonebook's name
       
  1707             TName phonebookName;
  1630             TName phonebookName;
  1708             phonebookName.Copy( KInternalPhoneBookType );
  1631             phonebookName.Copy( KInternalPhoneBookType );
  1709 
  1632 
  1710             CPhoneBookDataPackage package;
  1633             CPhoneBookDataPackage package;
  1711             package.SetPhoneBookName( phonebookName );
  1634             package.SetPhoneBookName( phonebookName );
  1724         iCommonTSYRefreshPending = ETrue;
  1647         iCommonTSYRefreshPending = ETrue;
  1725 
  1648 
  1726 TFLOGSTRING2("TSY: CMmPhoneMessHandler::HandleUiccRefresh: CommonTSY Refresh Pending = %d", iCommonTSYRefreshPending );
  1649 TFLOGSTRING2("TSY: CMmPhoneMessHandler::HandleUiccRefresh: CommonTSY Refresh Pending = %d", iCommonTSYRefreshPending );
  1727 OstTrace1( TRACE_NORMAL, DUP15_CMMPHONEMESSHANDLER_HANDLEUICCREFRESH, "CMmPhoneMessHandler::HandleUiccRefresh;iCommonTSYRefreshPending=%d", iCommonTSYRefreshPending );
  1650 OstTrace1( TRACE_NORMAL, DUP15_CMMPHONEMESSHANDLER_HANDLEUICCREFRESH, "CMmPhoneMessHandler::HandleUiccRefresh;iCommonTSYRefreshPending=%d", iCommonTSYRefreshPending );
  1728 
  1651 
  1729         // Packed parameter: List of files needed to be refreshed.
       
  1730         CMmDataPackage dataPackage;
  1652         CMmDataPackage dataPackage;
  1731         dataPackage.PackData( &refreshFiles );
  1653         dataPackage.PackData( &refreshFiles );
  1732 
  1654 
  1733         // Complete. This will start the cache update process.
  1655         // Complete. This will start the cache update process.
  1734         iMessageRouter->Complete(
  1656         iMessageRouter->Complete(
  1735             EMmTsySimRefreshNowIPC,
  1657             EMmTsySimRefreshNowIPC,
  1736             &dataPackage,
  1658             &dataPackage,
  1737             KErrNone );
  1659             KErrNone );
  1738         }
  1660         }
  1739 
  1661 
  1740     // Send refresh done to UICC only if there's no CTSY/NTSY
       
  1741     // caching ongoing.
       
  1742     if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles )
  1662     if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles )
  1743         {
  1663         {
  1744         UiccRefreshReq( UICC_REFRESH_DONE );
  1664         UiccRefreshReq( UICC_REFRESH_DONE );
  1745         }
  1665         }
  1746     }
  1666     }
  1919     TInt ret( KErrNone );
  1839     TInt ret( KErrNone );
  1920 
  1840 
  1921     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
  1841     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
  1922         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  1842         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  1923         {
  1843         {
  1924         // Set parameters for UICC_APPL_CMD_REQ message
  1844         ret = UiccApplCmdReq(
  1925         TUiccReadTransparent params;
  1845             ETrIdAclStatusReadEfEst,
  1926         params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  1846             UICC_APPL_READ_TRANSPARENT,
  1927         params.trId = ETrIdAclStatusReadEfEst;
  1847             0,
  1928         params.dataAmount = 0;
  1848             0,
  1929         params.dataOffset = 0;
  1849             KElemEst,
  1930         params.fileId = KElemEst;
  1850             5 );
  1931         params.fileIdSfi = 0x05;
       
  1932         params.serviceType = UICC_APPL_READ_TRANSPARENT;
       
  1933 
       
  1934         // File id path
       
  1935         params.filePath.Append( KMasterFileId >> 8 );
       
  1936         params.filePath.Append( KMasterFileId );
       
  1937         params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  1938 
       
  1939         ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  1940         }
  1851         }
  1941     else
  1852     else
  1942         {
  1853         {
  1943 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust");
  1854 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust");
  1944 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADEFESTREQ, "CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust" );
  1855 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADEFESTREQ, "CMmPhoneMessHandler::UiccReadEfEstReq: card type is NOT UICC or ACL not supported in EFust" );
  1961 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCGETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp" );
  1872 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCGETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp" );
  1962 
  1873 
  1963     TInt ret( KErrNone );
  1874     TInt ret( KErrNone );
  1964     RMobilePhone::TAPNControlListServiceStatus aclStatus;
  1875     RMobilePhone::TAPNControlListServiceStatus aclStatus;
  1965 
  1876 
  1966     if( UICC_STATUS_OK == aStatus )
  1877     if( ( UICC_STATUS_OK == aStatus ) && ( 0 < aFileData.Length() ) )
  1967         {
  1878         {
  1968         TUint8 aclState( aFileData[0] & KAclStateMask );
  1879         TUint8 aclState( aFileData[0] & KAclStateMask );
  1969         if( aclState )
  1880         if( aclState )
  1970             {
  1881             {
  1971             aclStatus = RMobilePhone::EAPNControlListServiceEnabled;
  1882             aclStatus = RMobilePhone::EAPNControlListServiceEnabled;
  1980 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus);
  1891 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus);
  1981 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCGETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus );
  1892 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCGETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccGetAclStatusReadEfEstResp: EFest reading failed: 0x%x", aStatus );
  1982         ret = KErrAccessDenied;
  1893         ret = KErrAccessDenied;
  1983         }
  1894         }
  1984 
  1895 
  1985     // complete with packed parameter
       
  1986     CMmDataPackage dataPackage;
  1896     CMmDataPackage dataPackage;
  1987 
  1897 
  1988     if( KErrNone == ret )
  1898     if( KErrNone == ret )
  1989         {
  1899         {
  1990         dataPackage.PackData( &aclStatus );
  1900         dataPackage.PackData( &aclStatus );
  1991         }
  1901         }
  1992 
  1902 
  1993     iACLIsProgress = EFalse; //set ACL flag
  1903     iACLIsProgress = EFalse;
  1994     iMessageRouter->Complete(
  1904     iMessageRouter->Complete(
  1995         EMobilePhoneGetAPNControlListServiceStatus,
  1905         EMobilePhoneGetAPNControlListServiceStatus,
  1996         &dataPackage,
  1906         &dataPackage,
  1997         ret );
  1907         ret );
  1998     }
  1908     }
  2009 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp");
  1919 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp");
  2010 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp" );
  1920 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp" );
  2011 
  1921 
  2012     TInt ret( KErrNone );
  1922     TInt ret( KErrNone );
  2013     TBool completeNeeded( ETrue );
  1923     TBool completeNeeded( ETrue );
  2014 
  1924     TUint8 aclState( 0 );
  2015     if( UICC_STATUS_OK == aStatus )
  1925 
  2016         {
  1926     if ( 0 < aFileData.Length() )
  2017         TUint8 aclState( aFileData[0] );
  1927         {
  2018         if( aclState & KAclStateMask )
  1928         aclState = aFileData[0];
  2019             {
  1929         }
  2020             if( RMobilePhone::EAPNControlListServiceDisabled == iAclStatus )
  1930 
  2021                 {
  1931     if ( ( UICC_STATUS_OK == aStatus ) && ( aclState & KAclStateMask ) )
  2022                 // ACL state is enabled and we need to set it to disabled .
  1932         {
  2023                 // So EFest needs to be updated
  1933         if ( RMobilePhone::EAPNControlListServiceDisabled == iAclStatus )
  2024                 completeNeeded = EFalse;
  1934             {
  2025                 UiccSetAclStatusWriteEfEstReq( aclState );
  1935             // ACL state is enabled and we need to set it to disabled.
  2026                 }
  1936             // So EFest needs to be updated
  2027             else
  1937             completeNeeded = EFalse;
  2028                 {
  1938             UiccSetAclStatusWriteEfEstReq( aclState );
  2029                 // ACL status already correct, let's complete
  1939             }
       
  1940         else
       
  1941             {
       
  1942             // ACL status already correct, let's complete
  2030 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete");
  1943 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete");
  2031 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" );
  1944 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" );
  2032                 }
  1945             }
       
  1946         }
       
  1947     else if ( ( UICC_STATUS_OK == aStatus ) && ( ! aclState & KAclStateMask ) )
       
  1948         {
       
  1949         if ( RMobilePhone::EAPNControlListServiceEnabled == iAclStatus )
       
  1950             {
       
  1951             // EFest needs to be updated
       
  1952             completeNeeded = EFalse;
       
  1953             UiccSetAclStatusWriteEfEstReq( aclState );
  2033             }
  1954             }
  2034         else
  1955         else
  2035             {
  1956             {
  2036             if( RMobilePhone::EAPNControlListServiceEnabled == iAclStatus )
  1957             // ACL status already correct, let's complete
  2037                 {
       
  2038                 // EFest needs to be updated
       
  2039                 completeNeeded = EFalse;
       
  2040                 UiccSetAclStatusWriteEfEstReq( aclState );
       
  2041                 }
       
  2042             else
       
  2043                 {
       
  2044                 // ACL status already correct, let's complete
       
  2045 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete");
  1958 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete");
  2046 OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" );
  1959 OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" );
  2047                 }
       
  2048             }
  1960             }
  2049         }
  1961         }
  2050     else
  1962     else
  2051         {
  1963         {
  2052         // EFest reading failed
  1964         // EFest reading failed
  2055         ret = KErrAccessDenied;
  1967         ret = KErrAccessDenied;
  2056         }
  1968         }
  2057 
  1969 
  2058     if( completeNeeded )
  1970     if( completeNeeded )
  2059         {
  1971         {
  2060         // set flag and complete
  1972         iACLIsProgress = EFalse;
  2061         iACLIsProgress = EFalse; //set ACL flag
       
  2062         iMessageRouter->Complete(
  1973         iMessageRouter->Complete(
  2063             EMobilePhoneSetAPNControlListServiceStatus,
  1974             EMobilePhoneSetAPNControlListServiceStatus,
  2064             ret );
  1975             ret );
  2065         }
  1976         }
  2066     }
  1977     }
  2068 // ----------------------------------------------------------------------------
  1979 // ----------------------------------------------------------------------------
  2069 // CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq
  1980 // CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq
  2070 // Writes ACL status to EFest
  1981 // Writes ACL status to EFest
  2071 // ----------------------------------------------------------------------------
  1982 // ----------------------------------------------------------------------------
  2072 //
  1983 //
  2073 TInt CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq(  TUint8 aOldAclState )
  1984 TInt CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq( TUint8 aOldAclState )
  2074     {
  1985     {
  2075 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq");
  1986 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq");
  2076 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq" );
  1987 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq" );
  2077 
  1988 
  2078     TInt ret( KErrNone );
  1989     TInt ret( KErrNone );
  2091         }
  2002         }
  2092 
  2003 
  2093     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
  2004     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
  2094         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  2005         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  2095         {
  2006         {
  2096         TUiccWriteTransparent params;
  2007         TBuf8<KAclStatusLength> fileData;
  2097         params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  2008         fileData.Append( newState );
  2098         params.trId = ETrIdAclStatusWriteEfEst;
  2009         ret = UiccApplCmdReq(
  2099         params.dataOffset = 0;
  2010             ETrIdAclStatusWriteEfEst,
  2100         params.dataAmount = 1; // only one byte is update
  2011             UICC_APPL_UPDATE_TRANSPARENT,
  2101         params.fileId = KElemEst;
  2012             0,
  2102         params.fileIdSfi = 0x05;
  2013             0,
  2103         params.serviceType = UICC_APPL_UPDATE_TRANSPARENT;
  2014             KElemEst,
  2104         // File id path
  2015             5,
  2105         params.filePath.Append( KMasterFileId >> 8 );
  2016             fileData );
  2106         params.filePath.Append( KMasterFileId );
       
  2107         params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  2108         params.fileData.Append( newState );
       
  2109 
       
  2110         ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  2111         }
  2017         }
  2112     else
  2018     else
  2113         {
  2019         {
  2114 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust");
  2020 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust");
  2115 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust" );
  2021 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq: card type is NOT UICC or ACL not supported in EFust" );
  2167     TInt ret( KErrNone );
  2073     TInt ret( KErrNone );
  2168 
  2074 
  2169     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
  2075     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
  2170         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  2076         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  2171         {
  2077         {
  2172         // Set parameters for UICC_APPL_CMD_REQ message
  2078         ret = UiccApplCmdReq(
  2173         TUiccReadTransparent params;
  2079             ETrIdAclReadEfAcl,
  2174         params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  2080             UICC_APPL_READ_TRANSPARENT,
  2175         params.trId = ETrIdAclReadEfAcl;
  2081             0,
  2176         params.dataAmount = 0;
  2082             0,
  2177         params.dataOffset = 0;
  2083             KElemFileAcl,
  2178         params.fileId = KElemFileAcl;
  2084             UICC_SFI_NOT_PRESENT );
  2179         params.fileIdSfi = UICC_SFI_NOT_PRESENT;
       
  2180         params.serviceType = UICC_APPL_READ_TRANSPARENT;
       
  2181 
       
  2182         // File id path
       
  2183         params.filePath.Append( KMasterFileId >> 8 );
       
  2184         params.filePath.Append( KMasterFileId );
       
  2185         params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  2186 
       
  2187         ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  2188         }
  2085         }
  2189     else
  2086     else
  2190         {
  2087         {
  2191 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust");
  2088 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust");
  2192 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADACLREQ, "CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust" );
  2089 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCREADACLREQ, "CMmPhoneMessHandler::UiccReadAclReq: card type is NOT UICC or ACL not supported in EFust" );
  2207     const TDesC8& aFileData )
  2104     const TDesC8& aFileData )
  2208     {
  2105     {
  2209 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadAclResp");
  2106 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadAclResp");
  2210 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADACLRESP, "CMmPhoneMessHandler::UiccReadAclResp" );
  2107 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADACLRESP, "CMmPhoneMessHandler::UiccReadAclResp" );
  2211     TInt ret( KErrNone );
  2108     TInt ret( KErrNone );
  2212     if( UICC_STATUS_OK == aStatus )
  2109     if ( ( UICC_STATUS_OK == aStatus ) &&
       
  2110         ( KApnDataIndex < aFileData.Length() ) )
  2213         {
  2111         {
  2214         if( iAPNList )
  2112         if( iAPNList )
  2215             {
  2113             {
  2216             delete iAPNList;
  2114             delete iAPNList;
  2217             iAPNList = 0;
  2115             iAPNList = 0;
  2279         ) const
  2177         ) const
  2280     {
  2178     {
  2281 TFLOGSTRING2("TSY: CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries);
  2179 TFLOGSTRING2("TSY: CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries);
  2282 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_DECODEACL, "CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries );
  2180 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_DECODEACL, "CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries );
  2283 
  2181 
  2284     // allocate new array, 1 is granularity
       
  2285     CDesC8ArrayFlat* apnList = new( ELeave ) CDesC8ArrayFlat( 1 );
  2182     CDesC8ArrayFlat* apnList = new( ELeave ) CDesC8ArrayFlat( 1 );
  2286     CleanupStack::PushL( apnList );
  2183     CleanupStack::PushL( apnList );
  2287 
  2184 
  2288     TInt offset( 0 );
  2185     TInt offset( 0 );
  2289 
  2186 
  2290     //check length before using
       
  2291     if ( 0 < aTlv.Length() )
  2187     if ( 0 < aTlv.Length() )
  2292         {
  2188         {
  2293         // decode TLV entries to CDesC8ArrayFlat
  2189         // decode TLV entries to CDesC8ArrayFlat
  2294         for ( TInt i = 0; i < aTotalEntries; i++ )
  2190         for ( TInt i = 0; i < aTotalEntries; i++ )
  2295             {
  2191             {
  2321     {
  2217     {
  2322     TInt indexCount( iAPNList->MdcaCount() );
  2218     TInt indexCount( iAPNList->MdcaCount() );
  2323 TFLOGSTRING2("TSY: CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d",indexCount);
  2219 TFLOGSTRING2("TSY: CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d",indexCount);
  2324 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_COMPLETEENUMERATEAPNENTRIES, "CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d", indexCount );
  2220 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_COMPLETEENUMERATEAPNENTRIES, "CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d", indexCount );
  2325 
  2221 
  2326     //package index of TLV's to the client
       
  2327     CMmDataPackage dataPackage;
  2222     CMmDataPackage dataPackage;
  2328     dataPackage.PackData( &indexCount );
  2223     dataPackage.PackData( &indexCount );
  2329 
  2224 
  2330     // set flag and complete
  2225     iACLIsProgress = EFalse;
  2331     iACLIsProgress = EFalse; //set ACL flag
       
  2332     iMessageRouter->Complete(
  2226     iMessageRouter->Complete(
  2333         EMobilePhoneEnumerateAPNEntries,
  2227         EMobilePhoneEnumerateAPNEntries,
  2334         &dataPackage,
  2228         &dataPackage,
  2335         KErrNone );
  2229         KErrNone );
  2336     }
  2230     }
  2347 
  2241 
  2348     CMmDataPackage dataPackage;
  2242     CMmDataPackage dataPackage;
  2349     RMobilePhone::TAPNEntryV3 aclEntry;
  2243     RMobilePhone::TAPNEntryV3 aclEntry;
  2350     TInt err( KErrNone );
  2244     TInt err( KErrNone );
  2351 
  2245 
  2352     //check if index is valid or not.
       
  2353     if ( iAPNList->MdcaCount() <= aIndex )
  2246     if ( iAPNList->MdcaCount() <= aIndex )
  2354         {
  2247         {
  2355         err = KErrOverflow;
  2248         err = KErrOverflow;
  2356         }
  2249         }
  2357     else
  2250     else
  2361         aclEntry.iApn.Copy( iAPNList->MdcaPoint( aIndex ) );
  2254         aclEntry.iApn.Copy( iAPNList->MdcaPoint( aIndex ) );
  2362         }
  2255         }
  2363 
  2256 
  2364     dataPackage.PackData( &aclEntry );
  2257     dataPackage.PackData( &aclEntry );
  2365 
  2258 
  2366     // set flag and complete
  2259     iACLIsProgress = EFalse;
  2367     iACLIsProgress = EFalse; //set ACL flag
       
  2368     iMessageRouter->Complete( EMobilePhoneGetAPNname, &dataPackage, err );
  2260     iMessageRouter->Complete( EMobilePhoneGetAPNname, &dataPackage, err );
  2369     }
  2261     }
  2370 
  2262 
  2371 // --------------------------------------------------------------------------
  2263 // --------------------------------------------------------------------------
  2372 // CMmPhoneMessHandler::UiccDeleteApnEntry
  2264 // CMmPhoneMessHandler::UiccDeleteApnEntry
  2377     {
  2269     {
  2378 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccDeleteApnEntry ");
  2270 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccDeleteApnEntry ");
  2379 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCDELETEAPNENTRY, "CMmPhoneMessHandler::UiccDeleteApnEntry" );
  2271 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCDELETEAPNENTRY, "CMmPhoneMessHandler::UiccDeleteApnEntry" );
  2380 
  2272 
  2381     TInt ret;
  2273     TInt ret;
  2382     //check if aIndex is valid or not.
       
  2383     if ( iAPNList->MdcaCount() <= aIndex )
  2274     if ( iAPNList->MdcaCount() <= aIndex )
  2384         {
  2275         {
  2385         //error occurs
       
  2386         ret = KErrOverflow;
  2276         ret = KErrOverflow;
  2387         }
  2277         }
  2388     else
  2278     else
  2389         {
  2279         {
  2390         //data is valid
       
  2391         //delete data from cache
       
  2392         iAPNList->Delete( aIndex );
  2280         iAPNList->Delete( aIndex );
  2393         iAPNList->Compress();
  2281         iAPNList->Compress();
  2394 
  2282 
  2395         //write new list to the SIM
  2283         //write new list to the SIM
  2396         ret = UiccWriteEfAclReq();
  2284         ret = UiccWriteEfAclReq();
  2414         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  2302         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
  2415         {
  2303         {
  2416         TInt dataLen( ACLLength( iAPNList ) );
  2304         TInt dataLen( ACLLength( iAPNList ) );
  2417         TUint8 apnCount( iAPNList->MdcaCount() );
  2305         TUint8 apnCount( iAPNList->MdcaCount() );
  2418 
  2306 
  2419         TUiccWriteTransparent params;
  2307         TBuf8<KFileDataLength> fileData;
  2420         params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  2308         fileData.Append( apnCount );
  2421         params.trId = ETrIdAclWriteEfAcl;
       
  2422         params.dataOffset = 0;
       
  2423         params.dataAmount = dataLen;
       
  2424         params.fileId = KElemFileAcl;
       
  2425         params.fileIdSfi = UICC_SFI_NOT_PRESENT;
       
  2426         params.serviceType = UICC_APPL_UPDATE_TRANSPARENT;
       
  2427         // File id path
       
  2428         params.filePath.Append( KMasterFileId >> 8 );
       
  2429         params.filePath.Append( KMasterFileId );
       
  2430         params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  2431 
       
  2432         params.fileData.Append( apnCount );
       
  2433         for ( TInt i = 0; i < apnCount; i++ )
  2309         for ( TInt i = 0; i < apnCount; i++ )
  2434             {
  2310             {
  2435             TPtrC8 apn = iAPNList->MdcaPoint( i );
  2311             TPtrC8 apn = iAPNList->MdcaPoint( i );
  2436             // spec: The tag value of the APN-TLV shall be 'DD'
  2312             // spec: The tag value of the APN-TLV shall be 'DD'
  2437             params.fileData.Append( 0xdd );
  2313             fileData.Append( 0xdd );
  2438             params.fileData.Append( apn.Length() );
  2314             fileData.Append( apn.Length() );
  2439             params.fileData.Append( apn );
  2315             fileData.Append( apn );
  2440             }
  2316             }
  2441 
  2317 
  2442         ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
  2318         ret = UiccApplCmdReq(
       
  2319             ETrIdAclWriteEfAcl,
       
  2320             UICC_APPL_UPDATE_TRANSPARENT,
       
  2321             0,
       
  2322             0,
       
  2323             KElemFileAcl,
       
  2324             UICC_SFI_NOT_PRESENT,
       
  2325             fileData );
  2443         }
  2326         }
  2444     else
  2327     else
  2445         {
  2328         {
  2446 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust");
  2329 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust");
  2447 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCWRITEEFACLREQ, "CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust" );
  2330 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCWRITEEFACLREQ, "CMmPhoneMessHandler::UiccWriteEfAclReq: card type is NOT UICC or ACL not supported in EFust" );
  2468 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCWRITEEFACLRESP, "CMmPhoneMessHandler::UiccWriteEfAclResp: EFacl writing failed: 0x%x", aStatus );
  2351 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCWRITEEFACLRESP, "CMmPhoneMessHandler::UiccWriteEfAclResp: EFacl writing failed: 0x%x", aStatus );
  2469 
  2352 
  2470         ret = KErrAccessDenied;
  2353         ret = KErrAccessDenied;
  2471         }
  2354         }
  2472 
  2355 
  2473     iACLIsProgress = EFalse; //set ACL flag
  2356     iACLIsProgress = EFalse;
  2474     iMessageRouter->Complete(
  2357     iMessageRouter->Complete(
  2475         iOngoingAclIpc,
  2358         iOngoingAclIpc,
  2476         ret );
  2359         ret );
  2477     }
  2360     }
  2478 
  2361 
  2486 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount());
  2369 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount());
  2487 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount() );
  2370 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. Count: %d", aApnList->MdcaCount() );
  2488 
  2371 
  2489     TUint16 length( 0 );
  2372     TUint16 length( 0 );
  2490 
  2373 
  2491     for ( TInt i = 0; i < aApnList->MdcaCount(); i++ )
  2374     if ( aApnList )
  2492         {
  2375         {
  2493         TPtrC8 apn = aApnList->MdcaPoint( i );
  2376         for ( TInt i = 0; i < aApnList->MdcaCount(); i++ )
  2494         length += apn.Length() + 2;
  2377             {
       
  2378             TPtrC8 apn = aApnList->MdcaPoint( i );
       
  2379             length += apn.Length() + 2;
       
  2380             }
  2495         }
  2381         }
  2496 
  2382 
  2497     // result is incremented by one because of EFacl contains number of tlv objects
  2383     // result is incremented by one because of EFacl contains number of tlv objects
  2498     // as first byte of the file data
  2384     // as first byte of the file data
  2499     length++;
  2385     length++;
  2502 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. ACL len: %d", length );
  2388 OstTrace1( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_ACLLENGTH, "CMmPhoneMessHandler::ACLLength. ACL len: %d", length );
  2503 
  2389 
  2504     return length;
  2390     return length;
  2505     }
  2391     }
  2506 
  2392 
       
  2393 
       
  2394 // --------------------------------------------------------------------------
       
  2395 // CMmPhoneMessHandler::UiccApplCmdReq
       
  2396 //
       
  2397 // --------------------------------------------------------------------------
       
  2398 //
       
  2399 TInt CMmPhoneMessHandler::UiccApplCmdReq(
       
  2400     const TUiccTrId aTrId,
       
  2401     const TUint8 aServiceType,
       
  2402     const TUint16 aDataAmount,
       
  2403     const TUint16 aDataOffset,
       
  2404     const TUint16 aFileId,
       
  2405     const TUint8 aFileIdSfi,
       
  2406     const TDesC8& aFileData )
       
  2407     {
       
  2408 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccApplCmdReq");
       
  2409 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCAPPLCMDREQ, "CMmPhoneMessHandler::UiccApplCmdReq" );
       
  2410 
       
  2411     TInt ret( KErrNone );
       
  2412     TBuf8<KFilePathLength> filePath;
       
  2413     filePath.Append( KMasterFileId >> 8 );
       
  2414     filePath.Append( KMasterFileId );
       
  2415     if ( KElemFileDynFlagsOrange == aFileId )
       
  2416         {
       
  2417         filePath.Append( KOrangeDedicatedFile >> 8 );
       
  2418         filePath.Append( KOrangeDedicatedFile );
       
  2419         }
       
  2420     else
       
  2421         {
       
  2422         filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
       
  2423         }
       
  2424 
       
  2425     if ( UICC_APPL_READ_TRANSPARENT == aServiceType )
       
  2426         {
       
  2427         TUiccReadTransparent params;
       
  2428         params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
       
  2429         params.trId = aTrId;
       
  2430         params.dataAmount = aDataAmount;
       
  2431         params.dataOffset = aDataOffset;
       
  2432         params.fileId = aFileId;
       
  2433         params.fileIdSfi = aFileIdSfi;
       
  2434         params.serviceType = aServiceType;
       
  2435         params.filePath.Append( filePath );
       
  2436         ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  2437         }
       
  2438     else if ( UICC_APPL_UPDATE_TRANSPARENT == aServiceType )
       
  2439         {
       
  2440         TUiccWriteTransparent params;
       
  2441         params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
       
  2442         params.trId = aTrId;
       
  2443         params.dataAmount = aDataAmount;
       
  2444         params.dataOffset = aDataOffset;
       
  2445         params.fileId = aFileId;
       
  2446         params.fileIdSfi = aFileIdSfi;
       
  2447         params.serviceType = aServiceType;
       
  2448         params.fileData.Append( aFileData );
       
  2449         params.filePath.Append( filePath );
       
  2450         ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
       
  2451         }
       
  2452     // No else
       
  2453     return ret;
       
  2454     }
       
  2455 
  2507 // End of file
  2456 // End of file