telephonyserverplugins/simatktsy/src/csatdatadownloadtsy.cpp
branchRCL_3
changeset 65 630d2f34d719
parent 0 3553901f7fa8
child 66 07a122eea281
equal deleted inserted replaced
61:17af172ffa5f 65:630d2f34d719
     1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    16 // DataDownload-related functionality of Sat Tsy
    16 // DataDownload-related functionality of Sat Tsy
    17 // Version     : 1.0
    17 // Version     : 1.0
    18 //
    18 //
    19 
    19 
    20 
    20 
       
    21 
       
    22 
       
    23 #include "OstTraceDefinitions.h"
       
    24 #ifdef OST_TRACE_COMPILER_IN_USE
       
    25 #include "csatdatadownloadtsyTraces.h"
       
    26 #endif
    21 
    27 
    22 #include <satcs.h>                  // Etel SAT IPC definitions
    28 #include <satcs.h>                  // Etel SAT IPC definitions
    23 #include <etelmm.h> 				// Etel MM Definitions
    29 #include <etelmm.h> 				// Etel MM Definitions
    24 #include "CSatDataPackage.h"        // Parameter packing 
    30 #include "CSatDataPackage.h"        // Parameter packing 
    25 #include "CSatDataDownloadTsy.h"    // Class header
    31 #include "CSatDataDownloadTsy.h"    // Class header
    26 #include "CSatTsy.h"                // Sat Tsy class
    32 #include "CSatTsy.h"                // Sat Tsy class
    27 #include "TSatUtility.h"            // Utilities
    33 #include "TSatUtility.h"            // Utilities
    28 #include "cmmmessagemanagerbase.h"  // Message manager class for forwarding req.
    34 #include "cmmmessagemanagerbase.h"  // Message manager class for forwarding req.
    29 #include "TfLogger.h"               // For TFLOGSTRING
       
    30 #include "CBerTlv.h"                // Ber Tlv
    35 #include "CBerTlv.h"                // Ber Tlv
    31 #include "TTlv.h"					// TTlv class
    36 #include "TTlv.h"					// TTlv class
    32 #include "MSatTsy_IPCDefs.h"        // Sat Tsy internal request types
    37 #include "MSatTsy_IPCDefs.h"        // Sat Tsy internal request types
    33 
    38 
    34 // -----------------------------------------------------------------------------
    39 // -----------------------------------------------------------------------------
    39 CSatDataDownloadTsy* CSatDataDownloadTsy::NewL
    44 CSatDataDownloadTsy* CSatDataDownloadTsy::NewL
    40         (    
    45         (    
    41         CSatTsy* aSatTsy  
    46         CSatTsy* aSatTsy  
    42         )
    47         )
    43     {
    48     {
    44     TFLOGSTRING( "CSAT: CSatDataDownloadTsy::NewL" );
    49     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_NEWL_1,  "CSAT: CSatDataDownloadTsy::NewL" );
    45     CSatDataDownloadTsy* const satDataDownloadTsy = 
    50     CSatDataDownloadTsy* const satDataDownloadTsy = 
    46         new ( ELeave ) CSatDataDownloadTsy();
    51         new ( ELeave ) CSatDataDownloadTsy();
    47     CleanupStack::PushL( satDataDownloadTsy );
    52     CleanupStack::PushL( satDataDownloadTsy );
    48     satDataDownloadTsy->iSatTsy = aSatTsy;
    53     satDataDownloadTsy->iSatTsy = aSatTsy;
    49     satDataDownloadTsy->ConstructL();
    54     satDataDownloadTsy->ConstructL();
    50     CleanupStack::Pop( satDataDownloadTsy );
    55     CleanupStack::Pop( satDataDownloadTsy );
    51     TFLOGSTRING( "CSAT: CSatDataDownloadTsy::NewL, end of method" );
    56     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_NEWL_2,  "CSAT: CSatDataDownloadTsy::NewL, end of method" );
    52     return satDataDownloadTsy; 
    57     return satDataDownloadTsy; 
    53     }
    58     }
    54 
    59 
    55 // -----------------------------------------------------------------------------
    60 // -----------------------------------------------------------------------------
    56 // CSatDataDownloadTsy::~CSatDataDownloadTsy
    61 // CSatDataDownloadTsy::~CSatDataDownloadTsy
    60 CSatDataDownloadTsy::~CSatDataDownloadTsy
    65 CSatDataDownloadTsy::~CSatDataDownloadTsy
    61         (    
    66         (    
    62         void   
    67         void   
    63         )
    68         )
    64     {
    69     {
    65     TFLOGSTRING( "CSAT: CSatDataDownloadTsy::~CSatDataDownloadTsy" );
    70     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_DTOR_1,  "CSAT: CSatDataDownloadTsy::~CSatDataDownloadTsy" );
    66     // Unregister
    71     // Unregister
    67     iSatTsy->MessageManager()->RegisterTsyObject(
    72     iSatTsy->MessageManager()->RegisterTsyObject(
    68 		CMmMessageManagerBase::ESatDataDownloadTsyObjType, NULL );
    73 		CMmMessageManagerBase::ESatDataDownloadTsyObjType, NULL );
    69     }
    74     }
    70 
    75 
    89 void CSatDataDownloadTsy::ConstructL
    94 void CSatDataDownloadTsy::ConstructL
    90         (    
    95         (    
    91         void
    96         void
    92         )
    97         )
    93     {
    98     {
    94     TFLOGSTRING( "CSAT: CSatDataDownloadTsy::ConstructL" );
    99     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CONSTRUCTL_1,  "CSAT: CSatDataDownloadTsy::ConstructL" );
    95     // Register
   100     // Register
    96     iSatTsy->MessageManager()->RegisterTsyObject(
   101     iSatTsy->MessageManager()->RegisterTsyObject(
    97 		CMmMessageManagerBase::ESatDataDownloadTsyObjType, this );
   102 		CMmMessageManagerBase::ESatDataDownloadTsyObjType, this );
    98 	// Initialize as not supported
   103 	// Initialize as not supported
    99 	iIsSmsPpDdlSupported = EFalse;
   104 	iIsSmsPpDdlSupported = EFalse;
   108 void CSatDataDownloadTsy::CompleteCellBroadcastDdlL
   113 void CSatDataDownloadTsy::CompleteCellBroadcastDdlL
   109          (
   114          (
   110          const CSatDataPackage* aDataPackage
   115          const CSatDataPackage* aDataPackage
   111          )
   116          )
   112     {
   117     {
   113     TFLOGSTRING( "CSAT:CSatDataDownloadTsy::CompleteCellBroadcastDdlL" );
   118     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_COMPLETECELLBROADCASTDDLL_1,  "CSAT:CSatDataDownloadTsy::CompleteCellBroadcastDdlL" );
   114 
   119 
   115     TBuf8<KCbsMsgMaxLength> aPdu;
   120     TBuf8<KCbsMsgMaxLength> aPdu;
   116     aDataPackage->UnPackData( aPdu );     
   121     aDataPackage->UnPackData( aPdu );     
   117     TTlv envelope;
   122     TTlv envelope;
   118     // Tag
   123     // Tag
   150 void CSatDataDownloadTsy::CompleteSmsPpDdlL
   155 void CSatDataDownloadTsy::CompleteSmsPpDdlL
   151         (
   156         (
   152         const CSatDataPackage* aDataPackage
   157         const CSatDataPackage* aDataPackage
   153         )
   158         )
   154     {  
   159     {  
   155     TFLOGSTRING( "CSAT:CSatDataDownloadTsy::CompleteSmsPpDdlL" );
   160     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_COMPLETESMSPPDDLL_1,  "CSAT:CSatDataDownloadTsy::CompleteSmsPpDdlL" );
   156     TBuf8<KAddrMaxLength> smsScAddress;
   161     TBuf8<KAddrMaxLength> smsScAddress;
   157     TBuf8<RMobileSmsMessaging::KGsmTpduSize> smsTpdu;
   162     TBuf8<RMobileSmsMessaging::KGsmTpduSize> smsTpdu;
   158     
   163     
   159     // Unpack data
   164     // Unpack data
   160     aDataPackage->UnPackData( smsScAddress, smsTpdu );
   165     aDataPackage->UnPackData( smsScAddress, smsTpdu );
   170         // Check if the SMS should be saved to EFsms (see method descr.)
   175         // Check if the SMS should be saved to EFsms (see method descr.)
   171         if ( KErrNone == ParseSmsTpdu( smsTpdu ) &&
   176         if ( KErrNone == ParseSmsTpdu( smsTpdu ) &&
   172              KSmsTpduProtcolIdUSimDdl == iSmsTpdu.iProtocolId && 
   177              KSmsTpduProtcolIdUSimDdl == iSmsTpdu.iProtocolId && 
   173             ( !( iSmsTpdu.iDcs & 0x01 ) ) && ( iSmsTpdu.iDcs & 0x02 ) )
   178             ( !( iSmsTpdu.iDcs & 0x01 ) ) && ( iSmsTpdu.iDcs & 0x02 ) )
   174             {
   179             {
   175             TFLOGSTRING( "CSAT:CSatDataDownloadTsy::CompleteSmsPpDdlL,\
   180             OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_COMPLETESMSPPDDLL_2,  "CSAT:CSatDataDownloadTsy::CompleteSmsPpDdlL, SMS PP DDL is not supported, Store SMS to EFsms" );
   176                 SMS PP DDL is not supported, Store SMS to EFsms" ); 
       
   177             CreateEntryForSavingSmsL( smsScAddress, smsTpdu );
   181             CreateEntryForSavingSmsL( smsScAddress, smsTpdu );
   178             }
   182             }
   179         }
   183         }
   180     }
   184     }
   181     
   185     
   189         (
   193         (
   190         const TDesC8& aSmsScAddress,
   194         const TDesC8& aSmsScAddress,
   191         const TDesC8& aSmsTpdu
   195         const TDesC8& aSmsTpdu
   192         )
   196         )
   193     {  
   197     {  
   194     TFLOGSTRING2( "CSAT:CSatDataDownloadTsy::CreateEntryForSavingSms\
   198     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CREATEENTRYFORSAVINGSMSL_1,  "CSAT:CSatDataDownloadTsy::CreateEntryForSavingSms SC Addr. length: %d", aSmsScAddress.Length() );
   195         SC Addr. length: %d", aSmsScAddress.Length() );
       
   196     TInt offset = 0;
   199     TInt offset = 0;
   197     
   200     
   198     // Check that the SC address length contains the length in
   201     // Check that the SC address length contains the length in
   199     // addition to the address.
   202     // addition to the address.
   200     if ( ( aSmsScAddress[offset] + 1 ) == aSmsScAddress.Length() )
   203     if ( ( aSmsScAddress[offset] + 1 ) == aSmsScAddress.Length() )
   226             }
   229             }
   227 
   230 
   228         // Copy the Service Centre address and TPDU data
   231         // Copy the Service Centre address and TPDU data
   229         smsEntry.iServiceCentre.iTelNumber.Copy( scAddress16 );
   232         smsEntry.iServiceCentre.iTelNumber.Copy( scAddress16 );
   230                 
   233                 
   231         TFLOGSTRING2("CSAT:CSatDataDownloadTsy::CreateEntryForSavingSms,\
   234         OstTraceDefExt1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CREATEENTRYFORSAVINGSMSL_2, "CSAT:CSatDataDownloadTsy::CreateEntryForSavingSms, iTelNumber: %S", smsEntry.iServiceCentre.iTelNumber );
   232             iTelNumber: %S", &smsEntry.iServiceCentre.iTelNumber );
       
   233             
   235             
   234         smsEntry.iMsgData.Copy( aSmsTpdu ); 
   236         smsEntry.iMsgData.Copy( aSmsTpdu ); 
   235         
   237         
   236         // We set the index to point -1, since it means we use the 1st free 
   238         // We set the index to point -1, since it means we use the 1st free 
   237         // slot. See Etel MM API Specification, 8.1.4 Write Entry. 
   239         // slot. See Etel MM API Specification, 8.1.4 Write Entry. 
   258 void CSatDataDownloadTsy::CreateSmsDeliverReportL
   260 void CSatDataDownloadTsy::CreateSmsDeliverReportL
   259         (
   261         (
   260         TInt aResult
   262         TInt aResult
   261         )  
   263         )  
   262     {
   264     {
   263     TFLOGSTRING("CSAT: CSatDataDownloadTsy::CreateSmsDeliverReportL");
   265     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CREATESMSDELIVERREPORTL_1, "CSAT: CSatDataDownloadTsy::CreateSmsDeliverReportL");
   264     TBuf8<KTpduMaxSize> reportData;
   266     TBuf8<KTpduMaxSize> reportData;
   265        
   267        
   266     // Get User Data length
   268     // Get User Data length
   267     TUint8 userDataLength = iSmsTpdu.iUserData.Length();
   269     TUint8 userDataLength = iSmsTpdu.iUserData.Length();
   268     
   270     
   269     // Check that SMS TPDU data exists by checking the last mandatory item
   271     // Check that SMS TPDU data exists by checking the last mandatory item
   270     if ( KSmsTpduByteUnknownOrReserved != iSmsTpdu.iDcs )
   272     if ( KSmsTpduByteUnknownOrReserved != iSmsTpdu.iDcs )
   271         {
   273         {
   272         TFLOGSTRING("CSAT: CSatDataDownloadTsy::CreateSmsDeliverReportL,\
   274         OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CREATESMSDELIVERREPORTL_2, "CSAT: CSatDataDownloadTsy::CreateSmsDeliverReportL, SMS TPDU OK");
   273             SMS TPDU OK");
       
   274         reportData.Zero();
   275         reportData.Zero();
   275         reportData.Append( iSmsTpdu.iParameters );   // 1st byte -> parameters
   276         reportData.Append( iSmsTpdu.iParameters );   // 1st byte -> parameters
   276         reportData.Append( KAllOptParamsPresent );   // TP-Parameter-Indicator
   277         reportData.Append( KAllOptParamsPresent );   // TP-Parameter-Indicator
   277         reportData.Append( iSmsTpdu.iProtocolId );   // TP-Protocol-Identifier
   278         reportData.Append( iSmsTpdu.iProtocolId );   // TP-Protocol-Identifier
   278         reportData.Append( iSmsTpdu.iDcs );          // TP-Data-Coding-Scheme
   279         reportData.Append( iSmsTpdu.iDcs );          // TP-Data-Coding-Scheme
   287         // If saving went OK it means that RP-ACK must to be sent and data is
   288         // If saving went OK it means that RP-ACK must to be sent and data is
   288         // ready, otherwise RP-ERROR must to be sent, which means that TP Failure 
   289         // ready, otherwise RP-ERROR must to be sent, which means that TP Failure 
   289         // Cause must be inserted after the parameters
   290         // Cause must be inserted after the parameters
   290         if ( KErrNone != aResult )
   291         if ( KErrNone != aResult )
   291             {
   292             {
   292             TFLOGSTRING("CSAT: CSatDataDownloadTsy::CreateSmsDeliverReportL,\
   293             OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CREATESMSDELIVERREPORTL_3, "CSAT: CSatDataDownloadTsy::CreateSmsDeliverReportL, Add TP Failure Cause: KDataDownloadError");
   293                 Add TP Failure Cause: KDataDownloadError");
       
   294             TBuf8<1> failureCause;
   294             TBuf8<1> failureCause;
   295             failureCause.Zero();
   295             failureCause.Zero();
   296             failureCause.Append( KDataDownloadError );
   296             failureCause.Append( KDataDownloadError );
   297             reportData.Insert( 1, failureCause );
   297             reportData.Insert( 1, failureCause );
   298             }
   298             }
   317         (
   317         (
   318         const TDesC8& aSmsScAddress,
   318         const TDesC8& aSmsScAddress,
   319         const TDesC8& aSmsTpdu
   319         const TDesC8& aSmsTpdu
   320         )
   320         )
   321     {  
   321     {  
   322     TFLOGSTRING( "CSAT:CSatDataDownloadTsy::CreateSmsPpDdlEnvelopeL" );
   322     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CREATESMSPPDDLENVELOPEL_1,  "CSAT:CSatDataDownloadTsy::CreateSmsPpDdlEnvelopeL" );
   323     // Check that the data exists
   323     // Check that the data exists
   324     if ( aSmsScAddress.Length() && aSmsTpdu.Length() )
   324     if ( aSmsScAddress.Length() && aSmsTpdu.Length() )
   325         {
   325         {
   326         TFLOGSTRING( "CSAT:CSatDataDownloadTsy::CreateSmsPpDdlEnvelopeL,\
   326         OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_CREATESMSPPDDLENVELOPEL_2,  "CSAT:CSatDataDownloadTsy::CreateSmsPpDdlEnvelopeL, Data Ok" );
   327             Data Ok" );
       
   328         TTlv envelope;
   327         TTlv envelope;
   329  
   328  
   330         envelope.Begin( KBerTlvSmsPpDownloadTag );
   329         envelope.Begin( KBerTlvSmsPpDownloadTag );
   331         envelope.AddTag( KTlvDeviceIdentityTag );
   330         envelope.AddTag( KTlvDeviceIdentityTag );
   332         envelope.AddByte( KNetwork );
   331         envelope.AddByte( KNetwork );
   355 void CSatDataDownloadTsy::CompleteReadCbmidsL
   354 void CSatDataDownloadTsy::CompleteReadCbmidsL
   356         (
   355         (
   357         void 
   356         void 
   358         )
   357         )
   359     {
   358     {
   360     TFLOGSTRING( "CSAT: CSatDataDownloadTsy::CompleteReadCbmids" );
   359     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_COMPLETEREADCBMIDSL_1,  "CSAT: CSatDataDownloadTsy::CompleteReadCbmids" );
   361     // Convert constants and append to simFilePath
   360     // Convert constants and append to simFilePath
   362     TBuf8<KMaxFilePath> simFilePath;
   361     TBuf8<KMaxFilePath> simFilePath;
   363     // Append data
   362     // Append data
   364     simFilePath.Append( TUint8( KMasterFileCbmids >> 8 ) );
   363     simFilePath.Append( TUint8( KMasterFileCbmids >> 8 ) );
   365     //lint -e{778} Constant expression evaluates to 0 in operation 
   364     //lint -e{778} Constant expression evaluates to 0 in operation 
   388         (
   387         (
   389         const CSatDataPackage* aDataPackage 
   388         const CSatDataPackage* aDataPackage 
   390         )
   389         )
   391     {
   390     {
   392     aDataPackage->UnPackData( iIsSmsPpDdlSupported );   
   391     aDataPackage->UnPackData( iIsSmsPpDdlSupported );   
   393     TFLOGSTRING2("CSAT: CSatNotifyMoSmControlRequest::SetActivationStatus, %d",
   392     OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_SETSMSPPDDLSTATUS_1, "CSAT: CSatNotifyMoSmControlRequest::SetActivationStatus, %d",iIsSmsPpDdlSupported );
   394     	iIsSmsPpDdlSupported );     
       
   395     }  
   393     }  
   396     
   394     
   397 // -----------------------------------------------------------------------------
   395 // -----------------------------------------------------------------------------
   398 // CSatDataDownloadTsy::ParseSmsTpdu
   396 // CSatDataDownloadTsy::ParseSmsTpdu
   399 // Interprets the given TPDU data and sets the results to internal data member
   397 // Interprets the given TPDU data and sets the results to internal data member
   402 TInt CSatDataDownloadTsy::ParseSmsTpdu
   400 TInt CSatDataDownloadTsy::ParseSmsTpdu
   403         (
   401         (
   404         const TDesC8& aSmsTpdu
   402         const TDesC8& aSmsTpdu
   405         )
   403         )
   406     {
   404     {
   407     TFLOGSTRING("CSAT: CSatDataDownloadTsy::ParseSmsTpdu");
   405     OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_PARSESMSTPDU_1, "CSAT: CSatDataDownloadTsy::ParseSmsTpdu");
   408     TInt ret( KErrCorrupt );
   406     TInt ret( KErrCorrupt );
   409     
   407     
   410     // Initialize values
   408     // Initialize values
   411     iSmsTpdu.iParameters = KSmsTpduByteUnknownOrReserved;
   409     iSmsTpdu.iParameters = KSmsTpduByteUnknownOrReserved;
   412     iSmsTpdu.iProtocolId = KSmsTpduByteUnknownOrReserved;
   410     iSmsTpdu.iProtocolId = KSmsTpduByteUnknownOrReserved;
   437         TUint8 offset = KSmsTpduAddrOffset + 2 + addrLengthInBytes;
   435         TUint8 offset = KSmsTpduAddrOffset + 2 + addrLengthInBytes;
   438 
   436 
   439         // Just to be on the safe side, check that the offset is not too big
   437         // Just to be on the safe side, check that the offset is not too big
   440         if ( aSmsTpdu.Length() > ( offset + 1 + KSmsTpduSctsLength ) )
   438         if ( aSmsTpdu.Length() > ( offset + 1 + KSmsTpduSctsLength ) )
   441             {
   439             {
   442             TFLOGSTRING( "CSAT:CSatDataDownloadTsy::ParseSmsTpdu,\
   440             OstTraceDef0(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_PARSESMSTPDU_2,  "CSAT:CSatDataDownloadTsy::ParseSmsTpdu, SmsTpdu length Ok" );
   443                 SmsTpdu length Ok" );
       
   444             // Set protocol id and data coding shceme
   441             // Set protocol id and data coding shceme
   445             iSmsTpdu.iProtocolId = aSmsTpdu[offset];
   442             iSmsTpdu.iProtocolId = aSmsTpdu[offset];
   446             iSmsTpdu.iDcs = aSmsTpdu[++offset] ;
   443             iSmsTpdu.iDcs = aSmsTpdu[++offset] ;
   447             
   444             
   448             // Update offset to point the TP-UDL (skip TP-SCTS, not needed)
   445             // Update offset to point the TP-UDL (skip TP-SCTS, not needed)
   451                 
   448                 
   452             // If user data exists, add it to the end of buffer
   449             // If user data exists, add it to the end of buffer
   453             if ( tpduUserDataLength )
   450             if ( tpduUserDataLength )
   454                 {
   451                 {
   455                 iSmsTpdu.iUserData.Copy( aSmsTpdu.Mid( ++offset ) );
   452                 iSmsTpdu.iUserData.Copy( aSmsTpdu.Mid( ++offset ) );
   456                 TFLOGSTRING2( "CSAT:CSatDataDownloadTsy::ParseSmsTpdu,\
   453                 OstTraceDef1(OST_TRACE_CATEGORY_DEBUG, TRACE_INTERNALS, CSATDATADOWNLOADTSY_PARSESMSTPDU_3,  "CSAT:CSatDataDownloadTsy::ParseSmsTpdu, iUserData length: %d", iSmsTpdu.iUserData.Length() );
   457                     iUserData length: %d", iSmsTpdu.iUserData.Length() );
       
   458                 }
   454                 }
   459 
   455 
   460             ret = KErrNone;
   456             ret = KErrNone;
   461             } 
   457             } 
   462         } // TPDU reaches the minimum length  
   458         } // TPDU reaches the minimum length