adaptationlayer/tsy/nokiatsy_dll/src/cmmphonemesshandler.cpp
changeset 8 6295dc2169f3
parent 5 8ccc39f9d787
child 9 8486d82aef45
--- a/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonemesshandler.cpp	Wed Feb 17 13:58:55 2010 +0200
+++ b/adaptationlayer/tsy/nokiatsy_dll/src/cmmphonemesshandler.cpp	Wed Apr 21 14:29:55 2010 +0300
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2007-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"
@@ -65,8 +65,7 @@
 
 // LOCAL CONSTANTS AND MACROS
 
-const TUint8 KPhoneTransId = 6; //hard coded transaction ID
-const TUint8 KImsiSize = 8;
+const TUint8 KPhoneTransId = 6;
 const TUint8 KServiceProviderSize = 36;
 const TUint8 KSpnFileSize = 16;
 
@@ -74,14 +73,26 @@
 const TUint8 KAclStateMask( 4 );
 const TUint8 KNumOfApnsIndex( 0 );
 const TUint8 KApnDataIndex( 1 );
+const TUint8 KCpsLength( 18 );
+const TUint8 KSpnLength( 17 );
+const TUint8 KLineInfoLength( 1 );
+const TUint8 KAclStatusLength( 1 );
+
+const TUint8 KImsiSize = 9;
+const TUint8 KUnusedNibble = 0x0F;
+const TUint8 KImsiStringByteCount = 0;
+const TUint8 KFirstImsiDigit = 1;
+const TUint8 KSecondImsiDigit = 2;
+const TUint8 KNibbleMask = 0x0f;
+const TUint8 KNibbleShift = 4;
 
 // ------------------------------------------------------
 // --- Alternate Line Service (ALS)-related constants ---
 // ------------------------------------------------------
 // Consts for mapping the Als Line values, as used in SIMSON's
 // SIM_SERV_DYNAMIC_FLAGS_STR structure.
-const TUint8 KAlsAuxiliaryLine = 0x00; // ALS alternate line
-const TUint8 KAlsPrimaryLine = 0x01;   // ALS primary line
+const TUint8 KAlsAuxiliaryLine = 0x00;
+const TUint8 KAlsPrimaryLine = 0x01;
 
 // ----------------------------------------------
 // --- (U)ICC Service Table-related constants ---
@@ -130,9 +141,9 @@
 //
 CMmPhoneMessHandler* CMmPhoneMessHandler::NewL
         (
-        CMmPhoNetSender* aPhoNetSender,  //a ptr to the phonet sender
-        CMmPhoNetReceiver* aPhoNetReceiver,  //a ptr to the phonet receiver
-        CMmMessageRouter* aMessageRouter, // pointer to the msg router
+        CMmPhoNetSender* aPhoNetSender,
+        CMmPhoNetReceiver* aPhoNetReceiver,
+        CMmMessageRouter* aMessageRouter,
         CMmSupplServMessHandler* aSupplServMessHandler,
         CMmUiccMessHandler* aUiccMessHandler
         )
@@ -145,9 +156,11 @@
 
     CleanupStack::PushL( phoneMessHandler );
     phoneMessHandler->iPhoNetSender = aPhoNetSender;
-    phoneMessHandler->ConstructL( aMessageRouter );
-    phoneMessHandler->iSupplServMessHandler = aSupplServMessHandler;
-    phoneMessHandler->iMmUiccMessHandler = aUiccMessHandler;
+    phoneMessHandler->ConstructL(
+        aMessageRouter,
+        aPhoNetSender,
+        aSupplServMessHandler,
+        aUiccMessHandler );
 
     aPhoNetReceiver->RegisterL(
         phoneMessHandler,
@@ -180,19 +193,24 @@
 //
 void CMmPhoneMessHandler::ConstructL
         (
-        CMmMessageRouter* aMessageRouter
+        CMmMessageRouter* aMessageRouter,
+        CMmPhoNetSender* aPhoNetSender,
+        CMmSupplServMessHandler* aSupplServMessHandler,
+        CMmUiccMessHandler* aUiccMessHandler
         )
     {
 TFLOGSTRING("TSY: CMmPhoneMessHandler::ConstructL");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_CONSTRUCTL, "CMmPhoneMessHandler::ConstructL" );
 
-    // Internal pointers, must be nulled before used.
+    iPhoNetSender = aPhoNetSender;
+    iSupplServMessHandler = aSupplServMessHandler;
+    iMmUiccMessHandler = aUiccMessHandler;
+    iMessageRouter = aMessageRouter;
+
     iSSTFileData = NULL;
     iStoreInfo = NULL;
     iLocIndex = 0;
 
-    iMessageRouter = aMessageRouter;
-
     iCommonTSYRefreshPending = EFalse;
     iRefreshError = EFalse;
     iCompleteRefresfDone = EFalse;
@@ -212,16 +230,13 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler destructed.");
 OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_CMMPHONEMESSHANDLER, "CMmPhoneMessHandler::~CMmPhoneMessHandler" );
 
-    // Delete iStoreInfo and set it to NULL, if it exist.
     if( iStoreInfo )
         {
         delete iStoreInfo;
         }
 
-    // Delete iSSTFileData and set it to NULL, if it exist.
     if( iSSTFileData )
         {
-        // Delete object
         delete iSSTFileData;
         }
 
@@ -352,19 +367,12 @@
 TInt CMmPhoneMessHandler::ExtFuncL
         (
         TInt aIpc,
-        const CMmDataPackage* aDataPackage // Data package
+        const CMmDataPackage* aDataPackage
         )
     {
 TFLOGSTRING2("TSY: CMmPhoneMessHandler::ExtFuncL. Licensee specific implemtantion. IPC: %d", aIpc);
 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_EXTFUNCL, "CMmPhoneMessHandler::ExtFuncL;Licensee specific implemtantion aIpc=%d", aIpc );
 
-    //*************************************************************//
-    // NOTE.
-    //
-    // LICENSEE SPECIFIC MESSAGE HANDLER IMPLEMENTATION STARTS HERE
-    //
-    //*************************************************************//
-
     TInt ret( KErrNone );
     TUint8 transId( KPhoneTransId );
 
@@ -378,8 +386,15 @@
         case EMobilePhoneSetALSLine:
             {
             TUint8 alsLine;
-            aDataPackage->UnPackData( alsLine );
-            ret = UiccWriteDynamicFlagsReq( alsLine );
+            if ( aDataPackage )
+                {
+                aDataPackage->UnPackData( alsLine );
+                ret = UiccWriteDynamicFlagsReq( alsLine );
+                }
+            else
+                {
+                ret = KErrArgument;
+                }
             break;
             }
         case EMobilePhoneGetCustomerServiceProfile:
@@ -567,7 +582,7 @@
 //
 void CMmPhoneMessHandler::ReceiveMessageL
         (
-        const TIsiReceiveC &aIsiMessage  // ISI message received
+        const TIsiReceiveC &aIsiMessage
         )
     {
     TInt resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
@@ -584,44 +599,31 @@
         case PN_MODEM_INFO:
 #endif /* INTERNAL_TESTING_OLD_IMPLEMENTATION_FOR_UICC_TESTING */
             {
-            switch( messageId )
+            if ( INFO_SERIAL_NUMBER_READ_RESP == messageId )
                 {
-                case INFO_SERIAL_NUMBER_READ_RESP:
-                    {
-                    InfoSerialNumberReadResp( aIsiMessage );
-                    break;
-                    }
-                default:
-                    {
+                InfoSerialNumberReadResp( aIsiMessage );
+                }
+            else
+                {
 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default.\n" );
 OstTrace0( TRACE_NORMAL, DUP4_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - case PN_MODEM_INFO, switch messageId - default" );
-                    break;
-                    }
                 }
             break; // end case PN_MODEM_INFO
             }
         case PN_UICC:
             {
-            switch( messageId )
+            if ( UICC_REFRESH_IND == messageId )
                 {
-                case UICC_REFRESH_IND:
-                    {
-                    UiccRefreshInd( aIsiMessage );
-                    break;
-                    }
-                case UICC_REFRESH_RESP:
-                    {
-                    UiccRefreshResp( aIsiMessage );
-                    break;
-                    }
-                default:
-                    {
-                    break;
-                    }
+                UiccRefreshInd( aIsiMessage );
                 }
+            else if ( UICC_REFRESH_RESP == messageId )
+                {
+                UiccRefreshResp( aIsiMessage );
+                }
+            // No else
             break;
             }
-        default:
+       default:
             {
 TFLOGSTRING("TSY: CMmPhoneMessHandler::ReceiveMessageL, switch resource - default.\n" );
 OstTrace0( TRACE_NORMAL, DUP5_CMMPHONEMESSHANDLER_RECEIVEMESSAGEL, "CMmPhoneMessHandler::ReceiveMessageL, switch resource - default" );
@@ -632,13 +634,13 @@
 
 // --------------------------------------------------------------------------
 // CMmPhoneMessHandler::InfoSerialNumberReadReq
-// Constructs INFO_SERIAL_NUMBER_READ_REQ ISI message..
+// Constructs INFO_SERIAL_NUMBER_READ_REQ ISI message.
 // Returns KErrNone on success, other error value on failure.
 // --------------------------------------------------------------------------
 //
 TInt CMmPhoneMessHandler::InfoSerialNumberReadReq
         (
-        TUint8 aTransactionId, // transaction id
+        TUint8 aTransactionId,
         TUint8 aTarget // type of requested serial number
         )
     {
@@ -673,54 +675,49 @@
 
     TBuf8<KSerialNumberLength> serialData;
 
-    // Get status
     TUint8 status( aIsiMessage.Get8bit(
         ISI_HEADER_SIZE + INFO_SERIAL_NUMBER_READ_RESP_OFFSET_STATUS ) );
 
 TFLOGSTRING2("TSY: CMmPhoneMessHandler::InfoSerialNumberReadResp, status=0x%02x",status);
 OstTraceExt1( TRACE_NORMAL, CMMPHONEMESSHANDLER_INFOSERIALNUMBERREADRESP, "CMmPhoneMessHandler::InfoSerialNumberReadResp;status=%hhx", status );
 
-    // If status is Ok get information from possible sub block(s).
+    // Get information from possible sub block(s).
     if ( INFO_OK == status )
         {
+        TBool subblockFound( EFalse );
+        TUint sbSerialNumberStartOffset( 0 );
+
         // If sub blocks
         if ( 0 != aIsiMessage.Get8bit(
             ISI_HEADER_SIZE +
             INFO_SERIAL_NUMBER_READ_RESP_OFFSET_SUBBLOCKCOUNT ) )
             {
-            TUint sbSerialNumberStartOffset( 0 );
+            subblockFound = ETrue;
+            }
 
-            if ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
-                ISI_HEADER_SIZE + SIZE_INFO_SERIAL_NUMBER_READ_RESP,
-                INFO_SB_SN_IMEI_PLAIN,
-                EIsiSubBlockTypeId8Len8,
-                sbSerialNumberStartOffset ) )
-                {
-                // Read the string length - the zero terminator...
-                TUint8 strLength( aIsiMessage.Get8bit(
-                    sbSerialNumberStartOffset +
-                    INFO_SB_SN_IMEI_PLAIN_OFFSET_STRLEN ) - 1 );
-                // ...and compare it to the available buffer size
-                // (50 bytes in etel),
-                // and choose the shorter one strLength =
-                // ( RMobilePhone::KPhoneSerialNumberSize > strLength )?
-                // strLength : RMobilePhone::KPhoneSerialNumberSize;
+        if ( subblockFound && ( KErrNone == aIsiMessage.FindSubBlockOffsetById(
+            ISI_HEADER_SIZE + SIZE_INFO_SERIAL_NUMBER_READ_RESP,
+            INFO_SB_SN_IMEI_PLAIN,
+            EIsiSubBlockTypeId8Len8,
+            sbSerialNumberStartOffset ) ) )
+            {
+            // Read the string length - the zero terminator
+            TUint8 strLength( aIsiMessage.Get8bit(
+                sbSerialNumberStartOffset +
+                INFO_SB_SN_IMEI_PLAIN_OFFSET_STRLEN ) - 1 );
 
-                TUint8 dataOffset(
-                    sbSerialNumberStartOffset +
-                    INFO_SB_SN_IMEI_PLAIN_OFFSET_IMEIPLAINU8 );
+            TUint8 dataOffset(
+                sbSerialNumberStartOffset +
+                INFO_SB_SN_IMEI_PLAIN_OFFSET_IMEIPLAINU8 );
 
-                serialData.Append( aIsiMessage.GetData(
-                    dataOffset,
-                    strLength ).Left( KSerialNumberLength ) );
+            serialData.Append( aIsiMessage.GetData(
+                dataOffset,
+                strLength ).Left( KSerialNumberLength ) );
 
-                err = KErrNone;
-                }
+            err = KErrNone;
             }
         }
 
-    // Complete to CommonTSY, ONLY if all data has already been received
-    // packed parameter: TBuf8<KSerialNumberLength> serialData
     CMmDataPackage dataPackage;
     dataPackage.PackData( &serialData );
     iMessageRouter->Complete( EMobilePhoneGetPhoneId, &dataPackage, err );
@@ -736,22 +733,13 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadDynamicFlagsReq");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADDYNAMICFLAGSREQ, "CMmPhoneMessHandler::UiccReadDynamicFlagsReq" );
 
-    // Set parameters for UICC_APPL_CMD_REQ message
-    TUiccWriteTransparent params;
-    params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-    params.trId = ETrIdReadDynamicFlags;
-    params.dataOffset = 0;
-    params.dataAmount = 0;
-    params.fileId = KElemFileDynFlagsOrange;
-    params.fileIdSfi = UICC_SFI_NOT_PRESENT;
-    params.serviceType = UICC_APPL_READ_TRANSPARENT;
-    // File id path
-    params.filePath.Append( KMasterFileId >> 8 );
-    params.filePath.Append( KMasterFileId );
-    params.filePath.Append( KOrangeDedicatedFile >> 8 );
-    params.filePath.Append( KOrangeDedicatedFile );
-
-    return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+    return UiccApplCmdReq(
+        ETrIdReadDynamicFlags,
+        UICC_APPL_READ_TRANSPARENT,
+        0,
+        0,
+        KElemFileDynFlagsOrange,
+        UICC_SFI_NOT_PRESENT );
     }
 
 // --------------------------------------------------------------------------
@@ -785,24 +773,19 @@
 
     if ( KErrNone == ret )
         {
-        // Set parameters for UICC_APPL_CMD_REQ message
-        TUiccWriteTransparent params;
-        params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-        params.trId = ETrIdWriteDynamicFlags;
-        params.dataOffset = 0;
-        params.fileId = KElemFileDynFlagsOrange;
-        params.fileIdSfi = UICC_SFI_NOT_PRESENT;
-        params.serviceType = UICC_APPL_UPDATE_TRANSPARENT;
+        TBuf8<KLineInfoLength> fileData;
+        fileData.Append( line );
+        ret = UiccApplCmdReq(
+            ETrIdWriteDynamicFlags,
+            UICC_APPL_UPDATE_TRANSPARENT,
+            0,
+            0,
+            KElemFileDynFlagsOrange,
+            UICC_SFI_NOT_PRESENT,
+            fileData);
+        }
+    // No else
 
-        // File id path
-        params.filePath.Append( KMasterFileId >> 8 );
-        params.filePath.Append( KMasterFileId );
-        params.filePath.Append( KOrangeDedicatedFile >> 8 );
-        params.filePath.Append( KOrangeDedicatedFile );
-
-        params.fileData.Append( line );
-        ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
-        }
     return ret;
     }
 
@@ -822,9 +805,9 @@
         ( RMobilePhone::EAlternateLineUnknown );
 
     TInt ret( KErrNone );
-    if ( UICC_STATUS_OK == aStatus )
+    if ( UICC_STATUS_OK == aStatus && ( 0 < aFileData.Length() ) )
         {
-        // Dynamic flags byte: if bit 0 is 1, it is line 1, else line 2
+        // Dynamic flags byte
         if ( aFileData[0] & 0x1 )
             {
             alsLine = RMobilePhone::EAlternateLinePrimary;
@@ -875,21 +858,13 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccCspFileReq");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCCSPFILEREQ, "CMmPhoneMessHandler::UiccCspFileReq" );
 
-    // Set parameters for UICC_APPL_CMD_REQ message
-    TUiccReadTransparent params;
-    params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-    params.trId = ETrIdReadCsp;
-    params.dataAmount = 18;
-    params.dataOffset = 0; // Read from first byte
-    params.fileId = KElemFileCustomerServiceProfile;
-    params.serviceType = UICC_APPL_READ_TRANSPARENT;
-
-    // File id path
-    params.filePath.Append( KMasterFileId >> 8 );
-    params.filePath.Append( KMasterFileId );
-    params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-
-    return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+    return UiccApplCmdReq(
+        ETrIdReadCsp,
+        UICC_APPL_READ_TRANSPARENT,
+        18,
+        0,
+        KElemFileCustomerServiceProfile,
+        UICC_SFI_NOT_PRESENT );
     }
 
 // --------------------------------------------------------------------------
@@ -905,7 +880,7 @@
 
     RMobilePhone::TMobilePhoneCspFileV1 cspFileEtel;
 
-    if ( aStatus == KErrNone )
+    if ( aStatus == KErrNone && ( KCpsLength <= aFileData.Length() ) )
         {
         TUint8 i( 0 );
         // Call offering capabilities
@@ -961,13 +936,12 @@
             {
             cspFileEtel.iValueAddedServices = aFileData[i++];
             }
-        } // End of if ( aStatus == KErrNone )
+        } // End of if
     else
         {
         aStatus = KErrNotFound;
         }
 
-    // Complete with CSP data and error code
     CMmDataPackage dataPackage;
     dataPackage.PackData( &cspFileEtel );
 
@@ -987,22 +961,13 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccImsiReq");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCIMSIREQ, "CMmPhoneMessHandler::UiccImsiReq" );
 
-    // Set parameters for UICC_APPL_CMD_REQ message
-    TUiccReadTransparent params;
-    params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-    params.trId = ETrIdReadImsi;
-    params.dataAmount = 9; // Length + IMSI = 9 bytes
-    params.dataOffset = 0; // Read from first byte
-    params.fileId = KElemFileImsi;
-    params.fileIdSfi = 7;
-    params.serviceType = UICC_APPL_READ_TRANSPARENT;
-
-    // File id path
-    params.filePath.Append( KMasterFileId >> 8 );
-    params.filePath.Append( KMasterFileId );
-    params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-
-    return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+    return UiccApplCmdReq(
+        ETrIdReadImsi,
+        UICC_APPL_READ_TRANSPARENT,
+        9,
+        0,
+        KElemFileImsi,
+        7 );
     }
 
 // --------------------------------------------------------------------------
@@ -1017,60 +982,50 @@
 
     TInt err( KErrNone );
     TBuf8<RMobilePhone::KIMSISize> imsiData;
-    if ( UICC_STATUS_OK == aStatus )
+
+    if ( ( UICC_STATUS_OK == aStatus ) &&
+         ( KImsiSize == aFileData.Length() ) )
         {
-        TUint8 i( 0 );
-        TUint8 valueMSB( 0 );
-        TUint8 valueLSB( 0 );
-        // Get length of IMSI (the first byte)
-        TUint8 lengthOfImsi( aFileData[0] );
-        // Get the first IMSI number: MSB semioctet of byte 2
-        valueMSB = static_cast<TUint8>( aFileData[1] >> 4 );
-        // Check the validity
-        if ( KImsiSize >= lengthOfImsi && 10 > valueMSB  )
-            {
-            imsiData.AppendNum( valueMSB, EDecimal);
-            }
-        else
-            {
-            err = KErrCorrupt;
-            }
+        // 1st digit of the buffer is byte count (see 3GPP TS 51.011
+        // 10.3.2 EFIMSI (IMSI)). Get first IMSI number from second byte higher
+        // nibbles. Lower part has parity information and it is ignored.
+        imsiData.AppendNum( 
+            ( ( aFileData[KFirstImsiDigit]>> KNibbleShift )&KNibbleMask ),
+            EDecimal );
 
-        if ( KErrNone == err )
+        for( TUint8 i = KSecondImsiDigit;
+             i <= aFileData[KImsiStringByteCount];
+             i++ )
             {
-            // Check and append the rest of IMSI numbers
-            for ( i = 2; i <= lengthOfImsi; i++ )
+            // Unused nibbles are set to 'F' so pack only valid digits.
+            if ( KUnusedNibble != aFileData[i]&KNibbleMask )
+                {
+                imsiData.AppendNum( ( ( aFileData[i]&KNibbleMask ) ), EDecimal );
+                }
+            else
                 {
-                valueLSB = static_cast<TUint8>( aFileData[i] & 0x0F );
-                valueMSB = static_cast<TUint8>( aFileData[i] >> 4 );
-
-                // If both values are valid
-                if ( 10 > valueLSB && 10 > valueMSB )
-                    {
-                    imsiData.AppendNum( valueLSB, EDecimal);
-                    imsiData.AppendNum( valueMSB, EDecimal);
-                    }
-                // Last nibble is unused
-                else if( 10 > valueLSB && 0xF == valueMSB )
-                    {
-                    imsiData.AppendNum( valueLSB, EDecimal);
-                    break;
-                    }
-                // Either is invalid
-                else
-                    {
-                    err = KErrCorrupt;
-                    break;
-                    }
+                // Last digit found.
+                break;
+                }
+            if ( KUnusedNibble != ( ( aFileData[i]>>KNibbleShift )&KNibbleMask ) )
+                {
+                imsiData.AppendNum( 
+                    ( ( aFileData[i]>>KNibbleShift )&KNibbleMask ),
+                    EDecimal );
+                }
+            else
+                {
+                // Last digit found.
+                break;
                 }
             }
+        err = KErrNone;
         }
     else
         {
         err = KErrNotFound;
         }
 
-    // Complete with packed parameter
     CMmDataPackage dataPackage;
     dataPackage.PackData( &imsiData );
 
@@ -1090,23 +1045,13 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderName");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAME, "CMmPhoneMessHandler::UiccReadServiceProviderName" );
 
-    // Read SIM file '6F46', Service Provider Name
-    // Set parameters for UICC_APPL_CMD_REQ message
-    TUiccReadTransparent params;
-    params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-    params.trId = ETrIdReadServiceProviderName;
-    // Read all 17 bytes
-    params.dataAmount = 17;
-    params.dataOffset = 0;
-    params.fileId = KElemFileServiceProviderName;
-    params.serviceType = UICC_APPL_READ_TRANSPARENT;
-
-    // File id path
-    params.filePath.Append( KMasterFileId >> 8 );
-    params.filePath.Append( KMasterFileId );
-    params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-
-    return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+    return UiccApplCmdReq(
+        ETrIdReadServiceProviderName,
+        UICC_APPL_READ_TRANSPARENT,
+        17,
+        0,
+        KElemFileServiceProviderName,
+        UICC_SFI_NOT_PRESENT );
     }
 
 // --------------------------------------------------------------------------
@@ -1121,8 +1066,8 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadServiceProviderNameResp");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADSERVICEPROVIDERNAMERESP, "CMmPhoneMessHandler::UiccReadServiceProviderNameResp" );
 
-    TInt ret( KErrNone );
-    if ( KErrNone == aStatus )
+    TInt ret( KErrNotFound );
+    if ( KErrNone == aStatus && ( KSpnLength == aFileData.Length() ) )
         {
         // Store data and read SPN display info
         ret = UiccProcessServiceTypeCheck( aFileData );
@@ -1230,7 +1175,6 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCPROCESSSERVICETYPECHECK, "CMmPhoneMessHandler::UiccProcessServiceTypeCheck" );
 
-    // Copy service provider name, starting from byte 2
     TBuf8<KSpnFileSize> spnBuffer( aFileData.Mid( 1 ) );
     TBuf8<KServiceProviderSize> spnOutputBuffer;
     CMmStaticUtility::ConvertGsmDataToUcs2(
@@ -1266,12 +1210,10 @@
         iSecondDisplayCondition = RMobilePhone::KDisplaySPNRequired;
         }
 
-    // PLMN and SPN control information summed up to iDisplayReq field
     iServiceProviderName.iDisplayReq =
         iServiceProviderName.iDisplayReq + iSecondDisplayCondition;
 TFLOGSTRING2("TSY: CMmPhoneMessHandler::UiccProcessServiceTypeCheck - display condition: %d", (TUint8)iServiceProviderName.iDisplayReq);
 
-    // Buffer for service provider name
     TBuf16<KSpnFileSize> tempBuf;
     TIsiUtility::CopyFromBigEndian( spnOutputBuffer, tempBuf );
     // Copy service provider name
@@ -1281,23 +1223,13 @@
 
     // We still need to get the PLMN list to complete the information.
     // Read the SIM file EF SPDI ('6FCD')
-    // Set parameters for UICC_APPL_CMD_REQ message
-    TUiccReadTransparent params;
-    params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-    params.trId = ETrIdReadServiceProviderDisplayInfo;
-    // Read all the data
-    params.dataAmount = 0;
-    params.dataOffset = 0;
-    params.fileId = KElemFileServiceProviderDisplayInfo;
-    params.fileIdSfi = 0x1B;
-    params.serviceType = UICC_APPL_READ_TRANSPARENT;
-
-    // File id path
-    params.filePath.Append( KMasterFileId >> 8 );
-    params.filePath.Append( KMasterFileId );
-    params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-
-    return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+    return UiccApplCmdReq(
+        ETrIdReadServiceProviderDisplayInfo,
+        UICC_APPL_READ_TRANSPARENT,
+        0,
+        0,
+        KElemFileServiceProviderDisplayInfo,
+        0x1B );
     }
 
 // --------------------------------------------------------------------------
@@ -1320,7 +1252,6 @@
         TInt lengthOfLengthInBytes( 0 );
 
         // Display info is coded in TLV format in USIM.
-        // Check the tag
         if ( 0xA3 == aFileData[i] )
             {
             i++;
@@ -1333,7 +1264,6 @@
                 }
             i++;
 
-            // Check the tag
             if ( 0x80 == aFileData[i] )
                 {
                 // Check how many bytes are used for length field
@@ -1377,18 +1307,15 @@
     // Copy PLMNs and complete
     if ( KErrNone == aStatus )
         {
-        // Number of PLMNs cannot exceed 170
         if ( 170 < numOfPlmns )
             {
             numOfPlmns = 170;
             }
 
-        // At first append number of PLMNs and second display condition
         TUint16 word( static_cast<TUint16>(
                 numOfPlmns << 8 | iSecondDisplayCondition ) );
         iServiceProviderName.iPLMNField.Append( word );
 
-        // Copy PLMNs to 16 bit buffer
         for ( TUint8 j( 0 ); j < lengthOfDataInBytes / 2; j++, i += 2 )
             {
             // PLMN entries are copied to 16-bit buffer as follows:
@@ -1398,10 +1325,9 @@
                 ( aFileData[i+1] << 8 ) | aFileData[i] );
             iServiceProviderName.iPLMNField.Append( word );
             }
-        // Last word is added
+
         iServiceProviderName.iPLMNField.Append( ( 0xFF << 8 ) | aFileData[i] );
 
-        // Complete SPN info
         CMmDataPackage dataPackage;
         dataPackage.PackData( &iServiceProviderName );
         iMessageRouter->Complete(
@@ -1409,14 +1335,13 @@
             &dataPackage,
             KErrNone );
         }
-    else // Complete error without data
+    else
         {
         iMessageRouter->Complete(
              EMobilePhoneGetServiceProviderName,
              KErrNotFound );
         }
 
-    // Reset iServiceProviderName for next time.
     iServiceProviderName.iSPName.Zero();
     iServiceProviderName.iPLMNField.Zero();
     }
@@ -1485,7 +1410,7 @@
     // If NTSY or CTSY cacheing is ongoing, message is not sent
     if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles )
         {
-        if ( iRefreshError ) // Some cacheing was failed, set error status
+        if ( iRefreshError ) // Some cacheing was failed
             {
             aStatus = UICC_REFRESH_NOT_OK;
             }
@@ -1508,8 +1433,8 @@
         ret = iPhoNetSender->Send( isiMsg.Complete() );
         iRefreshError = EFalse;
 
-        // When NTSY/CTSY refresh was performed, set iCompleteRefresfDone flag
-        // that IPC EMmTsySimRefreshDoneIPC will be completed to CTSY
+        // When NTSY/CTSY refresh was performed
+        // IPC EMmTsySimRefreshDoneIPC will be completed to CTSY
         if ( UICC_REFRESH_DONE == aStatus || UICC_REFRESH_NOT_OK == aStatus )
             {
             iCompleteRefresfDone = ETrue;
@@ -1597,7 +1522,6 @@
                     EMobilePhoneNotifyAPNListChanged,
                     KErrNone );
 
-                // Clear and delete cache
                 if ( iAPNList )
                     {
                     iAPNList->Reset();
@@ -1703,7 +1627,6 @@
         if ( !( refreshFiles & KCacheAdn )
             && !( refreshFiles & KCacheFdn ) )
             {
-            // Creating buffer for phonebook's name
             TName phonebookName;
             phonebookName.Copy( KInternalPhoneBookType );
 
@@ -1726,7 +1649,6 @@
 TFLOGSTRING2("TSY: CMmPhoneMessHandler::HandleUiccRefresh: CommonTSY Refresh Pending = %d", iCommonTSYRefreshPending );
 OstTrace1( TRACE_NORMAL, DUP15_CMMPHONEMESSHANDLER_HANDLEUICCREFRESH, "CMmPhoneMessHandler::HandleUiccRefresh;iCommonTSYRefreshPending=%d", iCommonTSYRefreshPending );
 
-        // Packed parameter: List of files needed to be refreshed.
         CMmDataPackage dataPackage;
         dataPackage.PackData( &refreshFiles );
 
@@ -1737,8 +1659,6 @@
             KErrNone );
         }
 
-    // Send refresh done to UICC only if there's no CTSY/NTSY
-    // caching ongoing.
     if ( ! iCommonTSYRefreshPending && ! iInternalRefreshFiles )
         {
         UiccRefreshReq( UICC_REFRESH_DONE );
@@ -1921,22 +1841,13 @@
     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
         {
-        // Set parameters for UICC_APPL_CMD_REQ message
-        TUiccReadTransparent params;
-        params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-        params.trId = ETrIdAclStatusReadEfEst;
-        params.dataAmount = 0;
-        params.dataOffset = 0;
-        params.fileId = KElemEst;
-        params.fileIdSfi = 0x05;
-        params.serviceType = UICC_APPL_READ_TRANSPARENT;
-
-        // File id path
-        params.filePath.Append( KMasterFileId >> 8 );
-        params.filePath.Append( KMasterFileId );
-        params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-
-        ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+        ret = UiccApplCmdReq(
+            ETrIdAclStatusReadEfEst,
+            UICC_APPL_READ_TRANSPARENT,
+            0,
+            0,
+            KElemEst,
+            5 );
         }
     else
         {
@@ -1963,7 +1874,7 @@
     TInt ret( KErrNone );
     RMobilePhone::TAPNControlListServiceStatus aclStatus;
 
-    if( UICC_STATUS_OK == aStatus )
+    if( ( UICC_STATUS_OK == aStatus ) && ( 0 < aFileData.Length() ) )
         {
         TUint8 aclState( aFileData[0] & KAclStateMask );
         if( aclState )
@@ -1982,7 +1893,6 @@
         ret = KErrAccessDenied;
         }
 
-    // complete with packed parameter
     CMmDataPackage dataPackage;
 
     if( KErrNone == ret )
@@ -1990,7 +1900,7 @@
         dataPackage.PackData( &aclStatus );
         }
 
-    iACLIsProgress = EFalse; //set ACL flag
+    iACLIsProgress = EFalse;
     iMessageRouter->Complete(
         EMobilePhoneGetAPNControlListServiceStatus,
         &dataPackage,
@@ -2011,40 +1921,42 @@
 
     TInt ret( KErrNone );
     TBool completeNeeded( ETrue );
+    TUint8 aclState( 0 );
 
-    if( UICC_STATUS_OK == aStatus )
+    if ( 0 < aFileData.Length() )
         {
-        TUint8 aclState( aFileData[0] );
-        if( aclState & KAclStateMask )
+        aclState = aFileData[0];
+        }
+
+    if ( ( UICC_STATUS_OK == aStatus ) && ( aclState & KAclStateMask ) )
+        {
+        if ( RMobilePhone::EAPNControlListServiceDisabled == iAclStatus )
             {
-            if( RMobilePhone::EAPNControlListServiceDisabled == iAclStatus )
-                {
-                // ACL state is enabled and we need to set it to disabled .
-                // So EFest needs to be updated
-                completeNeeded = EFalse;
-                UiccSetAclStatusWriteEfEstReq( aclState );
-                }
-            else
-                {
-                // ACL status already correct, let's complete
-TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete");
-OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" );
-                }
+            // ACL state is enabled and we need to set it to disabled.
+            // So EFest needs to be updated
+            completeNeeded = EFalse;
+            UiccSetAclStatusWriteEfEstReq( aclState );
             }
         else
             {
-            if( RMobilePhone::EAPNControlListServiceEnabled == iAclStatus )
-                {
-                // EFest needs to be updated
-                completeNeeded = EFalse;
-                UiccSetAclStatusWriteEfEstReq( aclState );
-                }
-            else
-                {
-                // ACL status already correct, let's complete
+            // ACL status already correct, let's complete
+TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete");
+OstTrace0( TRACE_NORMAL, DUP1_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" );
+            }
+        }
+    else if ( ( UICC_STATUS_OK == aStatus ) && ( ! aclState & KAclStateMask ) )
+        {
+        if ( RMobilePhone::EAPNControlListServiceEnabled == iAclStatus )
+            {
+            // EFest needs to be updated
+            completeNeeded = EFalse;
+            UiccSetAclStatusWriteEfEstReq( aclState );
+            }
+        else
+            {
+            // ACL status already correct, let's complete
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete");
 OstTrace0( TRACE_NORMAL, DUP2_CMMPHONEMESSHANDLER_UICCSETACLSTATUSREADEFESTRESP, "CMmPhoneMessHandler::UiccSetAclStatusReadEfEstResp: ACL status already correct, let's complete" );
-                }
             }
         }
     else
@@ -2057,8 +1969,7 @@
 
     if( completeNeeded )
         {
-        // set flag and complete
-        iACLIsProgress = EFalse; //set ACL flag
+        iACLIsProgress = EFalse;
         iMessageRouter->Complete(
             EMobilePhoneSetAPNControlListServiceStatus,
             ret );
@@ -2070,7 +1981,7 @@
 // Writes ACL status to EFest
 // ----------------------------------------------------------------------------
 //
-TInt CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq(  TUint8 aOldAclState )
+TInt CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq( TUint8 aOldAclState )
     {
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCSETACLSTATUSWRITEEFESTREQ, "CMmPhoneMessHandler::UiccSetAclStatusWriteEfEstReq" );
@@ -2093,21 +2004,16 @@
     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
         {
-        TUiccWriteTransparent params;
-        params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-        params.trId = ETrIdAclStatusWriteEfEst;
-        params.dataOffset = 0;
-        params.dataAmount = 1; // only one byte is update
-        params.fileId = KElemEst;
-        params.fileIdSfi = 0x05;
-        params.serviceType = UICC_APPL_UPDATE_TRANSPARENT;
-        // File id path
-        params.filePath.Append( KMasterFileId >> 8 );
-        params.filePath.Append( KMasterFileId );
-        params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-        params.fileData.Append( newState );
-
-        ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+        TBuf8<KAclStatusLength> fileData;
+        fileData.Append( newState );
+        ret = UiccApplCmdReq(
+            ETrIdAclStatusWriteEfEst,
+            UICC_APPL_UPDATE_TRANSPARENT,
+            0,
+            0,
+            KElemEst,
+            5,
+            fileData );
         }
     else
         {
@@ -2169,22 +2075,13 @@
     if( UICC_CARD_TYPE_UICC == iMmUiccMessHandler->GetCardType() &&
         iMmUiccMessHandler->GetServiceStatus( KServiceAcl ) )
         {
-        // Set parameters for UICC_APPL_CMD_REQ message
-        TUiccReadTransparent params;
-        params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-        params.trId = ETrIdAclReadEfAcl;
-        params.dataAmount = 0;
-        params.dataOffset = 0;
-        params.fileId = KElemFileAcl;
-        params.fileIdSfi = UICC_SFI_NOT_PRESENT;
-        params.serviceType = UICC_APPL_READ_TRANSPARENT;
-
-        // File id path
-        params.filePath.Append( KMasterFileId >> 8 );
-        params.filePath.Append( KMasterFileId );
-        params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-
-        ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+        ret = UiccApplCmdReq(
+            ETrIdAclReadEfAcl,
+            UICC_APPL_READ_TRANSPARENT,
+            0,
+            0,
+            KElemFileAcl,
+            UICC_SFI_NOT_PRESENT );
         }
     else
         {
@@ -2209,7 +2106,8 @@
 TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccReadAclResp");
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCREADACLRESP, "CMmPhoneMessHandler::UiccReadAclResp" );
     TInt ret( KErrNone );
-    if( UICC_STATUS_OK == aStatus )
+    if ( ( UICC_STATUS_OK == aStatus ) &&
+        ( KApnDataIndex < aFileData.Length() ) )
         {
         if( iAPNList )
             {
@@ -2281,13 +2179,11 @@
 TFLOGSTRING2("TSY: CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries);
 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_DECODEACL, "CMmPhoneMessHandler::DecodeACL. Number of total entries: %d", aTotalEntries );
 
-    // allocate new array, 1 is granularity
     CDesC8ArrayFlat* apnList = new( ELeave ) CDesC8ArrayFlat( 1 );
     CleanupStack::PushL( apnList );
 
     TInt offset( 0 );
 
-    //check length before using
     if ( 0 < aTlv.Length() )
         {
         // decode TLV entries to CDesC8ArrayFlat
@@ -2323,12 +2219,10 @@
 TFLOGSTRING2("TSY: CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d",indexCount);
 OstTrace1( TRACE_NORMAL, CMMPHONEMESSHANDLER_COMPLETEENUMERATEAPNENTRIES, "CMmPhoneMessHandler::CompleteEnumerateAPNEntries. Number of APN's: %d", indexCount );
 
-    //package index of TLV's to the client
     CMmDataPackage dataPackage;
     dataPackage.PackData( &indexCount );
 
-    // set flag and complete
-    iACLIsProgress = EFalse; //set ACL flag
+    iACLIsProgress = EFalse;
     iMessageRouter->Complete(
         EMobilePhoneEnumerateAPNEntries,
         &dataPackage,
@@ -2349,7 +2243,6 @@
     RMobilePhone::TAPNEntryV3 aclEntry;
     TInt err( KErrNone );
 
-    //check if index is valid or not.
     if ( iAPNList->MdcaCount() <= aIndex )
         {
         err = KErrOverflow;
@@ -2363,8 +2256,7 @@
 
     dataPackage.PackData( &aclEntry );
 
-    // set flag and complete
-    iACLIsProgress = EFalse; //set ACL flag
+    iACLIsProgress = EFalse;
     iMessageRouter->Complete( EMobilePhoneGetAPNname, &dataPackage, err );
     }
 
@@ -2379,16 +2271,12 @@
 OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCDELETEAPNENTRY, "CMmPhoneMessHandler::UiccDeleteApnEntry" );
 
     TInt ret;
-    //check if aIndex is valid or not.
     if ( iAPNList->MdcaCount() <= aIndex )
         {
-        //error occurs
         ret = KErrOverflow;
         }
     else
         {
-        //data is valid
-        //delete data from cache
         iAPNList->Delete( aIndex );
         iAPNList->Compress();
 
@@ -2416,30 +2304,25 @@
         TInt dataLen( ACLLength( iAPNList ) );
         TUint8 apnCount( iAPNList->MdcaCount() );
 
-        TUiccWriteTransparent params;
-        params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
-        params.trId = ETrIdAclWriteEfAcl;
-        params.dataOffset = 0;
-        params.dataAmount = dataLen;
-        params.fileId = KElemFileAcl;
-        params.fileIdSfi = UICC_SFI_NOT_PRESENT;
-        params.serviceType = UICC_APPL_UPDATE_TRANSPARENT;
-        // File id path
-        params.filePath.Append( KMasterFileId >> 8 );
-        params.filePath.Append( KMasterFileId );
-        params.filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
-
-        params.fileData.Append( apnCount );
+        TBuf8<KFileDataLength> fileData;
+        fileData.Append( apnCount );
         for ( TInt i = 0; i < apnCount; i++ )
             {
             TPtrC8 apn = iAPNList->MdcaPoint( i );
             // spec: The tag value of the APN-TLV shall be 'DD'
-            params.fileData.Append( 0xdd );
-            params.fileData.Append( apn.Length() );
-            params.fileData.Append( apn );
+            fileData.Append( 0xdd );
+            fileData.Append( apn.Length() );
+            fileData.Append( apn );
             }
 
-        ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+        ret = UiccApplCmdReq(
+            ETrIdAclWriteEfAcl,
+            UICC_APPL_UPDATE_TRANSPARENT,
+            0,
+            0,
+            KElemFileAcl,
+            UICC_SFI_NOT_PRESENT,
+            fileData );
         }
     else
         {
@@ -2470,7 +2353,7 @@
         ret = KErrAccessDenied;
         }
 
-    iACLIsProgress = EFalse; //set ACL flag
+    iACLIsProgress = EFalse;
     iMessageRouter->Complete(
         iOngoingAclIpc,
         ret );
@@ -2488,10 +2371,13 @@
 
     TUint16 length( 0 );
 
-    for ( TInt i = 0; i < aApnList->MdcaCount(); i++ )
+    if ( aApnList )
         {
-        TPtrC8 apn = aApnList->MdcaPoint( i );
-        length += apn.Length() + 2;
+        for ( TInt i = 0; i < aApnList->MdcaCount(); i++ )
+            {
+            TPtrC8 apn = aApnList->MdcaPoint( i );
+            length += apn.Length() + 2;
+            }
         }
 
     // result is incremented by one because of EFacl contains number of tlv objects
@@ -2504,4 +2390,67 @@
     return length;
     }
 
+
+// --------------------------------------------------------------------------
+// CMmPhoneMessHandler::UiccApplCmdReq
+//
+// --------------------------------------------------------------------------
+//
+TInt CMmPhoneMessHandler::UiccApplCmdReq(
+    const TUiccTrId aTrId,
+    const TUint8 aServiceType,
+    const TUint16 aDataAmount,
+    const TUint16 aDataOffset,
+    const TUint16 aFileId,
+    const TUint8 aFileIdSfi,
+    const TDesC8& aFileData )
+    {
+TFLOGSTRING("TSY: CMmPhoneMessHandler::UiccApplCmdReq");
+OstTrace0( TRACE_NORMAL, CMMPHONEMESSHANDLER_UICCAPPLCMDREQ, "CMmPhoneMessHandler::UiccApplCmdReq" );
+
+    TInt ret( KErrNone );
+    TBuf8<KFilePathLength> filePath;
+    filePath.Append( KMasterFileId >> 8 );
+    filePath.Append( KMasterFileId );
+    if ( KElemFileDynFlagsOrange == aFileId )
+        {
+        filePath.Append( KOrangeDedicatedFile >> 8 );
+        filePath.Append( KOrangeDedicatedFile );
+        }
+    else
+        {
+        filePath.Append( iMmUiccMessHandler->GetApplicationFileId() );
+        }
+
+    if ( UICC_APPL_READ_TRANSPARENT == aServiceType )
+        {
+        TUiccReadTransparent params;
+        params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
+        params.trId = aTrId;
+        params.dataAmount = aDataAmount;
+        params.dataOffset = aDataOffset;
+        params.fileId = aFileId;
+        params.fileIdSfi = aFileIdSfi;
+        params.serviceType = aServiceType;
+        params.filePath.Append( filePath );
+        ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+        }
+    else if ( UICC_APPL_UPDATE_TRANSPARENT == aServiceType )
+        {
+        TUiccWriteTransparent params;
+        params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
+        params.trId = aTrId;
+        params.dataAmount = aDataAmount;
+        params.dataOffset = aDataOffset;
+        params.fileId = aFileId;
+        params.fileIdSfi = aFileIdSfi;
+        params.serviceType = aServiceType;
+        params.fileData.Append( aFileData );
+        params.filePath.Append( filePath );
+        ret = iMmUiccMessHandler->CreateUiccApplCmdReq( params );
+        }
+    // No else
+    return ret;
+    }
+
 // End of file