adaptationlayer/tsy/nokiatsy_dll/src/cmmsmsmesshandler.cpp
changeset 9 8486d82aef45
parent 8 6295dc2169f3
equal deleted inserted replaced
8:6295dc2169f3 9:8486d82aef45
     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".
    20 //  EXTERNAL RESOURCES
    20 //  EXTERNAL RESOURCES
    21 
    21 
    22 //  Include Files
    22 //  Include Files
    23 #include <ctsy/serviceapi/mmtsy_ipcdefs.h>
    23 #include <ctsy/serviceapi/mmtsy_ipcdefs.h>
    24 #include <ctsy/pluginapi/cmmdatapackage.h>
    24 #include <ctsy/pluginapi/cmmdatapackage.h>
    25 // Temporarily removed for Bridge camp!
    25 #include <ctsy/serviceapi/ctsysatmessagingbase.h>
    26 //#include <ctsy/serviceapi/ctsysatmessagingbase.h>
       
    27 #include <etelsat.h>  // for sat mo sm control error values
    26 #include <etelsat.h>  // for sat mo sm control error values
    28 #include <ctsy/serviceapi/gsmerror.h> // for sat mo sm control error values
    27 #include <ctsy/serviceapi/gsmerror.h> // for sat mo sm control error values
    29 #include <etelmmerr.h>
    28 #include <etelmmerr.h>
    30 #include <tisi.h>
    29 #include <tisi.h>
    31 #include <smsisi.h>
    30 #include <smsisi.h>
    37 #include "cmmstaticutility.h"
    36 #include "cmmstaticutility.h"
    38 #include "cmmmessagerouter.h"
    37 #include "cmmmessagerouter.h"
    39 #include "cmmphonemesshandler.h"
    38 #include "cmmphonemesshandler.h"
    40 #include "tsylogger.h"
    39 #include "tsylogger.h"
    41 #include "cmmphonetsender.h"
    40 #include "cmmphonetsender.h"
       
    41 
    42 #include "OstTraceDefinitions.h"
    42 #include "OstTraceDefinitions.h"
    43 #ifdef OST_TRACE_COMPILER_IN_USE
    43 #ifdef OST_TRACE_COMPILER_IN_USE
    44 #include "cmmsmsmesshandlerTraces.h"
    44 #include "cmmsmsmesshandlerTraces.h"
    45 #endif
    45 #endif
    46 
    46 
    92 const TUint8 KSmsParamsProtocolIdOffset( 25 );
    92 const TUint8 KSmsParamsProtocolIdOffset( 25 );
    93 const TUint8 KSmsParamsDcsOffset( 26 );
    93 const TUint8 KSmsParamsDcsOffset( 26 );
    94 const TUint8 KSmsParamsValidityPeriodOffset( 27 );
    94 const TUint8 KSmsParamsValidityPeriodOffset( 27 );
    95 const TUint8 KSizeOfAlphaTag( 62 );
    95 const TUint8 KSizeOfAlphaTag( 62 );
    96 
    96 
       
    97 const TUint8 KShift8( 8 );
       
    98 const TUint16 KSmsResIdMoSmInitDisable( 0 ); // SMS_RES_ID_MO_SM_INIT_DISABLE
       
    99 
    97 //  MODULE DATA STRUCTURES
   100 //  MODULE DATA STRUCTURES
    98 
   101 
    99 //  Local Data Structures
   102 //  Local Data Structures
   100 //  none
   103 //  none
   101 
   104 
   116 // -----------------------------------------------------------------------------
   119 // -----------------------------------------------------------------------------
   117 //
   120 //
   118 CMmSmsMessHandler::CMmSmsMessHandler()
   121 CMmSmsMessHandler::CMmSmsMessHandler()
   119     {
   122     {
   120 TFLOGSTRING("TSY: CMmSmsMessHandler::CMmSmsMessHandler: constructor.");
   123 TFLOGSTRING("TSY: CMmSmsMessHandler::CMmSmsMessHandler: constructor.");
   121 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_CMMSMSMESSHANDLER, "CMmSmsMessHandler::CMmSmsMessHandler" );
   124 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_CMMSMSMESSHANDLER_TD, "CMmSmsMessHandler::CMmSmsMessHandler" );
   122     }
   125     }
   123 
   126 
   124 // -----------------------------------------------------------------------------
   127 // -----------------------------------------------------------------------------
   125 // CMmSmsMessHandler::CMmSmsMessHandler
   128 // CMmSmsMessHandler::CMmSmsMessHandler
   126 // C++ default destructor
   129 // C++ default destructor
   127 // -----------------------------------------------------------------------------
   130 // -----------------------------------------------------------------------------
   128 //
   131 //
   129 CMmSmsMessHandler::~CMmSmsMessHandler()
   132 CMmSmsMessHandler::~CMmSmsMessHandler()
   130     {
   133     {
   131 TFLOGSTRING("TSY: CMmSmsMessHandler::CMmSmsMessHandler: destructor.");
   134 TFLOGSTRING("TSY: CMmSmsMessHandler::CMmSmsMessHandler: destructor.");
   132 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_CMMSMSMESSHANDLER, "CMmSmsMessHandler::~CMmSmsMessHandler" );
   135 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_CMMSMSMESSHANDLER_TD, "CMmSmsMessHandler::~CMmSmsMessHandler" );
   133     // Delete arrays
   136     // Delete arrays
   134     if( iSmsListArray )
   137     if( iSmsListArray )
   135         {
   138         {
   136         iSmsListArray->ResetAndDestroy();
   139         iSmsListArray->ResetAndDestroy();
   137         delete iSmsListArray;
   140         delete iSmsListArray;
   155     CMmMessageRouter* aMessageRouter,    // pointer to Message router
   158     CMmMessageRouter* aMessageRouter,    // pointer to Message router
   156     CMmUiccMessHandler* aUiccMessHandler // pointer to UICC message handler
   159     CMmUiccMessHandler* aUiccMessHandler // pointer to UICC message handler
   157     )
   160     )
   158     {
   161     {
   159 TFLOGSTRING("TSY: CMmSmsMessHandler::NewL");
   162 TFLOGSTRING("TSY: CMmSmsMessHandler::NewL");
   160 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_NEWL, "CMmSmsMessHandler::NewL" );
   163 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_NEWL_TD, "CMmSmsMessHandler::NewL" );
   161     CMmSmsMessHandler* smsMessHandler = new ( ELeave ) CMmSmsMessHandler();
   164     CMmSmsMessHandler* smsMessHandler = new ( ELeave ) CMmSmsMessHandler();
   162 
   165 
   163     CleanupStack::PushL( smsMessHandler );
   166     CleanupStack::PushL( smsMessHandler );
   164     smsMessHandler->iPhoNetSender = aPhoNetSender;
   167     smsMessHandler->iPhoNetSender = aPhoNetSender;
       
   168     smsMessHandler->iPhonetReceiver = aPhoNetReceiver;
   165     smsMessHandler->iMessageRouter = aMessageRouter;
   169     smsMessHandler->iMessageRouter = aMessageRouter;
   166     smsMessHandler->iMmUiccMessHandler = aUiccMessHandler;
   170     smsMessHandler->iMmUiccMessHandler = aUiccMessHandler;
   167     smsMessHandler->ConstructL();
   171     smsMessHandler->ConstructL();
   168     aPhoNetReceiver->RegisterL( smsMessHandler, PN_SMS );
   172     aPhoNetReceiver->RegisterL( smsMessHandler, PN_SMS );
   169     CleanupStack::Pop( smsMessHandler );
   173     CleanupStack::Pop( smsMessHandler );
   177 // -----------------------------------------------------------------------------
   181 // -----------------------------------------------------------------------------
   178 //
   182 //
   179 void CMmSmsMessHandler::ConstructL()
   183 void CMmSmsMessHandler::ConstructL()
   180     {
   184     {
   181 TFLOGSTRING("TSY: CMmSmsMessHandler::ConstructL");
   185 TFLOGSTRING("TSY: CMmSmsMessHandler::ConstructL");
   182 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_CONSTRUCTL, "CMmSmsMessHandler::ConstructL" );
   186 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_CONSTRUCTL_TD, "CMmSmsMessHandler::ConstructL" );
   183     iSmsListArray = new ( ELeave ) CArrayPtrFlat<TSmsMsg>( 1 );
   187     iSmsListArray = new ( ELeave ) CArrayPtrFlat<TSmsMsg>( 1 );
   184     iSmspListArray = new ( ELeave ) CArrayPtrFlat<TSmsParameters>( 1 );
   188     iSmspListArray = new ( ELeave ) CArrayPtrFlat<TSmsParameters>( 1 );
   185 
   189 
   186     iReceivedClass2ToBeReSent = EFalse;
   190     iReceivedClass2ToBeReSent = EFalse;
   187     // default bearer setting is "CS preferred"
   191     // default bearer setting is "CS preferred"
   188     iMobileSmsBearer = RMobileSmsMessaging::ESmsBearerCircuitPreferred;
   192     iMobileSmsBearer = RMobileSmsMessaging::ESmsBearerCircuitPreferred;
   189 
   193 
   190     iMemoryCapacityExceeded = EFalse;
       
   191 
       
   192     // Reading of SMSP entries starts from record 1
   194     // Reading of SMSP entries starts from record 1
   193     iSmspRecordNumber = 1;
   195     iSmspRecordNumber = 1;
   194     }
   196     }
   195 
   197 
   196 // -----------------------------------------------------------------------------
   198 // -----------------------------------------------------------------------------
   202     {
   204     {
   203     TUint8 resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
   205     TUint8 resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
   204     TUint8 messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
   206     TUint8 messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
   205 
   207 
   206 TFLOGSTRING3("TSY: CMmSmsMessHandler::ReceiveMessageL - resource: %d, msgId: %d", resource, messageId);
   208 TFLOGSTRING3("TSY: CMmSmsMessHandler::ReceiveMessageL - resource: %d, msgId: %d", resource, messageId);
   207 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_RECEIVEMESSAGEL,"CMmSmsMessHandler::ReceiveMessageL;resource=%hhu;messageId=%hhu", resource, messageId );
   209 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_RECEIVEMESSAGEL_TD,"CMmSmsMessHandler::ReceiveMessageL;resource=%hhu;messageId=%hhu", resource, messageId );
   208 
   210 
   209     switch ( resource )
   211     switch ( resource )
   210         {
   212         {
   211         case PN_SMS:
   213         case PN_SMS:
   212             {
   214             {
   235                             EMmTsySmsSendSatMessage );
   237                             EMmTsySmsSendSatMessage );
   236                         }
   238                         }
   237                     else
   239                     else
   238                         {
   240                         {
   239 TFLOGSTRING2("TSY:CMmSmsMessHandler::ReceiveMessageL:Unexpected transId=%d in SMS_MESSAGE_SEND_RESP.",traId);
   241 TFLOGSTRING2("TSY:CMmSmsMessHandler::ReceiveMessageL:Unexpected transId=%d in SMS_MESSAGE_SEND_RESP.",traId);
   240 OstTraceExt1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_RECEIVEMESSAGEL, "CMmSmsMessHandler::ReceiveMessageL;traId=%hhu", traId );
   242 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmSmsMessHandler::ReceiveMessageL;traId=%hhu", traId );
   241                         }
   243                         }
   242                     break;
   244                     break;
   243                     }
   245                     }
   244                 case SMS_RECEIVE_MESSAGE_RESP:
   246                 case SMS_RECEIVE_MESSAGE_RESP:
   245                     {
   247                     {
   259                 case SMS_SETTINGS_UPDATE_RESP :
   261                 case SMS_SETTINGS_UPDATE_RESP :
   260                     {
   262                     {
   261                     SmsSettingsUpdateResp( aIsiMessage );
   263                     SmsSettingsUpdateResp( aIsiMessage );
   262                     break;
   264                     break;
   263                     }
   265                     }
       
   266                 case SMS_RESOURCE_CONF_IND:
       
   267                     {
       
   268                 	  SmsResourceConfInd( aIsiMessage );
       
   269                 	  break;
       
   270                     }
   264                 default:
   271                 default:
   265                     {
   272                     {
   266 TFLOGSTRING2("TSY: CMmSmsMessHandler::ReceiveMessageL - PN_SMS - unknown msgId: %d", messageId);
   273 TFLOGSTRING2("TSY: CMmSmsMessHandler::ReceiveMessageL - PN_SMS - unknown msgId: %d", messageId);
   267 OstTraceExt1( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_RECEIVEMESSAGEL, "CMmSmsMessHandler::ReceiveMessageL;messageId=%hhu", messageId );
   274 OstTraceExt1( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmSmsMessHandler::ReceiveMessageL;messageId=%hhu", messageId );
   268                     // No handler methods for ISI-message found.
   275                     // No handler methods for ISI-message found.
   269                     break;
   276                     break;
   270                     }
   277                     }
   271                 }
   278                 }
   272             break;
   279             break;
   273             }
   280             }
   274         default:
   281         default:
   275             {
   282             {
   276 TFLOGSTRING2("TSY: CMmSmsMessHandler::ReceiveMessageL - unknown resource: %d", resource);
   283 TFLOGSTRING2("TSY: CMmSmsMessHandler::ReceiveMessageL - unknown resource: %d", resource);
   277 OstTraceExt1( TRACE_NORMAL, DUP6_CMMSMSMESSHANDLER_RECEIVEMESSAGEL, "CMmSmsMessHandler::ReceiveMessageL;resource=%hhu", resource );
   284 OstTraceExt1( TRACE_NORMAL,  DUP6_CMMSMSMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmSmsMessHandler::ReceiveMessageL;resource=%hhu", resource );
   278             // No handler methods for ISI-message found.
   285             // No handler methods for ISI-message found.
   279             break;
   286             break;
   280             }
   287             }
   281         }
   288         }
   282     }
   289     }
   292     TBool aSmsCheckDisableFdn )         // Add SMS_SB_CHECK_INFO with
   299     TBool aSmsCheckDisableFdn )         // Add SMS_SB_CHECK_INFO with
   293                                         // SMS_CHECK_DISABLE_FDN
   300                                         // SMS_CHECK_DISABLE_FDN
   294 
   301 
   295     {
   302     {
   296 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendReq. Transaction ID: %d", aTransactionId);
   303 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendReq. Transaction ID: %d", aTransactionId);
   297 OstTraceExt1( TRACE_NORMAL,DUP18_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ,"CMmSmsMessHandler::SmsMessageSendReq;aTransactionId=%hhu", aTransactionId );
   304 OstTraceExt1( TRACE_NORMAL,DUP18_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ_TD,"CMmSmsMessHandler::SmsMessageSendReq;aTransactionId=%hhu", aTransactionId );
   298 
   305 
   299     TInt ret( KErrNone );
   306     TInt ret( KErrNone );
   300     TUint8 subBlockId( 0 );
   307     TUint8 subBlockId( 0 );
   301 
   308 
   302     // Structure for all SMS parameters and user data
   309     // Structure for all SMS parameters and user data
   329             {
   336             {
   330             ret = CMmStaticUtility::EpocErrorCode(
   337             ret = CMmStaticUtility::EpocErrorCode(
   331                 KErrArgument,
   338                 KErrArgument,
   332                 KErrGsmSMSTpduNotSupported );
   339                 KErrGsmSMSTpduNotSupported );
   333 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendReq. Error! SMS type not supported: %d", tpMti);
   340 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendReq. Error! SMS type not supported: %d", tpMti);
   334 OstTraceExt1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ, "CMmSmsMessHandler::SmsMessageSendReq.Error! SMS type not supported;tpMti=%hhu", tpMti );
   341 OstTraceExt1( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::SmsMessageSendReq.Error! SMS type not supported;tpMti=%hhu", tpMti );
   335             }
   342             }
   336         }
   343         }
   337     else
   344     else
   338         {
   345         {
   339         // TPDU too long
   346         // TPDU too long
   340         ret = CMmStaticUtility::EpocErrorCode(
   347         ret = CMmStaticUtility::EpocErrorCode(
   341             KErrArgument,
   348             KErrArgument,
   342             KErrGsmSMSTpduNotSupported );
   349             KErrGsmSMSTpduNotSupported );
   343 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendReq. Error! TPDU too long: %d", sendData.iMsgData->Length());
   350 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendReq. Error! TPDU too long: %d", sendData.iMsgData->Length());
   344 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ, "CMmSmsMessHandler::SmsMessageSendReq.Error! TPDU too long;sendData.iMsgData->Length()=%d", sendData.iMsgData->Length() );
   351 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::SmsMessageSendReq.Error! TPDU too long;sendData.iMsgData->Length()=%d", sendData.iMsgData->Length() );
   345         }
   352         }
   346 
   353 
   347     // Check the format of TPDU and data buffer
   354     // Check the format of TPDU and data buffer
   348     if ( ! ( RMobileSmsMessaging::KSmsDataFormat & msgAttr->iFlags &&
   355     if ( ! ( RMobileSmsMessaging::KSmsDataFormat & msgAttr->iFlags &&
   349         RMobileSmsMessaging::EFormatGsmTpdu & msgAttr->iDataFormat ) )
   356         RMobileSmsMessaging::EFormatGsmTpdu & msgAttr->iDataFormat ) )
   350         {
   357         {
   351         ret = CMmStaticUtility::EpocErrorCode(
   358         ret = CMmStaticUtility::EpocErrorCode(
   352             KErrArgument,
   359             KErrArgument,
   353             KErrGsmSMSTpduNotSupported );
   360             KErrGsmSMSTpduNotSupported );
   354 TFLOGSTRING3("TSY: CMmSmsMessHandler::SmsMessageSendReq. Error! Invalid TPDU format (%d) or data buffer format (%d)", msgAttr->iFlags, msgAttr->iDataFormat );
   361 TFLOGSTRING3("TSY: CMmSmsMessHandler::SmsMessageSendReq. Error! Invalid TPDU format (%d) or data buffer format (%d)", msgAttr->iFlags, msgAttr->iDataFormat );
   355 OstTraceExt2( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ, "CMmSmsMessHandler::SmsMessageSendReq.Error!;msgAttr->iFlags=%d;msgAttr->iDataFormat=%hhu", msgAttr->iFlags, msgAttr->iDataFormat );
   362 OstTraceExt2( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::SmsMessageSendReq.Error!;msgAttr->iFlags=%d;msgAttr->iDataFormat=%hhu", msgAttr->iFlags, msgAttr->iDataFormat );
   356         }
   363         }
   357 
   364 
   358 #if (NCP_COMMON_S60_VERSION_SUPPORT>S60_VERSION_32)
   365 #if (NCP_COMMON_S60_VERSION_SUPPORT>S60_VERSION_32)
   359     // Check whether there is SMS sending ongoing.
   366     // Check whether there is SMS sending ongoing.
   360     if ( iSMSSendingOngoing )
   367     if ( iSMSSendingOngoing )
   361         {
   368         {
   362         ret = KErrServerBusy;
   369         ret = KErrServerBusy;
   363 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsMessageSendReq. SMS sending failed, server busy!" );
   370 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsMessageSendReq. SMS sending failed, server busy!" );
   364 OstTrace0( TRACE_NORMAL, DUP17_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ, "CMmSmsMessHandler::SmsMessageSendReq. SMS sending failed, server busy!" );
   371 OstTrace0( TRACE_NORMAL,  DUP17_CMMSMSMESSHANDLER_SMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::SmsMessageSendReq. SMS sending failed, server busy!" );
   365         }
   372         }
   366 #endif // NCP_COMMON_S60_VERSION_SUPPORT
   373 #endif // NCP_COMMON_S60_VERSION_SUPPORT
   367 
   374 
   368     if ( KErrNone == ret )
   375     if ( KErrNone == ret )
   369         {
   376         {
   419     //  |- SMS_SB_ADDRESS (service center address, mandatory, max. 20 bytes)
   426     //  |- SMS_SB_ADDRESS (service center address, mandatory, max. 20 bytes)
   420     //  |
   427     //  |
   421     //  |- SMS_SB_USER_DATA (optional, max. 174 bytes)
   428     //  |- SMS_SB_USER_DATA (optional, max. 174 bytes)
   422 
   429 
   423 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. Subblock ID: %d", aSubblockId);
   430 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. Subblock ID: %d", aSubblockId);
   424 OstTraceExt1( TRACE_NORMAL, DUP9_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq;aSubblockId=%hhu", aSubblockId );
   431 OstTraceExt1( TRACE_NORMAL,  DUP9_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq;aSubblockId=%hhu", aSubblockId );
   425 
   432 
   426     TInt ret( KErrNone );
   433     TInt ret( KErrNone );
   427     TUint8 addressLength( 0 );
   434     TUint8 addressLength( 0 );
   428     ret = GetDestAddressLength( aMsgData, aSubblockId, addressLength );
   435     ret = GetDestAddressLength( aMsgData, aSubblockId, addressLength );
   429 
   436 
   432         {
   439         {
   433         TUint8 moreMsgToSend( 0 );
   440         TUint8 moreMsgToSend( 0 );
   434         TUint8 smsRoute( SMS_ROUTE_DEFAULT );
   441         TUint8 smsRoute( SMS_ROUTE_DEFAULT );
   435         TUint8 tpVpLength( 0 );
   442         TUint8 tpVpLength( 0 );
   436         TUint8 tpVpf( 0 );
   443         TUint8 tpVpf( 0 );
   437         TUint8 tpVpSubblockLength( SIZE_SMS_SB_VALIDITY_PERIOD );
       
   438         TUint8 tpUdl( 0 );
   444         TUint8 tpUdl( 0 );
   439         TUint8 tpUserDataLengthIndex( KTpduSubmitIndexUserDataLengthIfNoTpVp );
   445         TUint8 tpUserDataLengthIndex( KTpduSubmitIndexUserDataLengthIfNoTpVp );
   440         TUint8 tpUserDataIndex( 0 );
   446         TUint8 tpUserDataIndex( 0 );
   441         TUint8 tpDaIndex( KTpduSubmitIndexDestinationAddressLength );
   447         TUint8 tpDaIndex( KTpduSubmitIndexDestinationAddressLength );
   442         TUint8 tpDcs( 0 );
   448         TUint8 tpDcs( 0 );
   443         TUint8 msgOffset( ISI_HEADER_SIZE + SIZE_SMS_MESSAGE_SEND_REQ );
   449         TUint8 msgOffset( ISI_HEADER_SIZE + SIZE_SMS_MESSAGE_SEND_REQ );
   444         TUint8 numOfSubblocks( 3 ); // 3 mandatory subblocks
   450         TUint8 numOfSubblocks( 3 ); // 3 mandatory subblocks
   445         TUint8 lengthOfAddressSb( 0 );
       
   446         TUint8 lengthOfSMSUserDataSb( 0 );
       
   447         TBool defaultAlphabet( EFalse ); // Data coding type, true if 7-bit
   451         TBool defaultAlphabet( EFalse ); // Data coding type, true if 7-bit
   448 
   452 
   449         // Check if more to send parameter is included
   453         // Check if more to send parameter is included
   450         if ( RMobileSmsMessaging::KMoreToSend & aMsgAttr->iFlags )
   454         if ( RMobileSmsMessaging::KMoreToSend & aMsgAttr->iFlags )
   451             {
   455             {
   491             0 );
   495             0 );
   492 
   496 
   493 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_MESSAGE_SEND_REQ created. Message offset: %d", msgOffset );
   497 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_MESSAGE_SEND_REQ created. Message offset: %d", msgOffset );
   494 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. More messages to be sent: %d", moreMsgToSend);
   498 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. More messages to be sent: %d", moreMsgToSend);
   495 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS route: %d", smsRoute);
   499 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS route: %d", smsRoute);
   496 OstTraceExt3( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq;msgOffset=%hhu;moreMsgToSend=%hhu;smsRoute=%hhu", msgOffset, moreMsgToSend, smsRoute );
   500 OstTraceExt3( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq;msgOffset=%hhu;moreMsgToSend=%hhu;smsRoute=%hhu", msgOffset, moreMsgToSend, smsRoute );
   497 
   501 
   498         // Create SMS_SB_SUBMIT subblock
   502         // Create SMS_SB_SUBMIT subblock
   499         if ( SMS_SB_SUBMIT == aSubblockId )
   503         if ( SMS_SB_SUBMIT == aSubblockId )
   500             {
   504             {
   501             BuildSmsSbSubmit( aMsgData, isiMsg, msgOffset, addressLength );
   505             msgOffset += BuildSmsSbSubmit( aMsgData, isiMsg, addressLength, msgOffset );
   502             msgOffset += SIZE_SMS_SB_SUBMIT;
       
   503 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_SUBMIT created. Message offset: %d", msgOffset );
   506 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_SUBMIT created. Message offset: %d", msgOffset );
   504 OstTraceExt1( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_SUBMIT created.;msgOffset=%hhu", msgOffset );
   507 OstTraceExt1( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_SUBMIT created.;msgOffset=%hhu", msgOffset );
   505             // Set needed TPDU index values that depends on SMS type, VP existence
   508             // Set needed TPDU index values that depends on SMS type, VP existence
   506             // and destination address length. Those parameters are needed when
   509             // and destination address length. Those parameters are needed when
   507             // creating subblocks SMS_DESTINATION_ADDRESS, SMS_SB_VALIDITY_PERIOD
   510             // creating subblocks SMS_DESTINATION_ADDRESS, SMS_SB_VALIDITY_PERIOD
   508             // and SMS_SB_USER_DATA.
   511             // and SMS_SB_USER_DATA.
   509             // TP-VPF is LSB bits 3 and 4 from the first octect of TPDU
   512             // TP-VPF is LSB bits 3 and 4 from the first octect of TPDU
   520                     }
   523                     }
   521                 // Absolute or enhanced format, subblock length is 12
   524                 // Absolute or enhanced format, subblock length is 12
   522                 else
   525                 else
   523                     {
   526                     {
   524                     tpVpLength = SMS_VPF_ABSOLUTE_OR_ENHANCED;
   527                     tpVpLength = SMS_VPF_ABSOLUTE_OR_ENHANCED;
   525                     tpVpSubblockLength = 12;
       
   526                     tpUserDataLengthIndex =
   528                     tpUserDataLengthIndex =
   527                         KTpduSubmitIndexUserDataLengthVpfAbsoluteEnchanced;
   529                         KTpduSubmitIndexUserDataLengthVpfAbsoluteEnchanced;
   528                     }
   530                     }
   529                 }
   531                 }
   530                 // No else. If no TP-VP, User data length index was set to
   532                 // No else. If no TP-VP, User data length index was set to
   531                 // 'KTpduSubmitIndexUserDataLengthIfNoTpVp' by default
   533                 // 'KTpduSubmitIndexUserDataLengthIfNoTpVp' by default
   532             }
   534             }
   533         else // Create SMS_SB_COMMAND subblock
   535         else // Create SMS_SB_COMMAND subblock
   534             {
   536             {
   535             BuildSmsSbCommand( aMsgData, isiMsg, msgOffset );
   537             msgOffset += BuildSmsSbCommand( aMsgData, isiMsg, msgOffset );
   536             msgOffset += SIZE_SMS_SB_COMMAND;
       
   537 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_COMMAND created. Message offset: %d", msgOffset );
   538 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_COMMAND created. Message offset: %d", msgOffset );
   538 OstTraceExt1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_COMMAND created.;msgOffset=%hhu", msgOffset );
   539 OstTraceExt1( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_COMMAND created.;msgOffset=%hhu", msgOffset );
   539 
       
   540             tpDaIndex = KTpduCommandIndexDestinationAddressLength;
   540             tpDaIndex = KTpduCommandIndexDestinationAddressLength;
   541             tpUserDataLengthIndex = KTpduCommandIndexUserDataLength;
   541             tpUserDataLengthIndex = KTpduCommandIndexUserDataLength;
   542             }
   542             }
   543 
   543 
   544 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. Validity period format: %d", tpVpf);
   544 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. Validity period format: %d", tpVpf);
   545 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. User data length index: %d", tpUserDataLengthIndex);
   545 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. User data length index: %d", tpUserDataLengthIndex);
   546 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq;tpVpf=%hhu;tpUserDataLengthIndex=%hhu", tpVpf, tpUserDataLengthIndex );
   546 OstTraceExt2( TRACE_NORMAL,  CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq;tpVpf=%hhu;tpUserDataLengthIndex=%hhu", tpVpf, tpUserDataLengthIndex );
   547 
   547 
   548         // Create SMS_SB_ADDRESS subblock for destination address
   548         // Create SMS_SB_ADDRESS subblock for destination address
   549         // TP-DA length = Length (1 byte) + TON/NPI (1 byte) + address data
   549         // TP-DA length = Length (1 byte) + TON/NPI (1 byte) + address data
   550         TPtrC8 addressData( aMsgData.Mid( tpDaIndex, ( addressLength + 2 ) ) );
   550         TPtrC8 addressData( aMsgData.Mid( tpDaIndex, ( addressLength + 2 ) ) );
   551         lengthOfAddressSb = BuildSmsSbAddress(
   551         msgOffset += BuildSmsSbAddress(
   552             addressData,
   552             addressData,
   553             isiMsg,
   553             isiMsg,
   554             SMS_DESTINATION_ADDRESS,
   554             SMS_DESTINATION_ADDRESS,
   555             msgOffset );
   555             msgOffset );
   556         msgOffset += lengthOfAddressSb;
       
   557 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_ADDRESS created for destination address. Message offset: %d", msgOffset );
   556 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_ADDRESS created for destination address. Message offset: %d", msgOffset );
   558 OstTraceExt1( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_ADDRESS created for destination address.;msgOffset=%hhu", msgOffset );
   557 OstTraceExt1( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_ADDRESS created for destination address.;msgOffset=%hhu", msgOffset );
   559 
   558 
   560         // Create SMS_SB_ADDRESS subblock for service center address
   559         // Create SMS_SB_ADDRESS subblock for service center address
   561         TBuf8<SMS_ADDRESS_MAX_LEN> scAddr;
   560         TBuf8<SMS_ADDRESS_MAX_LEN> scAddr;
   562         BuildScAddress( aMsgAttr->iGsmServiceCentre, scAddr );
   561         BuildScAddress( aMsgAttr->iGsmServiceCentre, scAddr );
   563         lengthOfAddressSb =
   562         msgOffset +=
   564             BuildSmsSbAddress( scAddr, isiMsg, SMS_SMSC_ADDRESS, msgOffset );
   563             BuildSmsSbAddress( scAddr, isiMsg, SMS_SMSC_ADDRESS, msgOffset );
   565         msgOffset += lengthOfAddressSb;
       
   566 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_ADDRESS created for SC address. Message offset: %d", msgOffset );
   564 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_ADDRESS created for SC address. Message offset: %d", msgOffset );
   567 OstTraceExt1( TRACE_NORMAL, DUP5_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq.SMS_SB_ADDRESS created for SC address.;msgOffset=%hhu", msgOffset );
   565 OstTraceExt1( TRACE_NORMAL,  DUP5_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq.SMS_SB_ADDRESS created for SC address.;msgOffset=%hhu", msgOffset );
   568 
   566 
   569         // Create SMS_SB_VALIDITY_PERIOD subblock (optional, used only in
   567         // Create SMS_SB_VALIDITY_PERIOD subblock (optional, used only in
   570         // case of SMS_SB_SUBMIT)
   568         // case of SMS_SB_SUBMIT)
   571         if ( SMS_SB_SUBMIT == aSubblockId && tpVpf )
   569         if ( SMS_SB_SUBMIT == aSubblockId && tpVpf )
   572             {
   570             {
   573             TUint8 tpVpIndex(
   571             TUint8 tpVpIndex(
   574                 KTpduSubmitIndexValidityperiod + addressLength );
   572                 KTpduSubmitIndexValidityperiod + addressLength );
   575             BuildSmsSbValidityPeriod(
   573             msgOffset += BuildSmsSbValidityPeriod(
   576                 aMsgData,
   574                 aMsgData,
   577                 isiMsg,
   575                 isiMsg,
   578                 tpVpIndex,
   576                 tpVpIndex,
   579                 tpVpLength,
   577                 tpVpLength,
   580                 msgOffset );
   578                 msgOffset );
   581             // Udate message offset according to validity period length
       
   582             msgOffset += tpVpSubblockLength;
       
   583             numOfSubblocks++;
   579             numOfSubblocks++;
   584 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_VALIDITY_PERIOD created. Message offset: %d", msgOffset );
   580 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_VALIDITY_PERIOD created. Message offset: %d", msgOffset );
   585 OstTraceExt1( TRACE_NORMAL, DUP6_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq.SMS_SB_VALIDITY_PERIOD created.;msgOffset=%hhu", msgOffset );
   581 OstTraceExt1( TRACE_NORMAL,  DUP6_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq.SMS_SB_VALIDITY_PERIOD created.;msgOffset=%hhu", msgOffset );
   586             }
   582             }
   587 
   583 
   588         // Create SMS_SB_USER_DATA subblock if user data exists
   584         // Create SMS_SB_USER_DATA subblock if user data exists
   589         // Destination address length must be added to get user data
   585         // Destination address length must be added to get user data
   590         // length index
   586         // length index
   591         tpUserDataLengthIndex += addressLength;
   587         tpUserDataLengthIndex += addressLength;
   592         tpUdl = aMsgData[tpUserDataLengthIndex];
   588         tpUdl = aMsgData[tpUserDataLengthIndex];
   593 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. User data length from TPDU: %d", tpUdl);
   589 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. User data length from TPDU: %d", tpUdl);
   594 OstTrace1( TRACE_NORMAL, DUP10_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq;tpUdl=%d", tpUdl );
   590 OstTrace1( TRACE_NORMAL,  DUP10_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq;tpUdl=%d", tpUdl );
   595 
   591 
   596         if ( tpUdl )
   592         if ( tpUdl )
   597             {
   593             {
   598             // Actual user data is next index from TP-UDL position
   594             // Actual user data is next index from TP-UDL position
   599             tpUserDataIndex = tpUserDataLengthIndex + 1;
   595             tpUserDataIndex = tpUserDataLengthIndex + 1;
   600             if ( SMS_SB_SUBMIT == aSubblockId )
   596             if ( SMS_SB_SUBMIT == aSubblockId )
   601                 {
   597                 {
   602                 tpDcs = aMsgData[ KTpduSubmitIndexDataCodingScheme + addressLength ];
   598                 tpDcs = aMsgData[ KTpduSubmitIndexDataCodingScheme + addressLength ];
   603                 defaultAlphabet = IsDataCodingScheme7Bit( tpDcs );
   599                 defaultAlphabet = IsDataCodingScheme7Bit( tpDcs );
   604                 }
   600                 }
   605             lengthOfSMSUserDataSb = BuildSmsSbUserData(
   601             msgOffset += BuildSmsSbUserData(
   606                 aMsgData,
   602                 aMsgData,
   607                 isiMsg,
   603                 isiMsg,
   608                 tpUdl,
   604                 tpUdl,
   609                 tpUserDataIndex,
   605                 tpUserDataIndex,
   610                 defaultAlphabet,
   606                 defaultAlphabet,
   611                 msgOffset );
   607                 msgOffset );
   612             numOfSubblocks++;
   608             numOfSubblocks++;
   613             msgOffset += lengthOfSMSUserDataSb;
       
   614 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_USER_DATA created. Message offset: %d", msgOffset );
   609 TFLOGSTRING2("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_USER_DATA created. Message offset: %d", msgOffset );
   615 OstTraceExt1( TRACE_NORMAL, DUP7_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_USER_DATA created.;msgOffset=%hhu", msgOffset );
   610 OstTraceExt1( TRACE_NORMAL,  DUP7_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_USER_DATA created.;msgOffset=%hhu", msgOffset );
   616             }
   611             }
   617 
   612 
   618         // Create SMS_SB_CHECK_INFO subblock if user data exists
   613         // Create SMS_SB_CHECK_INFO subblock if user data exists
   619         // Destination address length must be added to get user data
   614         // Destination address length must be added to get user data
   620         // length index
   615         // length index
   621         if ( aSmsCheckDisableFdn )
   616         if ( aSmsCheckDisableFdn )
   622             {
   617             {
   623             BuildSmsCheckInfo(
   618             msgOffset += BuildSmsCheckInfo(
   624                 isiMsg,
   619                 isiMsg,
   625                 msgOffset );
   620                 msgOffset );
   626             numOfSubblocks++;
   621             numOfSubblocks++;
   627 TFLOGSTRING("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_CHECK_INFO created." );
   622 TFLOGSTRING("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_CHECK_INFO created." );
   628 OstTrace0( TRACE_NORMAL, DUP11_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_CHECK_INFO created." );
   623 OstTrace0( TRACE_NORMAL,  DUP11_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_SB_CHECK_INFO created." );
   629             }
   624             }
   630 
   625 
   631 
   626 
   632 #if (NCP_COMMON_S60_VERSION_SUPPORT>S60_VERSION_32)
   627 #if (NCP_COMMON_S60_VERSION_SUPPORT>S60_VERSION_32)
   633         iSMSSendingOngoing = ETrue;
   628         iSMSSendingOngoing = ETrue;
   638             ISI_HEADER_SIZE + SMS_MESSAGE_SEND_REQ_OFFSET_SUBBLOCKCOUNT,
   633             ISI_HEADER_SIZE + SMS_MESSAGE_SEND_REQ_OFFSET_SUBBLOCKCOUNT,
   639             numOfSubblocks );
   634             numOfSubblocks );
   640         ret = iPhoNetSender->Send( isiMsg.Complete() );
   635         ret = iPhoNetSender->Send( isiMsg.Complete() );
   641 
   636 
   642 TFLOGSTRING3("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_MESSAGE_SEND_REQ was sent. Number of subblocks in message: %d, ret = %d", numOfSubblocks, ret  );
   637 TFLOGSTRING3("TSY: CMmSmsMessHandler::CreateSmsMessageSendReq. SMS_MESSAGE_SEND_REQ was sent. Number of subblocks in message: %d, ret = %d", numOfSubblocks, ret  );
   643 OstTraceExt2( TRACE_NORMAL, DUP8_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ, "CMmSmsMessHandler::CreateSmsMessageSendReq.SMS_MESSAGE_SEND_REQ was sent.;numOfSubblocks=%hhu;ret=%d", numOfSubblocks, ret );
   638 OstTraceExt2( TRACE_NORMAL,  DUP8_CMMSMSMESSHANDLER_CREATESMSMESSAGESENDREQ_TD, "CMmSmsMessHandler::CreateSmsMessageSendReq.SMS_MESSAGE_SEND_REQ was sent.;numOfSubblocks=%hhu;ret=%d", numOfSubblocks, ret );
   644         } // End of if destination address is OK
   639         } // End of if destination address is OK
   645 
   640 
   646     return ret;
   641     return ret;
   647     }
   642     }
   648 
   643 
   654 // -----------------------------------------------------------------------------
   649 // -----------------------------------------------------------------------------
   655 //
   650 //
   656 TInt CMmSmsMessHandler::SmsReceiveMessageReq( TUint8 aAction )
   651 TInt CMmSmsMessHandler::SmsReceiveMessageReq( TUint8 aAction )
   657     {
   652     {
   658 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceiveMessageReq. Action = %d",aAction );
   653 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceiveMessageReq. Action = %d",aAction );
   659 OstTraceExt1( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRECEIVEMESSAGEREQ, "CMmSmsMessHandler::SmsReceiveMessageReq;aAction=%hhu", aAction );
   654 OstTraceExt1( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSRECEIVEMESSAGEREQ_TD, "CMmSmsMessHandler::SmsReceiveMessageReq;aAction=%hhu", aAction );
   660 
   655 
   661     TUint8 trId( 0 );
   656     TUint8 trId( 0 );
   662     if ( SMS_RECEPTION_STORAGE_STATUS_UPDATE == aAction )
   657     if ( SMS_RECEPTION_STORAGE_STATUS_UPDATE == aAction )
   663         {
   658         {
   664         trId = ESmsMessagingResumeSmsReception;
   659         trId = ESmsMessagingResumeSmsReception;
   701     //  |- SMS_SB_USER_DATA (optional, included if PDU contains user data.
   696     //  |- SMS_SB_USER_DATA (optional, included if PDU contains user data.
   702     //                       Max. 8  + SMS_GSM_DELIVER_ACK_UD_MAX_LEN
   697     //                       Max. 8  + SMS_GSM_DELIVER_ACK_UD_MAX_LEN
   703     //                       + padding = 168 bytes)
   698     //                       + padding = 168 bytes)
   704 
   699 
   705 TFLOGSTRING3("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq - traId: %d, RP cause value: %d", aTransactionId, aRpCause);
   700 TFLOGSTRING3("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq - traId: %d, RP cause value: %d", aTransactionId, aRpCause);
   706 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRECEIVEDPPREPORTREQ, "CMmSmsMessHandler::SmsReceivedMsgReportReq;aTransactionId=%hhu;aRpCause=%d", aTransactionId, aRpCause );
   701 OstTraceExt2( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSRECEIVEDPPREPORTREQ_TD, "CMmSmsMessHandler::SmsReceivedMsgReportReq;aTransactionId=%hhu;aRpCause=%d", aTransactionId, aRpCause );
   707 
   702 
   708     TInt ret( KErrNone );
   703     TInt ret( KErrNone );
   709     TUint8 numOfSubblocks( 0 ); // All subblocks are optional
   704     TUint8 numOfSubblocks( 0 ); // All subblocks are optional
   710     TUint8 tpFailureCause( 0 );
   705     TUint8 tpFailureCause( 0 );
   711     TUint8 causeType( 0 ); // SMS_CAUSE_TYPE_COMMON
   706     TUint8 causeType( 0 ); // SMS_CAUSE_TYPE_COMMON
   753 
   748 
   754     // If message data is available
   749     // If message data is available
   755     if ( NULL != aMsgData && 0 < aMsgData->Length() )
   750     if ( NULL != aMsgData && 0 < aMsgData->Length() )
   756         {
   751         {
   757 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. Message data availabe, length %d", aMsgData->Length());
   752 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. Message data availabe, length %d", aMsgData->Length());
   758 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ, "CMmSmsMessHandler::SmsReceivedMsgReportReq;aMsgData->Length()=%d", aMsgData->Length() );
   753 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ_TD, "CMmSmsMessHandler::SmsReceivedMsgReportReq;aMsgData->Length()=%d", aMsgData->Length() );
   759 
   754 
   760         TUint8 ind( 0 );
   755         TUint8 ind( 0 );
   761 
   756 
   762         // Message parameters = 1st byte of deliver report
   757         // Message parameters = 1st byte of deliver report
   763         messageParameters = ( *aMsgData )[ind++];
   758         messageParameters = ( *aMsgData )[ind++];
   803 
   798 
   804                 // Too many TP-PI octets -> this PDU is corrupted.
   799                 // Too many TP-PI octets -> this PDU is corrupted.
   805                 if ( SMS_PARAM_INDICATOR_MAX_LEN < paramIndCount )
   800                 if ( SMS_PARAM_INDICATOR_MAX_LEN < paramIndCount )
   806                     {
   801                     {
   807 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. Error! Too mamy TP-PI parameters: %d", paramIndCount );
   802 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. Error! Too mamy TP-PI parameters: %d", paramIndCount );
   808 OstTraceExt1( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ, "CMmSmsMessHandler::SmsReceivedMsgReportReq. Error!;paramIndCount=%hhu", paramIndCount );
   803 OstTraceExt1( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ_TD, "CMmSmsMessHandler::SmsReceivedMsgReportReq. Error!;paramIndCount=%hhu", paramIndCount );
   809                     ret = KErrArgument;
   804                     ret = KErrArgument;
   810                     moreParamInd = EFalse;
   805                     moreParamInd = EFalse;
   811                     }
   806                     }
   812                 }
   807                 }
   813 
   808 
   839             if ( KSmsParametersIndUserData & paramask )
   834             if ( KSmsParametersIndUserData & paramask )
   840                 {
   835                 {
   841                 tpUdl = ( *aMsgData )[ind++];
   836                 tpUdl = ( *aMsgData )[ind++];
   842                 }
   837                 }
   843 TFLOGSTRING4("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. protocolInd: %d, dcs: %d, tpUdl: %d", protocolInd, dcs, tpUdl );
   838 TFLOGSTRING4("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. protocolInd: %d, dcs: %d, tpUdl: %d", protocolInd, dcs, tpUdl );
   844 OstTraceExt3( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ, "CMmSmsMessHandler::SmsReceivedMsgReportReq;protocolInd=%hhu;dcs=%hhu;tpUdl=%hhu", protocolInd, dcs, tpUdl );
   839 OstTraceExt3( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ_TD, "CMmSmsMessHandler::SmsReceivedMsgReportReq;protocolInd=%hhu;dcs=%hhu;tpUdl=%hhu", protocolInd, dcs, tpUdl );
   845 
   840 
   846             // If user data exists, fill SMS_SB_USER_DATA and
   841             // If user data exists, fill SMS_SB_USER_DATA and
   847             // SMS_SB_PARAM_INDICATOR subblocks
   842             // SMS_SB_PARAM_INDICATOR subblocks
   848             if ( 0 < tpUdl )
   843             if ( 0 < tpUdl )
   849                 {
   844                 {
   882             } // end of if ( 0 == tpMti )
   877             } // end of if ( 0 == tpMti )
   883         else
   878         else
   884         // TP-MTI is other than SMS_GSM_DELIVER_REPORT, message is not sent
   879         // TP-MTI is other than SMS_GSM_DELIVER_REPORT, message is not sent
   885             {
   880             {
   886 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. Error! Invalid message type indicator: %d", tpMti);
   881 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. Error! Invalid message type indicator: %d", tpMti);
   887 OstTraceExt1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ, "CMmSmsMessHandler::SmsReceivedMsgReportReq;tpMti=%hhu", tpMti );
   882 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ_TD, "CMmSmsMessHandler::SmsReceivedMsgReportReq;tpMti=%hhu", tpMti );
   888             ret = KErrArgument;
   883             ret = KErrArgument;
   889             }
   884             }
   890         } // end of if ( NULL != aMsgData && 0 < aMsgData->Length() )
   885         } // end of if ( NULL != aMsgData && 0 < aMsgData->Length() )
   891     else
   886     else
   892         {
   887         {
   893 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. No message data availabe!");
   888 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceivedMsgReportReq. No message data availabe!");
   894 OstTrace0( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ, "CMmSmsMessHandler::SmsReceivedMsgReportReq. No message data available" );
   889 OstTrace0( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTREQ_TD, "CMmSmsMessHandler::SmsReceivedMsgReportReq. No message data available" );
   895         // If memory capacity exceeded -> gsmTpfailureCause is 0
   890         // If memory capacity exceeded -> gsmTpfailureCause is 0
   896         if ( 0 != aRpCause && SMS_EXT_ERR_MEMORY_CAPACITY_EXC != smsCause  )
   891         if ( 0 != aRpCause && SMS_EXT_ERR_MEMORY_CAPACITY_EXC != smsCause  )
   897             {
   892             {
   898             // 0xAF is unspecified TP-command error
   893             // 0xAF is unspecified TP-command error
   899             tpFailureCause = 0xAF;
   894             tpFailureCause = 0xAF;
   955 // Maps RP cause value to SMS cause value.
   950 // Maps RP cause value to SMS cause value.
   956 // --------------------------------------------------------------------------
   951 // --------------------------------------------------------------------------
   957 TUint8 CMmSmsMessHandler::SmsMapCause ( TInt aRpCause )
   952 TUint8 CMmSmsMessHandler::SmsMapCause ( TInt aRpCause )
   958     {
   953     {
   959 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedPpReportReq - aRpCause: %d", aRpCause);
   954 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedPpReportReq - aRpCause: %d", aRpCause);
   960 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSMAPCAUSE, "CMmSmsMessHandler::SmsMapCause;aRpCause=%d", aRpCause );
   955 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSMAPCAUSE_TD, "CMmSmsMessHandler::SmsMapCause;aRpCause=%d", aRpCause );
   961 
   956 
   962     //initialization of the Sms Cause value is 0x00 (SMS_CAUSE_OK)
   957     //initialization of the Sms Cause value is 0x00 (SMS_CAUSE_OK)
   963     TUint8 retSmsCause( 0 );
   958     TUint8 retSmsCause( 0 );
   964 
   959 
   965     switch ( aRpCause )
   960     switch ( aRpCause )
  1015             }
  1010             }
  1016 
  1011 
  1017         default:
  1012         default:
  1018             {
  1013             {
  1019 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedPpReportReq - unknown RpCause: %d", aRpCause);
  1014 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedPpReportReq - unknown RpCause: %d", aRpCause);
  1020 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSMAPCAUSE, "CMmSmsMessHandler::SmsMapCause;unknown aRpCause=%d", aRpCause );
  1015 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSMAPCAUSE_TD, "CMmSmsMessHandler::SmsMapCause;unknown aRpCause=%d", aRpCause );
  1021             retSmsCause = SMS_EXT_ERR_PROTOCOL_ERROR;
  1016             retSmsCause = SMS_EXT_ERR_PROTOCOL_ERROR;
  1022             break;
  1017             break;
  1023             }
  1018             }
  1024         }
  1019         }
  1025 
  1020 
  1035 void CMmSmsMessHandler::SmsMessageSendResp(
  1030 void CMmSmsMessHandler::SmsMessageSendResp(
  1036     const TIsiReceiveC& aIsiMsg,
  1031     const TIsiReceiveC& aIsiMsg,
  1037     TInt aIpc )
  1032     TInt aIpc )
  1038     {
  1033     {
  1039 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendResp - IPC: %d", aIpc);
  1034 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendResp - IPC: %d", aIpc);
  1040 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSMESSAGESENDRESP, "CMmSmsMessHandler::SmsMessageSendResp;aIpc=%d", aIpc );
  1035 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSMESSAGESENDRESP_TD, "CMmSmsMessHandler::SmsMessageSendResp;aIpc=%d", aIpc );
  1041 
  1036 
  1042     TInt epocCause( KErrNone );
  1037     TInt epocCause( KErrNone );
  1043     TUint16 msgRef( 0 );
  1038     TUint16 msgRef( 0 );
  1044     TUint8 tpFailureCause( 0 );
  1039     TUint8 tpFailureCause( 0 );
  1045 
  1040 
  1056             if ( SMS_ERR_RC_REJECTED  == smsServerCauseValue )
  1051             if ( SMS_ERR_RC_REJECTED  == smsServerCauseValue )
  1057                 {
  1052                 {
  1058                 if ( EMobileSmsMessagingSendMessage == aIpc )
  1053                 if ( EMobileSmsMessagingSendMessage == aIpc )
  1059                     {
  1054                     {
  1060 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsMessageSendResp - server cause: SMS_ERR_RC_REJECTED");
  1055 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsMessageSendResp - server cause: SMS_ERR_RC_REJECTED");
  1061 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP, "CMmSmsMessHandler::SmsMessageSendResp, server cause: SMS_ERR_RC_REJECTED" );
  1056 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP_TD, "CMmSmsMessHandler::SmsMessageSendResp, server cause: SMS_ERR_RC_REJECTED" );
  1062                     // This is an ETel MM-initiated SMS, barred by SAT.
  1057                     // This is an ETel MM-initiated SMS, barred by SAT.
  1063                     epocCause = CMmStaticUtility::EpocErrorCode(
  1058                     epocCause = CMmStaticUtility::EpocErrorCode(
  1064                         KErrAccessDenied,
  1059                         KErrAccessDenied,
  1065                         KErrSatControl );
  1060                         KErrSatControl );
  1066                     }
  1061                     }
  1067                 else if (  EMmTsySmsSendSatMessage == aIpc )
  1062                 else if (  EMmTsySmsSendSatMessage == aIpc )
  1068                     {
  1063                     {
  1069 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsMessageSendResp - server cause: SMS_ERR_RC_REJECTED");
  1064 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsMessageSendResp - server cause: SMS_ERR_RC_REJECTED");
  1070 OstTrace0( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP, "CMmSmsMessHandler::SmsMessageSendResp, server cause: SMS_ERR_RC_REJECTED" );
  1065 OstTrace0( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP_TD, "CMmSmsMessHandler::SmsMessageSendResp, server cause: SMS_ERR_RC_REJECTED" );
  1071                     // This is a SAT-initiated SMS, barred by SAT.
  1066                     // This is a SAT-initiated SMS, barred by SAT.
  1072                     epocCause = KErrSatMoSmControlBarred;
  1067                     epocCause = KErrSatMoSmControlBarred;
  1073                     }
  1068                     }
  1074                 }
  1069                 }
  1075              else
  1070              else
  1088                 smsServerCauseValue );
  1083                 smsServerCauseValue );
  1089             }
  1084             }
  1090         else // Invalid cause type
  1085         else // Invalid cause type
  1091             {
  1086             {
  1092 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendResp: Unknown cause type %d.", smsServerCauseType );
  1087 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsMessageSendResp: Unknown cause type %d.", smsServerCauseType );
  1093 OstTraceExt1( TRACE_NORMAL, DUP5_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP, "CMmSmsMessHandler::SmsMessageSendResp;smsServerCauseType=%hhu", smsServerCauseType );
  1088 OstTraceExt1( TRACE_NORMAL,  DUP5_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP_TD, "CMmSmsMessHandler::SmsMessageSendResp;smsServerCauseType=%hhu", smsServerCauseType );
  1094 TF_ASSERT_NOT_REACHED();
  1089 TF_ASSERT_NOT_REACHED();
  1095             }
  1090             }
  1096         }
  1091         }
  1097     else // Sending was OK
  1092     else // Sending was OK
  1098         {
  1093         {
  1174         //complete the request
  1169         //complete the request
  1175         #if (NCP_COMMON_S60_VERSION_SUPPORT==S60_VERSION_32)
  1170         #if (NCP_COMMON_S60_VERSION_SUPPORT==S60_VERSION_32)
  1176         iMessageRouter->Complete( EMmTsySmsSendSatMessage, epocCause );
  1171         iMessageRouter->Complete( EMmTsySmsSendSatMessage, epocCause );
  1177         #else
  1172         #else
  1178 #ifdef __WINSCW__
  1173 #ifdef __WINSCW__
  1179             // for simatktsy testtool
  1174          // for simatktsy testtool
  1180             // Temporarily removed for Bridge camp!
  1175          if ( iMessageRouter->iSatMessaging )
  1181       /*if ( iMessageRouter->iSatMessaging )
  1176              {
  1182                 {
  1177              iMessageRouter->iSatMessaging->CompleteSendSmsMessage ( epocCause );
  1183                 iMessageRouter->iSatMessaging->CompleteSendSmsMessage ( epocCause );
  1178              }
  1184                 }
       
  1185             // for nokiatsy testtool
  1179             // for nokiatsy testtool
  1186       */
  1180          iMessageRouter->Complete ( EMmTsySmsSendSatMessage, epocCause );
  1187             iMessageRouter->Complete ( EMmTsySmsSendSatMessage, epocCause );
       
  1188 #else // __WINSCW__
  1181 #else // __WINSCW__
  1189         // Temporarily removed for Bridge camp!
  1182          iMessageRouter->iSatMessaging->CompleteSendSmsMessage ( epocCause );
  1190     //iMessageRouter->iSatMessaging->CompleteSendSmsMessage ( epocCause );
       
  1191 #endif // __WINSCW__
  1183 #endif // __WINSCW__
  1192         iSMSSendingOngoing = EFalse;
  1184         iSMSSendingOngoing = EFalse;
  1193 #endif //NCP_COMMON_S60_VERSION_SUPPORT
  1185 #endif //NCP_COMMON_S60_VERSION_SUPPORT
  1194         }
  1186         }
  1195     else
  1187     else
  1196         {
  1188         {
  1197 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsMessageSendResp:Unexpected IPC %d.",aIpc);
  1189 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsMessageSendResp:Unexpected IPC %d.",aIpc);
  1198 OstTrace1( TRACE_NORMAL, DUP6_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP, "CMmSmsMessHandler::SmsMessageSendResp;aIpc=%d", aIpc );
  1190 OstTrace1( TRACE_NORMAL,  DUP6_CMMSMSMESSHANDLER_SMSMESSAGESENDRESP_TD, "CMmSmsMessHandler::SmsMessageSendResp;aIpc=%d", aIpc );
  1199         }
  1191         }
  1200     }
  1192     }
  1201 
  1193 
  1202 // -----------------------------------------------------------------------------
  1194 // -----------------------------------------------------------------------------
  1203 // CMmSmsMessHandler::SmsReceiveMessageResp
  1195 // CMmSmsMessHandler::SmsReceiveMessageResp
  1206 // -----------------------------------------------------------------------------
  1198 // -----------------------------------------------------------------------------
  1207 //
  1199 //
  1208 void CMmSmsMessHandler::SmsReceiveMessageResp( const TIsiReceiveC& aIsiMsg )
  1200 void CMmSmsMessHandler::SmsReceiveMessageResp( const TIsiReceiveC& aIsiMsg )
  1209     {
  1201     {
  1210 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceiveMessageResp");
  1202 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceiveMessageResp");
  1211 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSPPROUTINGRESP, "CMmSmsMessHandler::SmsReceiveMessageResp" );
  1203 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSPPROUTINGRESP_TD, "CMmSmsMessHandler::SmsReceiveMessageResp" );
  1212 
  1204 
  1213     // Get transaction ID for completing with correct IPC
  1205     // Get transaction ID for completing with correct IPC
  1214     TUint8 trId( aIsiMsg.Get8bit(
  1206     TUint8 trId( aIsiMsg.Get8bit(
  1215         ISI_HEADER_SIZE + SMS_RECEIVE_MESSAGE_RESP_OFFSET_TRANSID ) );
  1207         ISI_HEADER_SIZE + SMS_RECEIVE_MESSAGE_RESP_OFFSET_TRANSID ) );
  1216     // Get reception status
  1208     // Get reception status
  1228     TInt epocError( CMmStaticUtility::CSCauseToEpocError(
  1220     TInt epocError( CMmStaticUtility::CSCauseToEpocError(
  1229         PN_SMS,
  1221         PN_SMS,
  1230         smsServerCauseType,
  1222         smsServerCauseType,
  1231         smsServerCauseValue ) );
  1223         smsServerCauseValue ) );
  1232 
  1224 
  1233     if ( KErrNone == epocError )
       
  1234         {
       
  1235         // even if client deactivates reception, next time it is activated
       
  1236         // SMS server will ask network to resend all NACKed MT SMs
       
  1237         // only query status does not affect this flag, but this action
       
  1238         // is not used
       
  1239         iMemoryCapacityExceeded = EFalse;
       
  1240         }
       
  1241 
       
  1242     // Compete active reception status
  1225     // Compete active reception status
  1243     if ( SMS_RECEPTION_ACTIVE == receptionStatus )
  1226     if ( SMS_RECEPTION_ACTIVE == receptionStatus )
  1244         {
  1227         {
  1245         if ( 0 == trId ) // SMS receiving activated
  1228         if ( 0 == trId ) // SMS receiving activated
  1246             {
  1229             {
  1279 TBool CMmSmsMessHandler::IsSmsClass2(
  1262 TBool CMmSmsMessHandler::IsSmsClass2(
  1280     const TIsiReceiveC& aIsiMsg, //Isi Msg
  1263     const TIsiReceiveC& aIsiMsg, //Isi Msg
  1281     TUint8& aSmsClass2ReplaceTpPid ) // TP-PID to replace (set by this function)
  1264     TUint8& aSmsClass2ReplaceTpPid ) // TP-PID to replace (set by this function)
  1282     {
  1265     {
  1283 TFLOGSTRING("TSY: CMmSmsMessHandler::IsSmsClass2");
  1266 TFLOGSTRING("TSY: CMmSmsMessHandler::IsSmsClass2");
  1284 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_ISSMSCLASS2, "CMmSmsMessHandler::IsSmsClass2" );
  1267 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_ISSMSCLASS2_TD, "CMmSmsMessHandler::IsSmsClass2" );
  1285     TBool smsClass2( EFalse );
  1268     TBool smsClass2( EFalse );
  1286     TBool cphsCase( EFalse );
  1269     TBool cphsCase( EFalse );
  1287 
  1270 
  1288     // If received Class 2 SMS is a "replace type" message, contains
  1271     // If received Class 2 SMS is a "replace type" message, contains
  1289     // the TP-PID value, else value is zero.
  1272     // the TP-PID value, else value is zero.
  1337                             // This is a CPHS message indicator. No further
  1320                             // This is a CPHS message indicator. No further
  1338                             // check of DCS and PID necessary.
  1321                             // check of DCS and PID necessary.
  1339                             cphsCase = ETrue;
  1322                             cphsCase = ETrue;
  1340                             smsClass2 = EFalse;
  1323                             smsClass2 = EFalse;
  1341 TFLOGSTRING("TSY: CMmSmsMessHandler::IsSmsClass2: CPHS message");
  1324 TFLOGSTRING("TSY: CMmSmsMessHandler::IsSmsClass2: CPHS message");
  1342 OstTrace0( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_ISSMSCLASS2, "CMmSmsMessHandler::IsSmsClass2. CPHS message" );
  1325 OstTrace0( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_ISSMSCLASS2_TD, "CMmSmsMessHandler::IsSmsClass2. CPHS message" );
  1343                             }
  1326                             }
  1344                         }
  1327                         }
  1345                     }
  1328                     }
  1346                 }
  1329                 }
  1347             // End CPHS special case handling
  1330             // End CPHS special case handling
  1374                     // chapter 9.2.3.9 "TP Protocol Identifier (TP PID)"
  1357                     // chapter 9.2.3.9 "TP Protocol Identifier (TP PID)"
  1375                     if ( ( 0x41 <= protocolId ) && ( 0x47 >= protocolId ) )
  1358                     if ( ( 0x41 <= protocolId ) && ( 0x47 >= protocolId ) )
  1376                         {
  1359                         {
  1377                         // Yes, this is a "replace type" message
  1360                         // Yes, this is a "replace type" message
  1378 TFLOGSTRING2("TSY: CMmSmsMessHandler::IsSmsClass2: Replace type message, protocol ID: %d", protocolId );
  1361 TFLOGSTRING2("TSY: CMmSmsMessHandler::IsSmsClass2: Replace type message, protocol ID: %d", protocolId );
  1379 OstTraceExt1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_ISSMSCLASS2, "CMmSmsMessHandler::IsSmsClass2. Replace type message;protocolId=%hhu", protocolId );
  1362 OstTraceExt1( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_ISSMSCLASS2_TD, "CMmSmsMessHandler::IsSmsClass2. Replace type message;protocolId=%hhu", protocolId );
  1380                         aSmsClass2ReplaceTpPid = protocolId;
  1363                         aSmsClass2ReplaceTpPid = protocolId;
  1381                         }
  1364                         }
  1382 
  1365 
  1383                     // TP-DCS tells us the class of the SMS
  1366                     // TP-DCS tells us the class of the SMS
  1384                     TUint8 dataCodingScheme( sms[index++] );
  1367                     TUint8 dataCodingScheme( sms[index++] );
  1414     if ( 0 != aSmsClass2ReplaceTpPid )
  1397     if ( 0 != aSmsClass2ReplaceTpPid )
  1415         {
  1398         {
  1416         if ( smsClass2 )
  1399         if ( smsClass2 )
  1417             {
  1400             {
  1418 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsClass: Received class 2 message has TP-PID 0x%x", aSmsClass2ReplaceTpPid);
  1401 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsClass: Received class 2 message has TP-PID 0x%x", aSmsClass2ReplaceTpPid);
  1419 OstTraceExt1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_ISSMSCLASS2, "CMmSmsMessHandler::IsSmsClass2;aSmsClass2ReplaceTpPid=%hhx", aSmsClass2ReplaceTpPid );
  1402 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_ISSMSCLASS2_TD, "CMmSmsMessHandler::IsSmsClass2;aSmsClass2ReplaceTpPid=%hhx", aSmsClass2ReplaceTpPid );
  1420             }
  1403             }
  1421         else
  1404         else
  1422             {
  1405             {
  1423             aSmsClass2ReplaceTpPid = 0;
  1406             aSmsClass2ReplaceTpPid = 0;
  1424             }
  1407             }
  1433 // -----------------------------------------------------------------------------
  1416 // -----------------------------------------------------------------------------
  1434 //
  1417 //
  1435 void CMmSmsMessHandler::SmsReceivedMsgInd( const TIsiReceiveC& aIsiMsg )
  1418 void CMmSmsMessHandler::SmsReceivedMsgInd( const TIsiReceiveC& aIsiMsg )
  1436     {
  1419     {
  1437 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceivedMsgInd");
  1420 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceivedMsgInd");
  1438 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSPPROUTINGNTF, "CMmSmsMessHandler::SmsReceivedMsgInd" );
  1421 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSPPROUTINGNTF_TD, "CMmSmsMessHandler::SmsReceivedMsgInd" );
  1439 
  1422 
  1440     if ( iMemoryCapacityExceeded )
  1423     TInt ret( KErrNone );
  1441         {
  1424     // Create a package
  1442 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceivedMsgInd no storage - internal NACK");
  1425     CMmDataPackage package;
  1443 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRECEIVEDMSGIND, "CMmSmsMessHandler::SmsReceivedMsgInd no storage - internal NACK" );
  1426 
  1444         // error is ignored
  1427     TUint8 replaceTpPid( 0 ); // IsSmsClass2 also fills this
  1445         SmsReceivedMsgReportReq(
  1428     TBool receivedSmsClass2( IsSmsClass2( aIsiMsg, replaceTpPid ) );
  1446             EInternalNack,
  1429 
  1447             NULL,
  1430     // SIM SMS cache: incoming class 2 SMS
  1448             KErrGsmSMSMemoryCapacityExceeded );
  1431     if ( receivedSmsClass2 )
  1449         }
  1432         {
       
  1433         ret = SmsClass2ReceivedMsgInd( aIsiMsg, replaceTpPid );
       
  1434         }
       
  1435     // Received SMS is not a class 2 SMS (it is a normal SMS)
  1450     else
  1436     else
  1451         {
  1437         {
  1452         TInt ret( KErrNone );
  1438         ret = SmsClass1ReceivedMsgInd( aIsiMsg );
  1453         // Create a package
  1439         }
  1454         CMmDataPackage package;
  1440     // There was an error, complete to upper level
  1455 
  1441     if ( KErrNone != ret )
  1456         TUint8 replaceTpPid( 0 ); // IsSmsClass2 also fills this
  1442         {
  1457         TBool receivedSmsClass2( IsSmsClass2( aIsiMsg, replaceTpPid ) );
       
  1458 
       
  1459         // SIM SMS cache: incoming class 2 SMS
       
  1460         if ( receivedSmsClass2 )
       
  1461             {
       
  1462             ret = SmsClass2ReceivedMsgInd( aIsiMsg, replaceTpPid );
       
  1463             }
       
  1464         // Received SMS is not a class 2 SMS (it is a normal SMS)
       
  1465         else
       
  1466             {
       
  1467             ret = SmsClass1ReceivedMsgInd( aIsiMsg );
       
  1468             }
       
  1469         // There was an error, complete to upper level
       
  1470         if ( KErrNone != ret )
       
  1471             {
       
  1472 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgInd;ret=%d", ret);
  1443 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsReceivedMsgInd;ret=%d", ret);
  1473 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSPPROUTINGNTF, "CMmSmsMessHandler::SmsReceivedMsgInd;ret=%d", ret );
  1444 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSPPROUTINGNTF_TD, "CMmSmsMessHandler::SmsReceivedMsgInd;ret=%d", ret );
  1474             TBool smsInd( ETrue );
  1445         TBool smsInd( ETrue );
  1475             TSmsMsg* nullSms = NULL;
  1446         TSmsMsg* nullSms = NULL;
  1476 
  1447 
  1477             package.PackData( &smsInd, &nullSms );
  1448         package.PackData( &smsInd, &nullSms );
  1478 
  1449 
  1479             // Complete request to client
  1450         // Complete request to client
  1480             iMessageRouter->Complete(
  1451         iMessageRouter->Complete(
  1481                 EMobileSmsMessagingReceiveMessage,
  1452             EMobileSmsMessagingReceiveMessage,
  1482                 &package,
  1453             &package,
  1483                 ret );
  1454             ret );
  1484             }
       
  1485         }
  1455         }
  1486     }
  1456     }
  1487 
  1457 
  1488 // -----------------------------------------------------------------------------
  1458 // -----------------------------------------------------------------------------
  1489 // CMmSmsMessHandler::SmsReceivedMsgReportResp
  1459 // CMmSmsMessHandler::SmsReceivedMsgReportResp
  1497         + SMS_RECEIVED_MSG_REPORT_RESP_OFFSET_TRANSID ) );
  1467         + SMS_RECEIVED_MSG_REPORT_RESP_OFFSET_TRANSID ) );
  1498     TUint8 cause( aIsiMsg.Get8bit( ISI_HEADER_SIZE
  1468     TUint8 cause( aIsiMsg.Get8bit( ISI_HEADER_SIZE
  1499         + SMS_RECEIVED_MSG_REPORT_RESP_OFFSET_SMSCAUSE ) );
  1469         + SMS_RECEIVED_MSG_REPORT_RESP_OFFSET_SMSCAUSE ) );
  1500 
  1470 
  1501 TFLOGSTRING3("TSY: CMmSmsMessHandler::SmsReceivedPpReportResp - traId: %d, cause: %d", traId, cause);
  1471 TFLOGSTRING3("TSY: CMmSmsMessHandler::SmsReceivedPpReportResp - traId: %d, cause: %d", traId, cause);
  1502 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRECEIVEDPPREPORTRESP, "CMmSmsMessHandler::SmsReceivedPpReportResp;traId=%hhu;cause=%hhu", traId, cause );
  1472 OstTraceExt2( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSRECEIVEDPPREPORTRESP_TD, "CMmSmsMessHandler::SmsReceivedPpReportResp;traId=%hhu;cause=%hhu", traId, cause );
  1503 
  1473 
  1504     if ( iMemoryCapacityExceeded )
  1474     // Response for SmsReceivedPpReportReq (Ack)
  1505         {
  1475     if ( ESmsMessagingAckSmsStored == traId )
  1506         // ignore the response, this is response to self-NACK
  1476         {
  1507         // caused by client not having anymore storage space
  1477         iMessageRouter->Complete(
  1508 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsReceivedPpReportResp - self-NACK");
  1478             EMobileSmsMessagingAckSmsStored,
  1509 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRECEIVEDMSGREPORTRESP, "CMmSmsMessHandler::SmsReceivedPpReportResp - self-NACK" );
  1479             CMmStaticUtility::CSCauseToEpocError(
       
  1480                 PN_SMS,
       
  1481                 SMS_CAUSE_TYPE_COMMON,
       
  1482                 cause ) );
       
  1483         }
       
  1484     // Response for SmsReceivedPpReportReq (Nack)
       
  1485     else if ( ESmsMessagingNackSmsStored == traId )
       
  1486         {
       
  1487         iMessageRouter->Complete(
       
  1488             EMobileSmsMessagingNackSmsStored,
       
  1489             CMmStaticUtility::CSCauseToEpocError(
       
  1490                 PN_SMS,
       
  1491                 SMS_CAUSE_TYPE_COMMON,
       
  1492                 cause ) );
  1510         }
  1493         }
  1511     else
  1494     else
  1512         {
  1495         {
  1513         // Response for SmsReceivedPpReportReq (Ack)
       
  1514         if ( ESmsMessagingAckSmsStored == traId )
       
  1515             {
       
  1516             iMessageRouter->Complete(
       
  1517                 EMobileSmsMessagingAckSmsStored,
       
  1518                 CMmStaticUtility::CSCauseToEpocError(
       
  1519                     PN_SMS,
       
  1520                     SMS_CAUSE_TYPE_COMMON,
       
  1521                     cause ) );
       
  1522             }
       
  1523         // Response for SmsReceivedPpReportReq (Nack)
       
  1524         else if ( ESmsMessagingNackSmsStored == traId ||
       
  1525             ESmsMessagingNackSmsStoredCapacityExceeded == traId )
       
  1526             {
       
  1527             iMessageRouter->Complete(
       
  1528                 EMobileSmsMessagingNackSmsStored,
       
  1529                 CMmStaticUtility::CSCauseToEpocError(
       
  1530                     PN_SMS,
       
  1531                     SMS_CAUSE_TYPE_COMMON,
       
  1532                     cause ) );
       
  1533             }
       
  1534         else
       
  1535             {
       
  1536 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsReceivedPpReportResp:Unexpected transaction ID %d.",traId);
  1496 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsReceivedPpReportResp:Unexpected transaction ID %d.",traId);
  1537 OstTraceExt1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSRECEIVEDPPREPORTRESP, "CMmSmsMessHandler::SmsReceivedPpReportResp;Unexpected  transaction ID=%hhu", traId );
  1497 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSRECEIVEDPPREPORTRESP_TD, "CMmSmsMessHandler::SmsReceivedPpReportResp;Unexpected  transaction ID=%hhu", traId );
  1538             }
  1498         }
  1539 
  1499 
  1540         if ( SMS_OK != cause )
  1500     if ( SMS_OK != cause )
  1541             {
  1501         {
  1542             //Acknowledging failed.
  1502         //Acknowledging failed.
  1543             iMemoryCapacityExceeded = EFalse;
  1503         iSmsSlotLocation = 0;
  1544             iSmsSlotLocation = 0;
       
  1545             }
       
  1546         else if ( ESmsMessagingNackSmsStoredCapacityExceeded == traId )
       
  1547             {
       
  1548             // client succeeded NACKing MT SM
       
  1549             // it wont receive any further MT SM indications
       
  1550             iMemoryCapacityExceeded = ETrue;
       
  1551             }
       
  1552         }
  1504         }
  1553     }
  1505     }
  1554 
  1506 
  1555 // -----------------------------------------------------------------------------
  1507 // -----------------------------------------------------------------------------
  1556 // CMmSmsMessHandler::BuildScAddress
  1508 // CMmSmsMessHandler::BuildScAddress
  1560 void CMmSmsMessHandler::BuildScAddress(
  1512 void CMmSmsMessHandler::BuildScAddress(
  1561     RMobilePhone::TMobileAddress const & scPtr, //Pointer to Service center
  1513     RMobilePhone::TMobileAddress const & scPtr, //Pointer to Service center
  1562     TDes8 &aScAddress ) const                  //Service center address
  1514     TDes8 &aScAddress ) const                  //Service center address
  1563     {
  1515     {
  1564 TFLOGSTRING("TSY: CMmSmsMessHandler::BuildScAddress");
  1516 TFLOGSTRING("TSY: CMmSmsMessHandler::BuildScAddress");
  1565 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDSCADDRESS, "CMmSmsMessHandler::BuildScAddress" );
  1517 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDSCADDRESS_TD, "CMmSmsMessHandler::BuildScAddress" );
  1566     //get type of number from attributes
  1518     //get type of number from attributes
  1567     RMobilePhone::TMobileTON ton( scPtr.iTypeOfNumber );
  1519     RMobilePhone::TMobileTON ton( scPtr.iTypeOfNumber );
  1568     //map type of number from TMobileTON to TUint8
  1520     //map type of number from TMobileTON to TUint8
  1569     TUint8 typeOfNumber( CMmSmsGsmAddress::GsmMapTonToTUint8( ton ) );
  1521     TUint8 typeOfNumber( CMmSmsGsmAddress::GsmMapTonToTUint8( ton ) );
  1570     //get numbering plan identification from attributes
  1522     //get numbering plan identification from attributes
  1590 void CMmSmsMessHandler::BuildDeAddress(
  1542 void CMmSmsMessHandler::BuildDeAddress(
  1591     RMobilePhone::TMobileAddress const & scPtr,  // Service centre pointer
  1543     RMobilePhone::TMobileAddress const & scPtr,  // Service centre pointer
  1592     TDes8 &aDeAddress ) const                    // Destination address
  1544     TDes8 &aDeAddress ) const                    // Destination address
  1593     {
  1545     {
  1594 TFLOGSTRING("TSY: CMmSmsMessHandler::BuildDeAddress");
  1546 TFLOGSTRING("TSY: CMmSmsMessHandler::BuildDeAddress");
  1595 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDDEADDRESS, "CMmSmsMessHandler::BuildDeAddress" );
  1547 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDDEADDRESS_TD, "CMmSmsMessHandler::BuildDeAddress" );
  1596     //get type of number from attributes
  1548     //get type of number from attributes
  1597     RMobilePhone::TMobileTON ton( scPtr.iTypeOfNumber );
  1549     RMobilePhone::TMobileTON ton( scPtr.iTypeOfNumber );
  1598 
  1550 
  1599     //map type of number from TMobileTON to TUint8
  1551     //map type of number from TMobileTON to TUint8
  1600     TUint8 typeOfNumber( CMmSmsGsmAddress::GsmMapTonToTUint8( ton ) );
  1552     TUint8 typeOfNumber( CMmSmsGsmAddress::GsmMapTonToTUint8( ton ) );
  1623 // -----------------------------------------------------------------------------
  1575 // -----------------------------------------------------------------------------
  1624 //
  1576 //
  1625 TBool CMmSmsMessHandler::IsDataCodingScheme7Bit( TUint8 aDcs ) const
  1577 TBool CMmSmsMessHandler::IsDataCodingScheme7Bit( TUint8 aDcs ) const
  1626     {
  1578     {
  1627 TFLOGSTRING("TSY: CMmSmsMessHandler::IsDataCodingScheme7Bit");
  1579 TFLOGSTRING("TSY: CMmSmsMessHandler::IsDataCodingScheme7Bit");
  1628 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_ISDATACODINGSCHEME7BIT, "CMmSmsMessHandler::IsDataCodingScheme7Bit" );
  1580 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_ISDATACODINGSCHEME7BIT_TD, "CMmSmsMessHandler::IsDataCodingScheme7Bit" );
  1629     TUint8 codingGroup( static_cast<TUint8>( 0xf0 & aDcs ) );  // 11110000
  1581     TUint8 codingGroup( static_cast<TUint8>( 0xf0 & aDcs ) );  // 11110000
  1630     TUint8 lowerBits( static_cast<TUint8>( 0x0f & aDcs ) );    // 00001111
  1582     TUint8 lowerBits( static_cast<TUint8>( 0x0f & aDcs ) );    // 00001111
  1631 
  1583 
  1632     // See 3GPP TS 23.038 "Technical Specification Group Terminals;
  1584     // See 3GPP TS 23.038 "Technical Specification Group Terminals;
  1633     //Alphabets and language-specific information"
  1585     //Alphabets and language-specific information"
  1688     TUint8 aCharacterAmount,           //Character amount (from ISI message)
  1640     TUint8 aCharacterAmount,           //Character amount (from ISI message)
  1689     TUint8 aDataLength,                //Data length in bytes (from ISI message)
  1641     TUint8 aDataLength,                //Data length in bytes (from ISI message)
  1690     TPtrC8 const & aUserData ) const   //User data
  1642     TPtrC8 const & aUserData ) const   //User data
  1691     {
  1643     {
  1692 TFLOGSTRING3("TSY: CMmSmsMessHandler::CalculateNumberOfCharsInUserData - char amount (from ISI): %d, data length (from ISI): %d", aCharacterAmount, aDataLength);
  1644 TFLOGSTRING3("TSY: CMmSmsMessHandler::CalculateNumberOfCharsInUserData - char amount (from ISI): %d, data length (from ISI): %d", aCharacterAmount, aDataLength);
  1693 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_CALCULATENUMBEROFCHARSINUSERDATA, "CMmSmsMessHandler::CalculateNumberOfCharsInUserData;aCharacterAmount=%hhu;aDataLength=%hhu", aCharacterAmount, aDataLength );
  1645 OstTraceExt2( TRACE_NORMAL,  CMMSMSMESSHANDLER_CALCULATENUMBEROFCHARSINUSERDATA_TD, "CMmSmsMessHandler::CalculateNumberOfCharsInUserData;aCharacterAmount=%hhu;aDataLength=%hhu", aCharacterAmount, aDataLength );
  1694 
  1646 
  1695     TUint16 characterAmount;
  1647     TUint16 characterAmount;
  1696 
  1648 
  1697     // This calculation is only needed if the number of characters is
  1649     // This calculation is only needed if the number of characters is
  1698     // not provided in the aCharacterAmount parameter. Seems to be some
  1650     // not provided in the aCharacterAmount parameter. Seems to be some
  1727 TInt CMmSmsMessHandler::ExtFuncL(
  1679 TInt CMmSmsMessHandler::ExtFuncL(
  1728     TInt aIpc,                           // IPC number
  1680     TInt aIpc,                           // IPC number
  1729     const CMmDataPackage* aDataPackage ) // Data package
  1681     const CMmDataPackage* aDataPackage ) // Data package
  1730     {
  1682     {
  1731 TFLOGSTRING2("TSY: CMmSmsMessHandler::ExtFuncL: IPC: %d", aIpc);
  1683 TFLOGSTRING2("TSY: CMmSmsMessHandler::ExtFuncL: IPC: %d", aIpc);
  1732 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_EXTFUNCL, "CMmSmsMessHandler::ExtFuncL;aIpc=%d", aIpc );
  1684 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_EXTFUNCL_TD, "CMmSmsMessHandler::ExtFuncL;aIpc=%d", aIpc );
  1733 
  1685 
  1734     TInt ret( KErrNone );
  1686     TInt ret( KErrNone );
  1735 
  1687 
  1736     switch ( aIpc )
  1688     switch ( aIpc )
  1737         {
  1689         {
  1743             }
  1695             }
  1744         case EMmTsyActivateSmsRouting:
  1696         case EMmTsyActivateSmsRouting:
  1745             {
  1697             {
  1746 #if defined( INTERNAL_TESTING_SMS_WITH_EMULATOR )  && ( ! defined( __WINS__ ) )
  1698 #if defined( INTERNAL_TESTING_SMS_WITH_EMULATOR )  && ( ! defined( __WINS__ ) )
  1747 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL: SMS routing deactivated with flag INTERNAL_TESTING_SMS_WITH_EMULATOR");
  1699 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL: SMS routing deactivated with flag INTERNAL_TESTING_SMS_WITH_EMULATOR");
  1748 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_EXTFUNCL, "CMmSmsMessHandler::ExtFuncL, SMS routing deactivated with flag INTERNAL_TESTING_SMS_WITH_EMULATOR" );
  1700 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_EXTFUNCL_TD, "CMmSmsMessHandler::ExtFuncL, SMS routing deactivated with flag INTERNAL_TESTING_SMS_WITH_EMULATOR" );
  1749 #else
  1701 #else
  1750             ret = SmsReceiveMessageReq( SMS_RECEPTION_ACTIVATE );
  1702             ret = SmsReceiveMessageReq( SMS_RECEPTION_ACTIVATE );
  1751 #endif // defined( INTERNAL_TESTING_SMS_WITH_EMULATOR ) && ( ! defined( __WINS__ ) )
  1703 #endif // defined( INTERNAL_TESTING_SMS_WITH_EMULATOR ) && ( ! defined( __WINS__ ) )
  1752             break;
  1704             break;
  1753             }
  1705             }
  1809                 reinterpret_cast<TBuf8<RMobileSmsMessaging::KGsmTpduSize> *> ( data );
  1761                 reinterpret_cast<TBuf8<RMobileSmsMessaging::KGsmTpduSize> *> ( data );
  1810 
  1762 
  1811             if ( NULL == msgData )
  1763             if ( NULL == msgData )
  1812                 {
  1764                 {
  1813 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL.Internal Ack handling started" );
  1765 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL.Internal Ack handling started" );
  1814 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_EXTFUNCL, "CMmSmsMessHandler::ExtFuncL, Internal Ack handling started" );
  1766 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_EXTFUNCL_TD, "CMmSmsMessHandler::ExtFuncL, Internal Ack handling started" );
  1815                 }
  1767                 }
  1816             ret = SmsReceivedMsgReportReq(
  1768             ret = SmsReceivedMsgReportReq(
  1817                 ESmsMessagingAckSmsStored,
  1769                 ESmsMessagingAckSmsStored,
  1818                 msgData,
  1770                 msgData,
  1819                 KErrNone );
  1771                 KErrNone );
  1828             aDataPackage->UnPackData( msgData, rpCause );
  1780             aDataPackage->UnPackData( msgData, rpCause );
  1829 
  1781 
  1830             if ( NULL == msgData )
  1782             if ( NULL == msgData )
  1831                 {
  1783                 {
  1832 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL.Internal Nack handling started" );
  1784 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL.Internal Nack handling started" );
  1833 OstTrace0( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_EXTFUNCL, "CMmSmsMessHandler::ExtFuncL, Internal Nack handling started" );
  1785 OstTrace0( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_EXTFUNCL_TD, "CMmSmsMessHandler::ExtFuncL, Internal Nack handling started" );
  1834                 }
  1786                 }
  1835 
  1787 
  1836             // NACK due to lack of storage space causes NTSY to reject further
       
  1837             // MT SMs until client resumes SMS reception
       
  1838             TUint8 traId = KErrGsmSMSMemoryCapacityExceeded == rpCause ?
       
  1839                 ESmsMessagingNackSmsStoredCapacityExceeded : ESmsMessagingNackSmsStored;
       
  1840             ret = SmsReceivedMsgReportReq(
  1788             ret = SmsReceivedMsgReportReq(
  1841                 traId,
  1789                 ESmsMessagingNackSmsStored,
  1842                 msgData,
  1790                 msgData,
  1843                 rpCause );
  1791                 rpCause );
  1844             break;
  1792             break;
  1845             }
  1793             }
  1846         case EMobilePhoneStoreDelete:
  1794         case EMobilePhoneStoreDelete:
  1883            break;
  1831            break;
  1884             }
  1832             }
  1885         case ECustomSetSimMessageStatusReadIPC:
  1833         case ECustomSetSimMessageStatusReadIPC:
  1886             {
  1834             {
  1887 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL - ECustomSetSimMessageStatusReadIPC starts.");
  1835 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL - ECustomSetSimMessageStatusReadIPC starts.");
  1888 OstTrace0( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_EXTFUNCL, "CMmSmsMessHandler::ExtFuncL, ECustomSetSimMessageStatusReadIPC starts" );
  1836 OstTrace0( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_EXTFUNCL_TD, "CMmSmsMessHandler::ExtFuncL, ECustomSetSimMessageStatusReadIPC starts" );
  1889             TTime scTime;
  1837             TTime scTime;
  1890             TInt timezoneDiff;
  1838             TInt timezoneDiff;
  1891             aDataPackage->UnPackData( scTime, timezoneDiff );
  1839             aDataPackage->UnPackData( scTime, timezoneDiff );
  1892 
  1840 
  1893             // start searching for a SIM message with this timestamp
  1841             // start searching for a SIM message with this timestamp
  1910                         }
  1858                         }
  1911                     }
  1859                     }
  1912                 currentSlot++;
  1860                 currentSlot++;
  1913                 }
  1861                 }
  1914 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL - ECustomSetSimMessageStatusReadIPC done.");
  1862 TFLOGSTRING("TSY: CMmSmsMessHandler::ExtFuncL - ECustomSetSimMessageStatusReadIPC done.");
  1915 OstTrace0( TRACE_NORMAL, DUP5_CMMSMSMESSHANDLER_EXTFUNCL, "CMmSmsMessHandler::ExtFuncL, ECustomSetSimMessageStatusReadIPC done" );
  1863 OstTrace0( TRACE_NORMAL,  DUP5_CMMSMSMESSHANDLER_EXTFUNCL_TD, "CMmSmsMessHandler::ExtFuncL, ECustomSetSimMessageStatusReadIPC done" );
  1916             ret = KErrNone;
  1864             ret = KErrNone;
  1917             break;
  1865             break;
  1918             }
  1866             }
  1919         case EMobileSmsMessagingSetMoSmsBearer:
  1867         case EMobileSmsMessagingSetMoSmsBearer:
  1920             {
  1868             {
  1924             break;
  1872             break;
  1925             }
  1873             }
  1926         default:
  1874         default:
  1927             {
  1875             {
  1928 TFLOGSTRING2("TSY: CMmSmsMessHandler::ExtFuncL - Unknown IPC: %d", aIpc);
  1876 TFLOGSTRING2("TSY: CMmSmsMessHandler::ExtFuncL - Unknown IPC: %d", aIpc);
  1929 OstTrace1( TRACE_NORMAL, DUP6_CMMSMSMESSHANDLER_EXTFUNCL, "CMmSmsMessHandler::ExtFuncL;Unknown aIpc=%d", aIpc );
  1877 OstTrace1( TRACE_NORMAL,  DUP6_CMMSMSMESSHANDLER_EXTFUNCL_TD, "CMmSmsMessHandler::ExtFuncL;Unknown aIpc=%d", aIpc );
  1930             ret = KErrArgument;
  1878             ret = KErrArgument;
  1931             break;
  1879             break;
  1932             }
  1880             }
  1933         }
  1881         }
  1934     return ret;
  1882     return ret;
  1945     TUint8 aReceivedTpPid,                             //received TP-PID
  1893     TUint8 aReceivedTpPid,                             //received TP-PID
  1946     const TIsiReceiveC&  aReceivedSmsIsiMsg,           //received isi msg
  1894     const TIsiReceiveC&  aReceivedSmsIsiMsg,           //received isi msg
  1947     RMobileSmsStore::TMobileGsmSmsEntryV1* aSMSOnSIM ) //SMS stored on SIM
  1895     RMobileSmsStore::TMobileGsmSmsEntryV1* aSMSOnSIM ) //SMS stored on SIM
  1948     {
  1896     {
  1949 TFLOGSTRING2("TSY: CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter, aReceivedTpPid = %d", aReceivedTpPid);
  1897 TFLOGSTRING2("TSY: CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter, aReceivedTpPid = %d", aReceivedTpPid);
  1950 OstTraceExt1( TRACE_NORMAL, CMMSMSMESSHANDLER_CHECKTPPIDANDSENDERANDSERVICECENTER, "CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter;aReceivedTpPid=%hhu", aReceivedTpPid );
  1898 OstTraceExt1( TRACE_NORMAL,  CMMSMSMESSHANDLER_CHECKTPPIDANDSENDERANDSERVICECENTER_TD, "CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter;aReceivedTpPid=%hhu", aReceivedTpPid );
  1951 
  1899 
  1952     TBool matchFound( EFalse );
  1900     TBool matchFound( EFalse );
  1953 
  1901 
  1954     // Get protocol id from stored SMS
  1902     // Get protocol id from stored SMS
  1955 
  1903 
  2012                 }
  1960                 }
  2013             }
  1961             }
  2014         else // could not extract data from received message
  1962         else // could not extract data from received message
  2015             {
  1963             {
  2016 TFLOGSTRING("TSY: CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter: Could not extract data from received message");
  1964 TFLOGSTRING("TSY: CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter: Could not extract data from received message");
  2017             OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_CHECKTPPIDANDSENDERANDSERVICECENTER, "CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter: Could not extract data from received message" );
  1965             OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_CHECKTPPIDANDSENDERANDSERVICECENTER_TD, "CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter: Could not extract data from received message" );
  2018             return EFalse;
  1966             return EFalse;
  2019             }
  1967             }
  2020 
  1968 
  2021         // 2. Get sender address from received message
  1969         // 2. Get sender address from received message
  2022         TUint smsUserDataOffset( 0 );
  1970         TUint smsUserDataOffset( 0 );
  2050                 }
  1998                 }
  2051             }
  1999             }
  2052         else // Could not extract data from received message
  2000         else // Could not extract data from received message
  2053             {
  2001             {
  2054 TFLOGSTRING("TSY: CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter: Could not extract data from received message");
  2002 TFLOGSTRING("TSY: CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter: Could not extract data from received message");
  2055 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_CHECKTPPIDANDSENDERANDSERVICECENTER, "CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter - Could not extract data from received message" );
  2003 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_CHECKTPPIDANDSENDERANDSERVICECENTER_TD, "CMmSmsMessHandler::CheckTpPidAndSenderAndServiceCenter - Could not extract data from received message" );
  2056             return EFalse;
  2004             return EFalse;
  2057             }
  2005             }
  2058 
  2006 
  2059         // 3. Get sender number from stored message
  2007         // 3. Get sender number from stored message
  2060 
  2008 
  2089 // -----------------------------------------------------------------------------
  2037 // -----------------------------------------------------------------------------
  2090 //
  2038 //
  2091 TInt CMmSmsMessHandler::GetSmsStoreInfo( TInt aIpc )
  2039 TInt CMmSmsMessHandler::GetSmsStoreInfo( TInt aIpc )
  2092     {
  2040     {
  2093 TFLOGSTRING2("TSY: CMmSmsMessHandler::GetSmsStoreInfo - IPC: %d", aIpc);
  2041 TFLOGSTRING2("TSY: CMmSmsMessHandler::GetSmsStoreInfo - IPC: %d", aIpc);
  2094 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_GETSMSSTOREINFO, "CMmSmsMessHandler::GetSmsStoreInfo;aIpc=%d", aIpc );
  2042 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_GETSMSSTOREINFO_TD, "CMmSmsMessHandler::GetSmsStoreInfo;aIpc=%d", aIpc );
  2095     TInt ret( KErrNone );
  2043     TInt ret( KErrNone );
  2096     // SIM SMS cache:
  2044     // SIM SMS cache:
  2097     // -- EMobileSmsMessagingGetMessageStoreInfo/EMobilePhoneStoreGetInfo
  2045     // -- EMobileSmsMessagingGetMessageStoreInfo/EMobilePhoneStoreGetInfo
  2098     if ( KErrNone == iSmsCache.Status() )
  2046     if ( KErrNone == iSmsCache.Status() )
  2099         {
  2047         {
  2100 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- completed immediatedly");
  2048 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- completed immediatedly");
  2101 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_GETSMSSTOREINFO, "CMmSmsMessHandler::GetSmsStoreInfo, completed immediatedly" );
  2049 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_GETSMSSTOREINFO_TD, "CMmSmsMessHandler::GetSmsStoreInfo, completed immediatedly" );
  2102         TUint8 numOfLoc( TUint8( iSmsCache.TotalEntries() ) );
  2050         TUint8 numOfLoc( TUint8( iSmsCache.TotalEntries() ) );
  2103         TInt usedEntries( iSmsCache.UsedEntries() );
  2051         TInt usedEntries( iSmsCache.UsedEntries() );
  2104         CMmDataPackage data;
  2052         CMmDataPackage data;
  2105         data.PackData( &numOfLoc, &usedEntries );
  2053         data.PackData( &numOfLoc, &usedEntries );
  2106         iMessageRouter->Complete( aIpc, &data, KErrNone );
  2054         iMessageRouter->Complete( aIpc, &data, KErrNone );
  2107         }
  2055         }
  2108     // try to recover from out of memory condition
  2056     // try to recover from out of memory condition
  2109     else if ( KErrNoMemory == iSmsCache.Status() )
  2057     else if ( KErrNoMemory == iSmsCache.Status() )
  2110         {
  2058         {
  2111 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- recovering from OOM");
  2059 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- recovering from OOM");
  2112 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_GETSMSSTOREINFO, "CMmSmsMessHandler::GetSmsStoreInfo, recovering from OOM" );
  2060 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_GETSMSSTOREINFO_TD, "CMmSmsMessHandler::GetSmsStoreInfo, recovering from OOM" );
  2113         InitializeSmsCache();
  2061         InitializeSmsCache();
  2114         }
  2062         }
  2115     // cache is not ready, start waiting
  2063     // cache is not ready, start waiting
  2116     else if ( KErrNotReady == iSmsCache.Status() )
  2064     else if ( KErrNotReady == iSmsCache.Status() )
  2117         {
  2065         {
  2118 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- waiting");
  2066 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- waiting");
  2119 OstTrace0( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_GETSMSSTOREINFO, "CMmSmsMessHandler::GetSmsStoreInfo, waiting" );
  2067 OstTrace0( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_GETSMSSTOREINFO_TD, "CMmSmsMessHandler::GetSmsStoreInfo, waiting" );
  2120         }
  2068         }
  2121     // some other, error return error value
  2069     // some other, error return error value
  2122     else
  2070     else
  2123         {
  2071         {
  2124 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- failed");
  2072 TFLOGSTRING("TSY: CMmSmsMessHandler::GetSmsStoreInfo -- failed");
  2125 OstTrace0( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_GETSMSSTOREINFO, "CMmSmsMessHandler::GetSmsStoreInfo, failed" );
  2073 OstTrace0( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_GETSMSSTOREINFO_TD, "CMmSmsMessHandler::GetSmsStoreInfo, failed" );
  2126         ret = iSmsCache.Status();
  2074         ret = iSmsCache.Status();
  2127         }
  2075         }
  2128     return ret;
  2076     return ret;
  2129     }
  2077     }
  2130 
  2078 
  2134 // -----------------------------------------------------------------------------
  2082 // -----------------------------------------------------------------------------
  2135 //
  2083 //
  2136 TInt CMmSmsMessHandler::DeleteSms( const CMmDataPackage* aDataPackage )
  2084 TInt CMmSmsMessHandler::DeleteSms( const CMmDataPackage* aDataPackage )
  2137     {
  2085     {
  2138 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteSms");
  2086 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteSms");
  2139 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_DELETESMS, "CMmSmsMessHandler::DeleteSms" );
  2087 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_DELETESMS_TD, "CMmSmsMessHandler::DeleteSms" );
  2140     // SIM SMS cache: -- EMobilePhoneStoreDelete
  2088     // SIM SMS cache: -- EMobilePhoneStoreDelete
  2141     TInt ret( KErrNone );
  2089     TInt ret( KErrNone );
  2142 
  2090 
  2143     // Symbian sms stack will try to delete received SMS2 from SIM if it can't
  2091     // Symbian sms stack will try to delete received SMS2 from SIM if it can't
  2144     // save it to filesystem, so deletion should be possible in out of memory
  2092     // save it to filesystem, so deletion should be possible in out of memory
  2187             }
  2135             }
  2188         }
  2136         }
  2189     else
  2137     else
  2190         {
  2138         {
  2191 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteSms, cache not ready/failed");
  2139 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteSms, cache not ready/failed");
  2192 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_DELETESMS, "CMmSmsMessHandler::DeleteSms, cache not ready/failed" );
  2140 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_DELETESMS_TD, "CMmSmsMessHandler::DeleteSms, cache not ready/failed" );
  2193         ret = iSmsCache.Status();
  2141         ret = iSmsCache.Status();
  2194         }
  2142         }
  2195     return ret;
  2143     return ret;
  2196     }
  2144     }
  2197 
  2145 
  2201 // -----------------------------------------------------------------------------
  2149 // -----------------------------------------------------------------------------
  2202 //
  2150 //
  2203 TInt CMmSmsMessHandler::DeleteAllSms()
  2151 TInt CMmSmsMessHandler::DeleteAllSms()
  2204     {
  2152     {
  2205 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteAllSms");
  2153 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteAllSms");
  2206 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_DELETEALLSMS, "CMmSmsMessHandler::DeleteAllSms" );
  2154 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_DELETEALLSMS_TD, "CMmSmsMessHandler::DeleteAllSms" );
  2207     TInt ret( KErrNone );
  2155     TInt ret( KErrNone );
  2208     // SIM SMS cache: -- EMobilePhoneStoreDeleteAll
  2156     // SIM SMS cache: -- EMobilePhoneStoreDeleteAll
  2209     if ( KErrNone == iSmsCache.Status() )
  2157     if ( KErrNone == iSmsCache.Status() )
  2210         {
  2158         {
  2211         if ( 0 < iSmsCache.TotalEntries() )
  2159         if ( 0 < iSmsCache.TotalEntries() )
  2254             }
  2202             }
  2255         }
  2203         }
  2256     else
  2204     else
  2257         {
  2205         {
  2258 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteAllSms, cache not ready/failed");
  2206 TFLOGSTRING("TSY: CMmSmsMessHandler::DeleteAllSms, cache not ready/failed");
  2259 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_DELETEALLSMS, "CMmSmsMessHandler::DeleteAllSms, cache not ready/failed" );
  2207 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_DELETEALLSMS_TD, "CMmSmsMessHandler::DeleteAllSms, cache not ready/failed" );
  2260         ret = iSmsCache.Status();
  2208         ret = iSmsCache.Status();
  2261         }
  2209         }
  2262     return ret;
  2210     return ret;
  2263     }
  2211     }
  2264 
  2212 
  2268 // -----------------------------------------------------------------------------
  2216 // -----------------------------------------------------------------------------
  2269 //
  2217 //
  2270 TInt CMmSmsMessHandler::ReadSms( const CMmDataPackage* aDataPackage )
  2218 TInt CMmSmsMessHandler::ReadSms( const CMmDataPackage* aDataPackage )
  2271     {
  2219     {
  2272 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadSms");
  2220 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadSms");
  2273 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_READSMS, "CMmSmsMessHandler::ReadSms" );
  2221 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_READSMS_TD, "CMmSmsMessHandler::ReadSms" );
  2274 
  2222 
  2275     TInt ret( KErrNone );
  2223     TInt ret( KErrNone );
  2276 
  2224 
  2277     TInt location( 0 );
  2225     TInt location( 0 );
  2278     //unpack data
  2226     //unpack data
  2311             }
  2259             }
  2312         }
  2260         }
  2313     else
  2261     else
  2314         {
  2262         {
  2315 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadSms, cache not ready/failed");
  2263 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadSms, cache not ready/failed");
  2316 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_READSMS, "CMmSmsMessHandler::ReadSms, cache not ready/failed" );
  2264 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_READSMS_TD, "CMmSmsMessHandler::ReadSms, cache not ready/failed" );
  2317         ret = iSmsCache.Status();
  2265         ret = iSmsCache.Status();
  2318         }
  2266         }
  2319     return ret;
  2267     return ret;
  2320     }
  2268     }
  2321 
  2269 
  2325 // -----------------------------------------------------------------------------
  2273 // -----------------------------------------------------------------------------
  2326 //
  2274 //
  2327 TInt CMmSmsMessHandler::ReadAllSmsL()
  2275 TInt CMmSmsMessHandler::ReadAllSmsL()
  2328     {
  2276     {
  2329 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadAllSms");
  2277 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadAllSms");
  2330 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_READALLSMSL, "CMmSmsMessHandler::ReadAllSmsL" );
  2278 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_READALLSMSL_TD, "CMmSmsMessHandler::ReadAllSmsL" );
  2331     TInt ret( KErrNone );
  2279     TInt ret( KErrNone );
  2332 
  2280 
  2333     // SIM SMS cache: -- EMobilePhoneStoreReadAllPhase1
  2281     // SIM SMS cache: -- EMobilePhoneStoreReadAllPhase1
  2334     if ( KErrNone == iSmsCache.Status() )
  2282     if ( KErrNone == iSmsCache.Status() )
  2335         {
  2283         {
  2381         iReceivedClass2ToBeReSent = EFalse;
  2329         iReceivedClass2ToBeReSent = EFalse;
  2382         }
  2330         }
  2383     else
  2331     else
  2384         {
  2332         {
  2385 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadAllSms --- cache not ready/failed");
  2333 TFLOGSTRING("TSY: CMmSmsMessHandler::ReadAllSms --- cache not ready/failed");
  2386 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_READALLSMSL, "CMmSmsMessHandler::ReadAllSmsL, cache not ready/failed" );
  2334 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_READALLSMSL_TD, "CMmSmsMessHandler::ReadAllSmsL, cache not ready/failed" );
  2387         iSmsListArray->ResetAndDestroy();
  2335         iSmsListArray->ResetAndDestroy();
  2388         CMmDataPackage package;
  2336         CMmDataPackage package;
  2389         package.PackData( &iSmsListArray, &iReceivedClass2ToBeReSent );
  2337         package.PackData( &iSmsListArray, &iReceivedClass2ToBeReSent );
  2390         iMessageRouter->Complete(
  2338         iMessageRouter->Complete(
  2391             EMobilePhoneStoreReadAllPhase1,
  2339             EMobilePhoneStoreReadAllPhase1,
  2406     TInt aIndex)
  2354     TInt aIndex)
  2407     {
  2355     {
  2408     TInt ret( KErrNone );
  2356     TInt ret( KErrNone );
  2409 
  2357 
  2410 TFLOGSTRING("TSY: CMmSmsMessHandler::WriteSms");
  2358 TFLOGSTRING("TSY: CMmSmsMessHandler::WriteSms");
  2411 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_WRITESMS, "CMmSmsMessHandler::WriteSms" );
  2359 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_WRITESMS_TD, "CMmSmsMessHandler::WriteSms" );
  2412 
  2360 
  2413     // SIM SMS cache: -- EMobilePhoneStoreWrite
  2361     // SIM SMS cache: -- EMobilePhoneStoreWrite
  2414     //check if sms writing is ongoing or not
  2362     //check if sms writing is ongoing or not
  2415     if ( 0 != iSmsSlotLocation )
  2363     if ( 0 != iSmsSlotLocation )
  2416         {
  2364         {
  2458 // -----------------------------------------------------------------------------
  2406 // -----------------------------------------------------------------------------
  2459 //
  2407 //
  2460 void CMmSmsMessHandler::InitializeSmsCache()
  2408 void CMmSmsMessHandler::InitializeSmsCache()
  2461     {
  2409     {
  2462     // SIM SMS cache: initialize cache
  2410     // SIM SMS cache: initialize cache
       
  2411     if( KErrNotReady != iSmsCache.Status() )
       
  2412         {
  2463 TFLOGSTRING("TSY: CMmSmsMessHandler::InitializeSmsCache -- SMS CACHEING START ---");
  2413 TFLOGSTRING("TSY: CMmSmsMessHandler::InitializeSmsCache -- SMS CACHEING START ---");
  2464 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_INITIALIZESMSCACHE, "CMmSmsMessHandler::InitializeSmsCache" );
  2414 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_INITIALIZESMSCACHE_TD, "CMmSmsMessHandler::InitializeSmsCache" );
  2465     iSmsCache.Reset();
  2415         iSmsCache.Reset();
  2466     GetNumOfEFSMSRecords (); // Read EF SMS count.
  2416         GetNumOfEFSMSRecords (); // Read EF SMS count.
       
  2417         }
  2467     }
  2418     }
  2468 
  2419 
  2469 // -----------------------------------------------------------------------------
  2420 // -----------------------------------------------------------------------------
  2470 // CMmSmsMessHandler::HandleError
  2421 // CMmSmsMessHandler::HandleError
  2471 // Handles CMmSmsMessHandler's errors comes via PhoNetReceiver RunError method.
  2422 // Handles CMmSmsMessHandler's errors comes via PhoNetReceiver RunError method.
  2475         const TIsiReceiveC& aIsiMsg, // Isi message
  2426         const TIsiReceiveC& aIsiMsg, // Isi message
  2476         TInt aError )                // Error code
  2427         TInt aError )                // Error code
  2477 
  2428 
  2478     {
  2429     {
  2479 TFLOGSTRING2( "TSY: CMmSmsMessHandler::HandleError - Error: %d", aError );
  2430 TFLOGSTRING2( "TSY: CMmSmsMessHandler::HandleError - Error: %d", aError );
  2480 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_HANDLEERROR, "CMmSmsMessHandler::HandleError;aError=%d", aError );
  2431 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_HANDLEERROR_TD, "CMmSmsMessHandler::HandleError;aError=%d", aError );
  2481 
  2432 
  2482     TUint8 resource( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
  2433     TUint8 resource( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
  2483     TUint8 messageId( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
  2434     TUint8 messageId( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
  2484     TUint8 transId( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
  2435     TUint8 transId( aIsiMsg.Get8bit( ISI_HEADER_OFFSET_TRANSID ) );
  2485 
  2436 
  2486 TFLOGSTRING4( "TSY: CMmSmsMessHandler::HandleError - resource: %d, msgId: %d, traId: %d", resource, messageId, transId );
  2437 TFLOGSTRING4( "TSY: CMmSmsMessHandler::HandleError - resource: %d, msgId: %d, traId: %d", resource, messageId, transId );
  2487 OstTraceExt3(TRACE_NORMAL,DUP1_CMMSMSMESSHANDLER_HANDLEERROR,"CMmSmsMessHandler::HandleError;resource=%hhu;messageId=%hhu;transId=%hhu", resource, messageId, transId );
  2438 OstTraceExt3(TRACE_NORMAL,DUP1_CMMSMSMESSHANDLER_HANDLEERROR_TD,"CMmSmsMessHandler::HandleError;resource=%hhu;messageId=%hhu;transId=%hhu", resource, messageId, transId );
  2488 
  2439 
  2489     switch ( resource )
  2440     switch ( resource )
  2490         {
  2441         {
  2491         default:
  2442         default:
  2492             {
  2443             {
  2493 TFLOGSTRING2( "TSY: CMmSmsMessHandler::HandleError - PN_SMS, unknown resource: %d", resource );
  2444 TFLOGSTRING2( "TSY: CMmSmsMessHandler::HandleError - PN_SMS, unknown resource: %d", resource );
  2494 OstTraceExt1( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_HANDLEERROR, "CMmSmsMessHandler::HandleError;resource=%hhu", resource );
  2445 OstTraceExt1( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_HANDLEERROR_TD, "CMmSmsMessHandler::HandleError;resource=%hhu", resource );
  2495             // Nothing to do here.
  2446             // Nothing to do here.
  2496             break;
  2447             break;
  2497             }
  2448             }
  2498         }
  2449         }
  2499     }
  2450     }
  2505 //
  2456 //
  2506 TInt CMmSmsMessHandler::SmsSettingsUpdateReq(
  2457 TInt CMmSmsMessHandler::SmsSettingsUpdateReq(
  2507     RMobileSmsMessaging::TMobileSmsBearer& aBearer )
  2458     RMobileSmsMessaging::TMobileSmsBearer& aBearer )
  2508     {
  2459     {
  2509 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsSettingsUpdateReq. aBearer: %d", aBearer);
  2460 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsSettingsUpdateReq. aBearer: %d", aBearer);
  2510 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSSETTINGSUPDATEREQ, "CMmSmsMessHandler::SmsSettingsUpdateReq;aBearer=%d", aBearer );
  2461 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSSETTINGSUPDATEREQ_TD, "CMmSmsMessHandler::SmsSettingsUpdateReq;aBearer=%d", aBearer );
  2511 
  2462 
  2512     TUint8 csRoutePriority( SMS_ROUTE_NOT_AVAILABLE );
  2463     TUint8 csRoutePriority( SMS_ROUTE_NOT_AVAILABLE );
  2513     TUint8 psRoutePriority( SMS_ROUTE_NOT_AVAILABLE );
  2464     TUint8 psRoutePriority( SMS_ROUTE_NOT_AVAILABLE );
  2514 
  2465 
  2515     // The bearer information must be used in two ways:
  2466     // The bearer information must be used in two ways:
  2543             break;
  2494             break;
  2544             }
  2495             }
  2545         default:
  2496         default:
  2546             {
  2497             {
  2547 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsSettingsUpdateReq:Invalid bearer = %d",iMobileSmsBearer);
  2498 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsSettingsUpdateReq:Invalid bearer = %d",iMobileSmsBearer);
  2548 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSSETTINGSUPDATEREQ, "CMmSmsMessHandler::SmsSettingsUpdateReq;iMobileSmsBearer=%d", iMobileSmsBearer );
  2499 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSSETTINGSUPDATEREQ_TD, "CMmSmsMessHandler::SmsSettingsUpdateReq;iMobileSmsBearer=%d", iMobileSmsBearer );
  2549             break;
  2500             break;
  2550             }
  2501             }
  2551         }
  2502         }
  2552 
  2503 
  2553 TFLOGSTRING3("TSY:CMmSmsMessHandler::SmsSettingsUpdateReq:CS priority = %d, PS priority = %d",csRoutePriority,psRoutePriority);
  2504 TFLOGSTRING3("TSY:CMmSmsMessHandler::SmsSettingsUpdateReq:CS priority = %d, PS priority = %d",csRoutePriority,psRoutePriority);
  2554 OstTraceExt2( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_SMSSETTINGSUPDATEREQ, "CMmSmsMessHandler::SmsSettingsUpdateReq;csRoutePriority=%hhd;psRoutePriority=%hhd", csRoutePriority, psRoutePriority );
  2505 OstTraceExt2( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_SMSSETTINGSUPDATEREQ_TD, "CMmSmsMessHandler::SmsSettingsUpdateReq;csRoutePriority=%hhd;psRoutePriority=%hhd", csRoutePriority, psRoutePriority );
  2555 
  2506 
  2556     // SMS_SB_ROUTE_INFO sub block (8 bytes)
  2507     // SMS_SB_ROUTE_INFO sub block (8 bytes)
  2557     TBuf8<SIZE_SMS_SB_ROUTE_INFO> smsRouteInfoBuf( 0 );
  2508     TBuf8<SIZE_SMS_SB_ROUTE_INFO> smsRouteInfoBuf( 0 );
  2558     TIsiSubBlock smsRouteInfoSb(
  2509     TIsiSubBlock smsRouteInfoSb(
  2559         smsRouteInfoBuf,
  2510         smsRouteInfoBuf,
  2594     {
  2545     {
  2595     TUint8 cause( aIsiMsg.Get8bit(
  2546     TUint8 cause( aIsiMsg.Get8bit(
  2596         ISI_HEADER_SIZE + SMS_SETTINGS_UPDATE_RESP_OFFSET_SMSCAUSE ) );
  2547         ISI_HEADER_SIZE + SMS_SETTINGS_UPDATE_RESP_OFFSET_SMSCAUSE ) );
  2597 
  2548 
  2598 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsSettingsUpdateResp: response status=%d.",cause);
  2549 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsSettingsUpdateResp: response status=%d.",cause);
  2599 OstTraceExt1( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSGSMSETTINGSUPDATERESP, "CMmSmsMessHandler::SmsSettingsUpdateResp;cause=%hhu", cause );
  2550 OstTraceExt1( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSGSMSETTINGSUPDATERESP_TD, "CMmSmsMessHandler::SmsSettingsUpdateResp;cause=%hhu", cause );
  2600 
  2551 
  2601     TInt err( CMmStaticUtility::CSCauseToEpocError(
  2552     TInt err( CMmStaticUtility::CSCauseToEpocError(
  2602         PN_SMS,
  2553         PN_SMS,
  2603         SMS_CAUSE_TYPE_COMMON,
  2554         SMS_CAUSE_TYPE_COMMON,
  2604         cause ) );
  2555         cause ) );
  2614 TInt CMmSmsMessHandler::SmsClass2ReceivedMsgInd(
  2565 TInt CMmSmsMessHandler::SmsClass2ReceivedMsgInd(
  2615     const TIsiReceiveC& aIsiMsg,
  2566     const TIsiReceiveC& aIsiMsg,
  2616     TUint8 aIsReplace )
  2567     TUint8 aIsReplace )
  2617     {
  2568     {
  2618 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd");
  2569 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd");
  2619 OstTrace0( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd" );
  2570 OstTrace0( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd" );
  2620     TInt ret( KErrNone );
  2571     TInt ret( KErrNone );
  2621 
  2572 
  2622     TUint smsTpduOffset( 0 );
  2573     TUint smsTpduOffset( 0 );
  2623     if ( KErrNone == aIsiMsg.FindSubBlockOffsetById(
  2574     if ( KErrNone == aIsiMsg.FindSubBlockOffsetById(
  2624         ISI_HEADER_SIZE + SIZE_SMS_RECEIVED_MSG_IND,
  2575         ISI_HEADER_SIZE + SIZE_SMS_RECEIVED_MSG_IND,
  2634 
  2585 
  2635             // If this is a replace message, try find a SMS to replace
  2586             // If this is a replace message, try find a SMS to replace
  2636             if ( aIsReplace )
  2587             if ( aIsReplace )
  2637                 {
  2588                 {
  2638 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd --- replace");
  2589 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd --- replace");
  2639 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd, replace" );
  2590 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd, replace" );
  2640                 for ( TInt i( 0 ); i <= iSmsCache.TotalEntries(); i++ )
  2591                 for ( TInt i( 0 ); i <= iSmsCache.TotalEntries(); i++ )
  2641                     {
  2592                     {
  2642                     RMobileSmsStore::TMobileGsmSmsEntryV1* simIsiMsg =
  2593                     RMobileSmsStore::TMobileGsmSmsEntryV1* simIsiMsg =
  2643                         iSmsCache.GetEntry( i );
  2594                         iSmsCache.GetEntry( i );
  2644                     if ( simIsiMsg )
  2595                     if ( simIsiMsg )
  2664 
  2615 
  2665             // Location found, start SMS writing
  2616             // Location found, start SMS writing
  2666             if ( 0 != location )
  2617             if ( 0 != location )
  2667                 {
  2618                 {
  2668 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd -- incoming SMS2, writing to location %d", location);
  2619 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd -- incoming SMS2, writing to location %d", location);
  2669 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd;incoming SMS2, writing to location=%d", location );
  2620 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd;incoming SMS2, writing to location=%d", location );
  2670                 // iSmsSlotLocation = TUint8(location);
  2621                 // iSmsSlotLocation = TUint8(location);
  2671                 // Write received class2 SMS to SIM Card
  2622                 // Write received class2 SMS to SIM Card
  2672                 // Get data from incoming message.
  2623                 // Get data from incoming message.
  2673                 RMobileSmsStore::TMobileGsmSmsEntryV1 incomingSMS;
  2624                 RMobileSmsStore::TMobileGsmSmsEntryV1 incomingSMS;
  2674 
  2625 
  2736 
  2687 
  2737         // Cache not ready
  2688         // Cache not ready
  2738         else
  2689         else
  2739             {
  2690             {
  2740 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd -- incoming SMS2, cache not ready/failed");
  2691 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd -- incoming SMS2, cache not ready/failed");
  2741 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd, incoming SMS2, cache not ready/failed" );
  2692 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd, incoming SMS2, cache not ready/failed" );
  2742             ret = KErrGsmSMSMemoryCapacityExceeded;
  2693             ret = KErrGsmSMSMemoryCapacityExceeded;
  2743             // Setting this true will cause it to be resent?
  2694             // Setting this true will cause it to be resent?
  2744             iReceivedClass2ToBeReSent = ETrue;
  2695             iReceivedClass2ToBeReSent = ETrue;
  2745 
  2696 
  2746             // If this is out of memory error, try to refill cache..
  2697             // If this is out of memory error, try to refill cache..
  2750                 }
  2701                 }
  2751             }
  2702             }
  2752         }
  2703         }
  2753 
  2704 
  2754 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd ret=%d", ret);
  2705 TFLOGSTRING2("TSY: CMmSmsMessHandler::SmsClass2ReceivedMsgInd ret=%d", ret);
  2755 OstTrace1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd;ret=%d", ret );
  2706 OstTrace1( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_SMSCLASS2PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass2ReceivedMsgInd;ret=%d", ret );
  2756     return ret;
  2707     return ret;
  2757     }
  2708     }
  2758 
  2709 
  2759 // -----------------------------------------------------------------------------
  2710 // -----------------------------------------------------------------------------
  2760 // CMmSmsMessHandler::SmsClass1ReceivedMsgInd
  2711 // CMmSmsMessHandler::SmsClass1ReceivedMsgInd
  2763 //
  2714 //
  2764 TInt CMmSmsMessHandler::SmsClass1ReceivedMsgInd(
  2715 TInt CMmSmsMessHandler::SmsClass1ReceivedMsgInd(
  2765         const TIsiReceiveC& aIsiMsg)
  2716         const TIsiReceiveC& aIsiMsg)
  2766     {
  2717     {
  2767 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass1ReceivedMsgInd");
  2718 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsClass1ReceivedMsgInd");
  2768 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd" );
  2719 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd" );
  2769     TInt ret( KErrNone );
  2720     TInt ret( KErrNone );
  2770     TBool validPduFormat( EFalse );
  2721     TBool validPduFormat( EFalse );
  2771     TSmsMsg  smsMsgValue;
  2722     TSmsMsg  smsMsgValue;
  2772     TSmsMsg* smsMsg = &smsMsgValue;
  2723     TSmsMsg* smsMsg = &smsMsgValue;
  2773 
  2724 
  2793              smsMsg->iMobileScNPI );
  2744              smsMsg->iMobileScNPI );
  2794          }
  2745          }
  2795      else
  2746      else
  2796          {
  2747          {
  2797 TFLOGSTRING("TSY:CMmSmsMessHandler::SmsClass1ReceivedMsgInd,SMS_SB_ADDRESS expected");
  2748 TFLOGSTRING("TSY:CMmSmsMessHandler::SmsClass1ReceivedMsgInd,SMS_SB_ADDRESS expected");
  2798 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd,SMS_SB_ADDRESS expected" );
  2749 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd,SMS_SB_ADDRESS expected" );
  2799          TF_ASSERT_NOT_REACHED();
  2750          TF_ASSERT_NOT_REACHED();
  2800          }
  2751          }
  2801 
  2752 
  2802     // Handle SMS_SB_TPDU subblock
  2753     // Handle SMS_SB_TPDU subblock
  2803     TUint smsTpduOffset( 0 );
  2754     TUint smsTpduOffset( 0 );
  2833                 }
  2784                 }
  2834             }
  2785             }
  2835         else
  2786         else
  2836             {
  2787             {
  2837 TFLOGSTRING("TSY:CMmSmsMessHandler::SmsClass1ReceivedMsgInd, SMS_SB_USER_DATA expected");
  2788 TFLOGSTRING("TSY:CMmSmsMessHandler::SmsClass1ReceivedMsgInd, SMS_SB_USER_DATA expected");
  2838 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd, SMS_SB_USER_DATA expected" );
  2789 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd, SMS_SB_USER_DATA expected" );
  2839             TF_ASSERT_NOT_REACHED();
  2790             TF_ASSERT_NOT_REACHED();
  2840             }
  2791             }
  2841 
  2792 
  2842         if ( validPduFormat )
  2793         if ( validPduFormat )
  2843             {
  2794             {
  2866             // Caller is forced to complete
  2817             // Caller is forced to complete
  2867             ret = KErrGeneral;
  2818             ret = KErrGeneral;
  2868             }
  2819             }
  2869         }
  2820         }
  2870 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsClass1ReceivedMsgInd;ret=%d", ret);
  2821 TFLOGSTRING2("TSY:CMmSmsMessHandler::SmsClass1ReceivedMsgInd;ret=%d", ret);
  2871 OstTrace1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd;ret=%d", ret );
  2822 OstTrace1( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_SMSCLASS1PPROUTINGNTF_TD, "CMmSmsMessHandler::SmsClass1ReceivedMsgInd;ret=%d", ret );
  2872     return ret;
  2823     return ret;
  2873     }
  2824     }
  2874 
  2825 
  2875 
  2826 
  2876 // -----------------------------------------------------------------------------
  2827 // -----------------------------------------------------------------------------
  2882     const TDesC8& aMsgData,
  2833     const TDesC8& aMsgData,
  2883     TUint8 subBlockId,
  2834     TUint8 subBlockId,
  2884     TUint8& aDestAddressLength ) const
  2835     TUint8& aDestAddressLength ) const
  2885     {
  2836     {
  2886 TFLOGSTRING("TSY:CMmSmsMessHandler::GetDestAddressLength");
  2837 TFLOGSTRING("TSY:CMmSmsMessHandler::GetDestAddressLength");
  2887 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_GETDESTADDRESSLENGTH, "CMmSmsMessHandler::GetDestAddressLength" );
  2838 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_GETDESTADDRESSLENGTH_TD, "CMmSmsMessHandler::GetDestAddressLength" );
  2888 
  2839 
  2889     TInt ret( KErrNone );
  2840     TInt ret( KErrNone );
  2890 
  2841 
  2891     if ( SMS_SB_SUBMIT == subBlockId )
  2842     if ( SMS_SB_SUBMIT == subBlockId )
  2892         {
  2843         {
  2908         }
  2859         }
  2909     else
  2860     else
  2910         {
  2861         {
  2911         ret = KErrArgument;
  2862         ret = KErrArgument;
  2912 TFLOGSTRING2("TSY:CMmSmsMessHandler::GetDestinationAddressLength: Error! Destination address too long: %d.",aDestAddressLength);
  2863 TFLOGSTRING2("TSY:CMmSmsMessHandler::GetDestinationAddressLength: Error! Destination address too long: %d.",aDestAddressLength);
  2913 OstTraceExt1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_GETDESTADDRESSLENGTH, "CMmSmsMessHandler::GetDestAddressLength;aDestAddressLength=%hhu", aDestAddressLength );
  2864 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_GETDESTADDRESSLENGTH_TD, "CMmSmsMessHandler::GetDestAddressLength;aDestAddressLength=%hhu", aDestAddressLength );
  2914         }
  2865         }
  2915 TFLOGSTRING2("TSY:CMmSmsMessHandler::GetDestinationAddressLength:Destination address length %d.",aDestAddressLength);
  2866 TFLOGSTRING2("TSY:CMmSmsMessHandler::GetDestinationAddressLength:Destination address length %d.",aDestAddressLength);
  2916 OstTraceExt1( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_GETDESTADDRESSLENGTH, "CMmSmsMessHandler::GetDestAddressLength;aDestAddressLength=%hhu", aDestAddressLength );
  2867 OstTraceExt1( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_GETDESTADDRESSLENGTH_TD, "CMmSmsMessHandler::GetDestAddressLength;aDestAddressLength=%hhu", aDestAddressLength );
  2917     return ret;
  2868     return ret;
  2918     }
  2869     }
  2919 
  2870 
  2920 
  2871 
  2921 // -----------------------------------------------------------------------------
  2872 // -----------------------------------------------------------------------------
       
  2873 // CMmSmsMessHandler::BuildSmsSbSubmit
  2922 // Creates SMS_SB_SUBMIT subblock and appends it to ISI message
  2874 // Creates SMS_SB_SUBMIT subblock and appends it to ISI message
  2923 // -----------------------------------------------------------------------------
  2875 // -----------------------------------------------------------------------------
  2924 //
  2876 //
  2925 void CMmSmsMessHandler::BuildSmsSbSubmit(
  2877 TUint16 CMmSmsMessHandler::BuildSmsSbSubmit(
  2926     const TDesC8& aMsgData,
  2878     const TDesC8& aMsgData,
  2927     TIsiSend& aIsiMsg,
  2879     TIsiSend& aIsiMsg,
  2928     TUint8 aMsgOffset,
  2880     TUint8 aDestAddressLength,
  2929     TUint8 aDestAddressLength ) const
  2881     TUint aMsgOffset ) const
  2930     {
  2882     {
  2931 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbSubmit");
  2883 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbSubmit");
  2932 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDSMSSBSUBMIT, "CMmSmsMessHandler::BuildSmsSbSubmit" );
  2884 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDSMSSBSUBMIT_TD, "CMmSmsMessHandler::BuildSmsSbSubmit" );
  2933 
  2885 
  2934     // Extract needed parameters from TPDU for for SMS_SB_SUBMIT
  2886     // Extract needed parameters from TPDU for for SMS_SB_SUBMIT
  2935     TUint8 messageParameters( aMsgData[ KTpduIndexMessageParameters ] );
  2887     TUint8 messageParameters( aMsgData[ KTpduIndexMessageParameters ] );
  2936     TUint8 messageReference( aMsgData[ KTpduIndexMessageReference ] );
  2888     TUint8 messageReference( aMsgData[ KTpduIndexMessageReference ] );
  2937     TUint8 protocolId( aMsgData[ KTpduSubmitIndexProtocolIdentifier +
  2889     TUint8 protocolId( aMsgData[ KTpduSubmitIndexProtocolIdentifier +
  2951 
  2903 
  2952 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Message parameters: %d", messageParameters );
  2904 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Message parameters: %d", messageParameters );
  2953 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Message reference: %d", messageReference );
  2905 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Message reference: %d", messageReference );
  2954 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Protocol ID: %d", protocolId );
  2906 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Protocol ID: %d", protocolId );
  2955 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Data coding scheme: %d", dataCodingScheme );
  2907 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbSubmit. Data coding scheme: %d", dataCodingScheme );
  2956 OstTraceExt4( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_BUILDSMSSBSUBMIT, "CMmSmsMessHandler::BuildSmsSbSubmit;messageParameters=%hhu;messageReference=%hhu;protocolId=%hhu;dataCodingScheme=%hhu", messageParameters, messageReference, protocolId, dataCodingScheme );
  2908 OstTraceExt4( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_BUILDSMSSBSUBMIT_TD, "CMmSmsMessHandler::BuildSmsSbSubmit;messageParameters=%hhu;messageReference=%hhu;protocolId=%hhu;dataCodingScheme=%hhu", messageParameters, messageReference, protocolId, dataCodingScheme );
  2957     }
  2909 
  2958 
  2910     return submitBuf.Length();
  2959 
  2911     }
  2960 // -----------------------------------------------------------------------------
  2912 
       
  2913 
       
  2914 // -----------------------------------------------------------------------------
       
  2915 // CMmSmsMessHandler::BuildSmsSbCommand
  2961 // Creates SMS_SB_COMMAND subblock and appends it to ISI message
  2916 // Creates SMS_SB_COMMAND subblock and appends it to ISI message
  2962 // -----------------------------------------------------------------------------
  2917 // -----------------------------------------------------------------------------
  2963 void CMmSmsMessHandler::BuildSmsSbCommand(
  2918 TUint16 CMmSmsMessHandler::BuildSmsSbCommand(
  2964     const TDesC8& aMsgData,
  2919     const TDesC8& aMsgData,
  2965     TIsiSend& aIsiMsg,
  2920     TIsiSend& aIsiMsg,
  2966     TUint8 aMsgOffset ) const
  2921     TUint aMsgOffset ) const
  2967     {
  2922     {
  2968 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbCommand");
  2923 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbCommand");
  2969 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDSMSSBCOMMAND, "CMmSmsMessHandler::BuildSmsSbCommand" );
  2924 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDSMSSBCOMMAND_TD, "CMmSmsMessHandler::BuildSmsSbCommand" );
  2970 
  2925 
  2971     // Extract needed parameters from TPDU for SMS_SB_COMMAND
  2926     // Extract needed parameters from TPDU for SMS_SB_COMMAND
  2972     TUint8 messageParameters( aMsgData[ KTpduIndexMessageParameters ] );
  2927     TUint8 messageParameters( aMsgData[ KTpduIndexMessageParameters ] );
  2973     TUint8 messageReference( aMsgData[ KTpduIndexMessageReference ] );
  2928     TUint8 messageReference( aMsgData[ KTpduIndexMessageReference ] );
  2974     TUint8 protocolId( aMsgData[ KTpduCommandIndexProtocolIdentifier ] );
  2929     TUint8 protocolId( aMsgData[ KTpduCommandIndexProtocolIdentifier ] );
  2993 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Message parameters: %d", messageParameters );
  2948 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Message parameters: %d", messageParameters );
  2994 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Message reference: %d", messageReference );
  2949 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Message reference: %d", messageReference );
  2995 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Protocol ID: %d", protocolId );
  2950 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Protocol ID: %d", protocolId );
  2996 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Command type: %d", commandType );
  2951 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Command type: %d", commandType );
  2997 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Message Number: %d", messageNumber );
  2952 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbCommand. Message Number: %d", messageNumber );
  2998 OstTraceExt5( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_BUILDSMSSBCOMMAND, "CMmSmsMessHandler::BuildSmsSbCommand;messageParameters=%hhu;messageReference=%hhu;protocolId=%hhu;commandType=%hhu;messageNumber=%hhu", messageParameters, messageReference, protocolId, commandType, messageNumber );
  2953 OstTraceExt5( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_BUILDSMSSBCOMMAND_TD, "CMmSmsMessHandler::BuildSmsSbCommand;messageParameters=%hhu;messageReference=%hhu;protocolId=%hhu;commandType=%hhu;messageNumber=%hhu", messageParameters, messageReference, protocolId, commandType, messageNumber );
  2999     }
  2954 
  3000 
  2955     return commandBuf.Length();
  3001 
  2956     }
  3002 // -----------------------------------------------------------------------------
  2957 
       
  2958 
       
  2959 // -----------------------------------------------------------------------------
       
  2960 // CMmSmsMessHandler::BuildSmsSbAddress
  3003 // Creates SMS_SB_ADDRESS subblock and appends it to ISI message
  2961 // Creates SMS_SB_ADDRESS subblock and appends it to ISI message
  3004 // -----------------------------------------------------------------------------
  2962 // -----------------------------------------------------------------------------
  3005 TUint8 CMmSmsMessHandler::BuildSmsSbAddress(
  2963 TUint16 CMmSmsMessHandler::BuildSmsSbAddress(
  3006     const TDesC8& aAddress,
  2964     const TDesC8& aAddress,
  3007     TIsiSend& aIsiMsg,
  2965     TIsiSend& aIsiMsg,
  3008     TUint8 aAddressType,
  2966     TUint8 aAddressType,
  3009     TUint8 aMsgOffset ) const
  2967     TUint aMsgOffset ) const
  3010     {
  2968     {
  3011 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbAddress");
  2969 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbAddress");
  3012 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDSMSSBADDRESS, "CMmSmsMessHandler::BuildSmsSbAddress" );
  2970 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDSMSSBADDRESS_TD, "CMmSmsMessHandler::BuildSmsSbAddress" );
  3013 
  2971 
  3014     TUint8 addressLength( aAddress.Length() );
  2972     TUint8 addressLength( aAddress.Length() );
  3015     TUint8 subblockLength( 0 );
       
  3016     // Create and fill SMS_SB_ADDRESS subblock
  2973     // Create and fill SMS_SB_ADDRESS subblock
  3017     TBuf8<SIZE_SMS_SB_ADDRESS + SMS_ADDRESS_MAX_LEN> addressBuf( 0 );
  2974     TBuf8<SIZE_SMS_SB_ADDRESS + SMS_ADDRESS_MAX_LEN> addressBuf( 0 );
  3018     TIsiSubBlock address(
  2975     TIsiSubBlock address(
  3019         addressBuf,
  2976         addressBuf,
  3020         SMS_SB_ADDRESS,
  2977         SMS_SB_ADDRESS,
  3023     addressBuf.Append( addressLength );
  2980     addressBuf.Append( addressLength );
  3024     addressBuf.Append( aAddress );
  2981     addressBuf.Append( aAddress );
  3025 
  2982 
  3026     aIsiMsg.CopyData( aMsgOffset, address.CompleteSubBlock() );
  2983     aIsiMsg.CopyData( aMsgOffset, address.CompleteSubBlock() );
  3027 
  2984 
  3028     // Subblock length is needed for return value
       
  3029     subblockLength = addressBuf.Length();
       
  3030 
       
  3031 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbAddress. Address type: %d", aAddressType );
  2985 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbAddress. Address type: %d", aAddressType );
  3032 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbAddress. Address length: %d", addressLength );
  2986 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbAddress. Address length: %d", addressLength );
  3033 OstTraceExt2( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_BUILDSMSSBADDRESS, "CMmSmsMessHandler::BuildSmsSbAddress;aAddressType=%hhu;addressLength=%hhu", aAddressType, addressLength );
  2987 OstTraceExt2( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_BUILDSMSSBADDRESS_TD, "CMmSmsMessHandler::BuildSmsSbAddress;aAddressType=%hhu;addressLength=%hhu", aAddressType, addressLength );
  3034 #ifdef _DEBUG
  2988 #ifdef _DEBUG
  3035 for ( TInt i( 0 ); i < aAddress.Length(); i++ )
  2989 for ( TInt i( 0 ); i < aAddress.Length(); i++ )
  3036     {
  2990     {
  3037 TFLOGSTRING3( "TSY:CMmSmsMessHandler::BuildSmsSbAddress. Address data[%d]: 0x%x", i, aAddress[i] );
  2991 TFLOGSTRING3( "TSY:CMmSmsMessHandler::BuildSmsSbAddress. Address data[%d]: 0x%x", i, aAddress[i] );
  3038 OstTraceExt2( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_BUILDSMSSBADDRESS, "CMmSmsMessHandler::BuildSmsSbAddress;i=%hhu;aAddress[i]=%hhu", i, aAddress[i] );
  2992 OstTraceExt2( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_BUILDSMSSBADDRESS_TD, "CMmSmsMessHandler::BuildSmsSbAddress;i=%hhu;aAddress[i]=%hhu", i, aAddress[i] );
  3039     }
  2993     }
  3040 #endif // _DEBUG
  2994 #endif // _DEBUG
  3041 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbAddress. Length of subblock: %d", subblockLength );
  2995 
  3042 OstTraceExt1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_BUILDSMSSBADDRESS, "CMmSmsMessHandler::BuildSmsSbAddress;subblockLength=%hhu", subblockLength );
  2996     return addressBuf.Length();
  3043 
  2997     }
  3044     return subblockLength;
  2998 
  3045     }
  2999 
  3046 
  3000 // -----------------------------------------------------------------------------
  3047 
  3001 // CMmSmsMessHandler::BuildSmsSbUserData
  3048 // -----------------------------------------------------------------------------
       
  3049 // Creates SMS_SB_USER_DATA subblock and appends it to ISI message
  3002 // Creates SMS_SB_USER_DATA subblock and appends it to ISI message
  3050 // -----------------------------------------------------------------------------
  3003 // -----------------------------------------------------------------------------
  3051 TUint8 CMmSmsMessHandler::BuildSmsSbUserData(
  3004 TUint16 CMmSmsMessHandler::BuildSmsSbUserData(
  3052     const TDesC8& aMsgData,
  3005     const TDesC8& aMsgData,
  3053     TIsiSend& aIsiMsg,
  3006     TIsiSend& aIsiMsg,
  3054     TUint8 aTpUdl,
  3007     TUint8 aTpUdl,
  3055     TUint8 aTpUserDataIndex,
  3008     TUint8 aTpUserDataIndex,
  3056     TBool aDefaultAlphabet,
  3009     TBool aDefaultAlphabet,
  3057     TUint8 aMsgOffset ) const
  3010     TUint aMsgOffset ) const
  3058     {
  3011     {
  3059 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbUserData");
  3012 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbUserData");
  3060 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDSMSSBUSERDATA, "CMmSmsMessHandler::BuildSmsSbUserData" );
  3013 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDSMSSBUSERDATA_TD, "CMmSmsMessHandler::BuildSmsSbUserData" );
  3061 
  3014 
  3062     TUint8 dataLengthInOctets( 0 );
  3015     TUint8 dataLengthInOctets( 0 );
  3063     TUint8 subblockLength( 0 );
       
  3064 
  3016 
  3065     // If data is 7-bit, then TP-UDL is integer representation of
  3017     // If data is 7-bit, then TP-UDL is integer representation of
  3066     // the number of septets within the TP-UD field
  3018     // the number of septets within the TP-UD field
  3067     if ( aDefaultAlphabet )
  3019     if ( aDefaultAlphabet )
  3068         {
  3020         {
  3088     userDataBuf.Append( aTpUdl );
  3040     userDataBuf.Append( aTpUdl );
  3089     userDataBuf.Append( dataBytes );
  3041     userDataBuf.Append( dataBytes );
  3090 
  3042 
  3091     aIsiMsg.CopyData( aMsgOffset, userData.CompleteSubBlock() );
  3043     aIsiMsg.CopyData( aMsgOffset, userData.CompleteSubBlock() );
  3092 
  3044 
  3093     subblockLength = userDataBuf.Length();
       
  3094 
       
  3095 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbUserData. User data length in octets: %d", dataLengthInOctets );
  3045 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbUserData. User data length in octets: %d", dataLengthInOctets );
  3096 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbUserData. User data character count: %d", aTpUdl );
  3046 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbUserData. User data character count: %d", aTpUdl );
  3097 OstTraceExt2( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_BUILDSMSSBUSERDATA, "CMmSmsMessHandler::BuildSmsSbUserData;dataLengthInOctets=%hhu;aTpUdl=%hhu", dataLengthInOctets, aTpUdl );
  3047 OstTraceExt2( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_BUILDSMSSBUSERDATA_TD, "CMmSmsMessHandler::BuildSmsSbUserData;dataLengthInOctets=%hhu;aTpUdl=%hhu", dataLengthInOctets, aTpUdl );
  3098 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbUserData. Length of subblock: %d", subblockLength );
  3048 
  3099 OstTraceExt1( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_BUILDSMSSBUSERDATA, "CMmSmsMessHandler::BuildSmsSbUserData;subblockLength=%hhu", subblockLength );
  3049     return userDataBuf.Length();
  3100 
  3050     }
  3101     return subblockLength;
  3051 
  3102     }
  3052 
  3103 
  3053 // -----------------------------------------------------------------------------
  3104 
  3054 // CMmSmsMessHandler::BuildSmsSbValidityPeriod
  3105 // -----------------------------------------------------------------------------
       
  3106 // Creates SMS_SB_VALIDITY_PERIOD subblock and appends it to ISI message
  3055 // Creates SMS_SB_VALIDITY_PERIOD subblock and appends it to ISI message
  3107 // -----------------------------------------------------------------------------
  3056 // -----------------------------------------------------------------------------
  3108 void CMmSmsMessHandler::BuildSmsSbValidityPeriod(
  3057 TUint16 CMmSmsMessHandler::BuildSmsSbValidityPeriod(
  3109     const TDesC8& aMsgData,
  3058     const TDesC8& aMsgData,
  3110     TIsiSend& aIsiMsg,
  3059     TIsiSend& aIsiMsg,
  3111     TUint8 aTpVpIndex,
  3060     TUint8 aTpVpIndex,
  3112     TUint8 aTpVpLength,
  3061     TUint8 aTpVpLength,
  3113     TUint8 aMsgOffset ) const
  3062     TUint aMsgOffset ) const
  3114     {
  3063     {
  3115 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbValidityPeriod");
  3064 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsSbValidityPeriod");
  3116 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDSMSSBVALIDITYPERIOD, "CMmSmsMessHandler::BuildSmsSbValidityPeriod" );
  3065 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDSMSSBVALIDITYPERIOD_TD, "CMmSmsMessHandler::BuildSmsSbValidityPeriod" );
  3117 
  3066 
  3118     // Extract validity period data bytes
  3067     // Extract validity period data bytes
  3119     TPtrC8 tpVpData( aMsgData.Mid( aTpVpIndex, aTpVpLength ) );
  3068     TPtrC8 tpVpData( aMsgData.Mid( aTpVpIndex, aTpVpLength ) );
  3120 
  3069 
  3121     // Create and fill SMS_SB_VALIDITY_PERIOD subblock, max length is 12
  3070     // Create and fill SMS_SB_VALIDITY_PERIOD subblock, max length is 12
  3128     validityPeriodBuf.Append( tpVpData );
  3077     validityPeriodBuf.Append( tpVpData );
  3129 
  3078 
  3130     aIsiMsg.CopyData( aMsgOffset, validityPeriod.CompleteSubBlock() );
  3079     aIsiMsg.CopyData( aMsgOffset, validityPeriod.CompleteSubBlock() );
  3131 
  3080 
  3132 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbValidityPeriod. Validity period length: %d", aTpVpLength );
  3081 TFLOGSTRING2( "TSY:CMmSmsMessHandler::BuildSmsSbValidityPeriod. Validity period length: %d", aTpVpLength );
  3133 OstTraceExt1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_BUILDSMSSBVALIDITYPERIOD, "CMmSmsMessHandler::BuildSmsSbValidityPeriod;aTpVpLength=%hhu", aTpVpLength );
  3082 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_BUILDSMSSBVALIDITYPERIOD_TD, "CMmSmsMessHandler::BuildSmsSbValidityPeriod;aTpVpLength=%hhu", aTpVpLength );
  3134 
  3083 
  3135 #ifdef _DEBUG
  3084 #ifdef _DEBUG
  3136 for ( TInt i( 0 ); i < aTpVpLength; i++ )
  3085 for ( TInt i( 0 ); i < aTpVpLength; i++ )
  3137     {
  3086     {
  3138 TFLOGSTRING3( "Validity period, byte[%d], 0x%x", i, tpVpData[i] );
  3087 TFLOGSTRING3( "Validity period, byte[%d], 0x%x", i, tpVpData[i] );
  3139 OstTraceExt2( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_BUILDSMSSBVALIDITYPERIOD, "CMmSmsMessHandler::BuildSmsSbValidityPeriod;i=%hhu;tpVpData[i]=%hhu", i, tpVpData[i] );
  3088 OstTraceExt2( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_BUILDSMSSBVALIDITYPERIOD_TD, "CMmSmsMessHandler::BuildSmsSbValidityPeriod;i=%hhu;tpVpData[i]=%hhu", i, tpVpData[i] );
  3140     }
  3089     }
  3141 #endif // _DEBUG
  3090 #endif // _DEBUG
  3142     }
  3091 
  3143 
  3092     return validityPeriodBuf.Length();
  3144 // -----------------------------------------------------------------------------
  3093     }
       
  3094 
       
  3095 // -----------------------------------------------------------------------------
       
  3096 // CMmSmsMessHandler::BuildSmsCheckInfo
  3145 // Creates SMS_SB_CHECK_INFO sub block with SMS_CHECK_DISABLE_FDN and appends it
  3097 // Creates SMS_SB_CHECK_INFO sub block with SMS_CHECK_DISABLE_FDN and appends it
  3146 // to ISI message.
  3098 // to ISI message.
  3147 // -----------------------------------------------------------------------------
  3099 // -----------------------------------------------------------------------------
  3148 void CMmSmsMessHandler::BuildSmsCheckInfo(
  3100 TUint16 CMmSmsMessHandler::BuildSmsCheckInfo(
  3149     TIsiSend& aIsiMsg,
  3101     TIsiSend& aIsiMsg,
  3150     TUint8 aMsgOffset ) const
  3102     TUint aMsgOffset ) const
  3151     {
  3103     {
  3152 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsCheckInfo");
  3104 TFLOGSTRING("TSY:CMmSmsMessHandler::BuildSmsCheckInfo");
  3153 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_BUILDSMSCHECKINFO, "CMmSmsMessHandler::BuildSmsCheckInfo" );
  3105 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_BUILDSMSCHECKINFO_TD, "CMmSmsMessHandler::BuildSmsCheckInfo" );
  3154 
  3106 
  3155     // Create and fill SMS_SB_CHECK_INFO subblock.
  3107     // Create and fill SMS_SB_CHECK_INFO subblock.
  3156     TBuf8<SIZE_SMS_SB_CHECK_INFO> checkInfoBuf;
  3108     TBuf8<SIZE_SMS_SB_CHECK_INFO> checkInfoBuf;
  3157     TIsiSubBlock checkInfo(
  3109     TIsiSubBlock checkInfo(
  3158         checkInfoBuf,
  3110         checkInfoBuf,
  3163     checkInfoBuf.Append( KSmsPadding );
  3115     checkInfoBuf.Append( KSmsPadding );
  3164     checkInfoBuf.Append( KSmsPadding );
  3116     checkInfoBuf.Append( KSmsPadding );
  3165 
  3117 
  3166     aIsiMsg.CopyData( aMsgOffset, checkInfo.CompleteSubBlock() );
  3118     aIsiMsg.CopyData( aMsgOffset, checkInfo.CompleteSubBlock() );
  3167 
  3119 
       
  3120     return checkInfoBuf.Length();
  3168     }
  3121     }
  3169 
  3122 
  3170 // -----------------------------------------------------------------------------
  3123 // -----------------------------------------------------------------------------
  3171 // CMmSmsMessHandler::ProcessUiccMsg
  3124 // CMmSmsMessHandler::ProcessUiccMsg
  3172 // Handles data received from UICC server
  3125 // Handles data received from UICC server
  3177     TInt aStatus,
  3130     TInt aStatus,
  3178     TUint8 /*aDetails*/,
  3131     TUint8 /*aDetails*/,
  3179     const TDesC8& aFileData )
  3132     const TDesC8& aFileData )
  3180     {
  3133     {
  3181 TFLOGSTRING3("TSY:CMmSmsMessHandler::ProcessUiccMsg, aTraId: %d, status: %d", aTraId, aStatus );
  3134 TFLOGSTRING3("TSY:CMmSmsMessHandler::ProcessUiccMsg, aTraId: %d, status: %d", aTraId, aStatus );
  3182 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_PROCESSUICCMSG, "CMmSmsMessHandler::ProcessUiccMsg;aTraId=%d", aTraId );
  3135 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_PROCESSUICCMSG_TD, "CMmSmsMessHandler::ProcessUiccMsg;aTraId=%d", aTraId );
  3183 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_PROCESSUICCMSG, "CMmSmsMessHandler::ProcessUiccMsg;aStatus=%d", aStatus );
  3136 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_PROCESSUICCMSG_TD, "CMmSmsMessHandler::ProcessUiccMsg;aStatus=%d", aStatus );
  3184 
  3137 
  3185     TInt ret( KErrNone );
  3138     TInt ret( KErrNone );
  3186 
  3139 
  3187     switch( aTraId )
  3140     switch( aTraId )
  3188         {
  3141         {
  3271             break;
  3224             break;
  3272             }
  3225             }
  3273         default:
  3226         default:
  3274             {
  3227             {
  3275 TFLOGSTRING("TSY:CMmSmsMessHandler::ProcessUiccMsg - unknown transaction ID" );
  3228 TFLOGSTRING("TSY:CMmSmsMessHandler::ProcessUiccMsg - unknown transaction ID" );
  3276 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_PROCESSUICCMSG, "CMmSmsMessHandler::ProcessUiccMsg - unknown transaction ID" );
  3229 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_PROCESSUICCMSG_TD, "CMmSmsMessHandler::ProcessUiccMsg - unknown transaction ID" );
  3277 
  3230 
  3278             break;
  3231             break;
  3279             }
  3232             }
  3280         }
  3233         }
  3281     return ret;
  3234     return ret;
  3289 TInt CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq(
  3242 TInt CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq(
  3290     const TUint8 aRecordId,
  3243     const TUint8 aRecordId,
  3291     const TUiccTrId aTrId )
  3244     const TUiccTrId aTrId )
  3292     {
  3245     {
  3293 TFLOGSTRING3("TSY: CMmSmsMessHandler::UiccReadSMSReq, aTraId: %d, aRecordId: %d", aTrId, aRecordId );
  3246 TFLOGSTRING3("TSY: CMmSmsMessHandler::UiccReadSMSReq, aTraId: %d, aRecordId: %d", aTrId, aRecordId );
  3294 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCREADSMSORSMSRECORDCOUNTREQ, "CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq;aTrId=%hhu;aRecordId=%hhu", aTrId, aRecordId );
  3247 OstTraceExt2( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCREADSMSORSMSRECORDCOUNTREQ_TD, "CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq;aTrId=%hhu;aRecordId=%hhu", aTrId, aRecordId );
  3295 
  3248 
  3296     TUint8 serviceType( 0 );
  3249     TUint8 serviceType( 0 );
  3297     TInt ret( KErrNone );
  3250     TInt ret( KErrNone );
  3298 
  3251 
  3299     switch( aTrId )
  3252     switch( aTrId )
  3312             break;
  3265             break;
  3313             }
  3266             }
  3314         default:
  3267         default:
  3315             {
  3268             {
  3316 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSReq - unknown transaction ID" );
  3269 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSReq - unknown transaction ID" );
  3317 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_UICCREADSMSORSMSRECORDCOUNTREQ, "CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq - unknown transaction ID" );
  3270 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_UICCREADSMSORSMSRECORDCOUNTREQ_TD, "CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq - unknown transaction ID" );
  3318             ret = KErrUnknown;
  3271             ret = KErrUnknown;
  3319             break;
  3272             break;
  3320             }
  3273             }
  3321         }
  3274         }
  3322 
  3275 
  3353 void CMmSmsMessHandler::UiccReadSMSResp(
  3306 void CMmSmsMessHandler::UiccReadSMSResp(
  3354     TInt aStatus,
  3307     TInt aStatus,
  3355     const TDesC8& aFileData )
  3308     const TDesC8& aFileData )
  3356     {
  3309     {
  3357 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp" );
  3310 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp" );
  3358 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCREADSMSRESP, "CMmSmsMessHandler::UiccReadSMSResp" );
  3311 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCREADSMSRESP_TD, "CMmSmsMessHandler::UiccReadSMSResp" );
  3359 
  3312 
  3360     if ( KErrNone == aStatus )
  3313     if ( UICC_STATUS_OK == aStatus )
  3361         {
  3314         {
  3362 TFLOGSTRING2("TSY: CMmSmsMessHandler::SimStSmsHandleReadCacheEntriesL -- cacheing iRecordId=%d", iRecordId );
  3315 TFLOGSTRING2("TSY: CMmSmsMessHandler::SimStSmsHandleReadCacheEntriesL -- cacheing iRecordId=%d", iRecordId );
  3363 OstTraceExt1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_UICCREADSMSRESP, "CMmSmsMessHandler::UiccReadSMSResp;iRecordId=%hhu", iRecordId );
  3316 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_UICCREADSMSRESP_TD, "CMmSmsMessHandler::UiccReadSMSResp;iRecordId=%hhu", iRecordId );
  3364 
  3317 
  3365         if ( 0 != aFileData.Length() )
  3318         if ( 0 != aFileData.Length() )
  3366             {
  3319             {
  3367             // add to cache
  3320             // add to cache
  3368             RMobileSmsStore::TMobileGsmSmsEntryV1 smsData;
  3321             RMobileSmsStore::TMobileGsmSmsEntryV1 smsData;
  3418             }
  3371             }
  3419         }
  3372         }
  3420     else
  3373     else
  3421         {
  3374         {
  3422 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp - abort caching");
  3375 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp - abort caching");
  3423 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_UICCREADSMSRESP, "CMmSmsMessHandler::UiccReadSMSResp - abort caching" );
  3376 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_UICCREADSMSRESP_TD, "CMmSmsMessHandler::UiccReadSMSResp - abort caching" );
  3424         // else SIM suddenly removed ==> abort caching
  3377         // else SIM suddenly removed ==> abort caching
  3425         // or example SIM rejected (EFSA-6ZQ9K3).
  3378         // or example SIM rejected (EFSA-6ZQ9K3).
  3426 
  3379 
  3427         // SMS is on SIM, but we couldn't read it. Cache must be
  3380         // SMS is on SIM, but we couldn't read it. Cache must be
  3428         // invalidated
  3381         // invalidated
  3434 
  3387 
  3435     // either done or failed
  3388     // either done or failed
  3436     if ( KErrNotReady != iSmsCache.Status() )
  3389     if ( KErrNotReady != iSmsCache.Status() )
  3437         {
  3390         {
  3438 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccReadSMSResp - Success or Error value of SMS cache read = %d",iSmsCache.Status() );
  3391 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccReadSMSResp - Success or Error value of SMS cache read = %d",iSmsCache.Status() );
  3439 OstTrace1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_UICCREADSMSRESP, "CMmSmsMessHandler::UiccReadSMSResp;iSmsCache.Status()=%d", iSmsCache.Status() );
  3392 OstTrace1( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_UICCREADSMSRESP_TD, "CMmSmsMessHandler::UiccReadSMSResp;iSmsCache.Status()=%d", iSmsCache.Status() );
  3440 
  3393 
  3441 TFLOGSTRING3("TSY: CMmSmsMessHandler::UiccReadSMSResp --- SMS CACHE READ DONE --- total=%d used=%d",iSmsCache.TotalEntries(), iSmsCache.UsedEntries() );
  3394 TFLOGSTRING3("TSY: CMmSmsMessHandler::UiccReadSMSResp --- SMS CACHE READ DONE --- total=%d used=%d",iSmsCache.TotalEntries(), iSmsCache.UsedEntries() );
  3442 OstTrace1( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_UICCREADSMSRESP, "CMmSmsMessHandler::UiccReadSMSResp;iSmsCache.TotalEntries()=%d", iSmsCache.TotalEntries() );
  3395 OstTrace1( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_UICCREADSMSRESP_TD, "CMmSmsMessHandler::UiccReadSMSResp;iSmsCache.TotalEntries()=%d", iSmsCache.TotalEntries() );
  3443 
  3396 
  3444         // there is a chance that EMobileSmsMessagingGetMessageStoreInfo
  3397         // there is a chance that EMobileSmsMessagingGetMessageStoreInfo
  3445         // request is already on if so, then complete it here... if there is
  3398         // request is already on if so, then complete it here... if there is
  3446         // no request on, then this is harmless..
  3399         // no request on, then this is harmless..
  3447         TUint8 numOfLoc( TUint8( iSmsCache.TotalEntries() ) );
  3400         TUint8 numOfLoc( TUint8( iSmsCache.TotalEntries() ) );
  3468 
  3421 
  3469         // if cache is up and a message was received while cacheing then resume
  3422         // if cache is up and a message was received while cacheing then resume
  3470         if ( KErrNone == iSmsCache.Status() && iReceivedClass2ToBeReSent )
  3423         if ( KErrNone == iSmsCache.Status() && iReceivedClass2ToBeReSent )
  3471             {
  3424             {
  3472 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp -- resume SMS reception");
  3425 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp -- resume SMS reception");
  3473 OstTrace0( TRACE_NORMAL, DUP5_CMMSMSMESSHANDLER_UICCREADSMSRESP, "CMmSmsMessHandler::UiccReadSMSResp -- resume SMS reception" );
  3426 OstTrace0( TRACE_NORMAL,  DUP5_CMMSMSMESSHANDLER_UICCREADSMSRESP_TD, "CMmSmsMessHandler::UiccReadSMSResp -- resume SMS reception" );
  3474             SmsReceiveMessageReq( SMS_RECEPTION_STORAGE_STATUS_UPDATE );
  3427             SmsReceiveMessageReq( SMS_RECEPTION_STORAGE_STATUS_UPDATE );
  3475             iReceivedClass2ToBeReSent = EFalse;
  3428             iReceivedClass2ToBeReSent = EFalse;
  3476             }
  3429             }
  3477         }
  3430         }
  3478     }
  3431     }
  3485 void CMmSmsMessHandler::UiccReadSMSRespForComplete(
  3438 void CMmSmsMessHandler::UiccReadSMSRespForComplete(
  3486     TInt aStatus,
  3439     TInt aStatus,
  3487     const TDesC8& aFileData )
  3440     const TDesC8& aFileData )
  3488     {
  3441     {
  3489 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSRespForComplete" );
  3442 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSRespForComplete" );
  3490 //OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCREADSMSRESP, "CMmSmsMessHandler::UiccReadSMSResp;aStatus=%d;aFileData=%s", aStatus,aFileData );
  3443 //OstTraceExt2( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCREADSMSRESP_TD, "CMmSmsMessHandler::UiccReadSMSResp;aStatus=%d;aFileData=%s", aStatus,aFileData );
  3491 
  3444 
  3492 
  3445 
  3493     if ( KErrNone == aStatus )
  3446     if ( UICC_STATUS_OK == aStatus )
  3494         {
  3447         {
  3495 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccReadSMSRespForComplete -- cacheing iRecordId=%d", iRecordId );
  3448 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccReadSMSRespForComplete -- cacheing iRecordId=%d", iRecordId );
  3496 OstTraceExt1( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCREADSMSRESPFORCOMPLETE, "CMmSmsMessHandler::UiccReadSMSRespForComplete;iRecordId=%hhu", iRecordId );
  3449 OstTraceExt1( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCREADSMSRESPFORCOMPLETE_TD, "CMmSmsMessHandler::UiccReadSMSRespForComplete;iRecordId=%hhu", iRecordId );
  3497 
  3450 
  3498         if ( 0 != aFileData.Length() )
  3451         if ( 0 != aFileData.Length() )
  3499             {
  3452             {
  3500             // add to cache
  3453             // add to cache
  3501             RMobileSmsStore::TMobileGsmSmsEntryV1 smsData;
  3454             RMobileSmsStore::TMobileGsmSmsEntryV1 smsData;
  3642     const RMobileSmsStore::TMobileGsmSmsEntryV1& aEntry,
  3595     const RMobileSmsStore::TMobileGsmSmsEntryV1& aEntry,
  3643     const TUint8 aRecordId
  3596     const TUint8 aRecordId
  3644     )
  3597     )
  3645     {
  3598     {
  3646 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccWriteSMSReq aRecordId: %d", aRecordId );
  3599 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccWriteSMSReq aRecordId: %d", aRecordId );
  3647 OstTraceExt1( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCWRITESMSREQ, "CMmSmsMessHandler::UiccWriteSMSReq;aRecordId=%hhu", aRecordId );
  3600 OstTraceExt1( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCWRITESMSREQ_TD, "CMmSmsMessHandler::UiccWriteSMSReq;aRecordId=%hhu", aRecordId );
  3648 
  3601 
  3649     // Set parameters for UICC_APPL_CMD_REQ message
  3602     // Set parameters for UICC_APPL_CMD_REQ message
  3650     TUiccWriteLinearFixed params;
  3603     TUiccWriteLinearFixed params;
  3651     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  3604     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  3652     params.trId = ETrIdWriteSMS;
  3605     params.trId = ETrIdWriteSMS;
  3721 // -----------------------------------------------------------------------------
  3674 // -----------------------------------------------------------------------------
  3722 //
  3675 //
  3723 void CMmSmsMessHandler::UiccWriteSMSResp( TInt aStatus )
  3676 void CMmSmsMessHandler::UiccWriteSMSResp( TInt aStatus )
  3724     {
  3677     {
  3725 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccWriteSMSResp aStatus: %d", aStatus );
  3678 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccWriteSMSResp aStatus: %d", aStatus );
  3726 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCWRITESMSRESP, "CMmSmsMessHandler::UiccWriteSMSResp;aStatus=%d", aStatus );
  3679 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCWRITESMSRESP_TD, "CMmSmsMessHandler::UiccWriteSMSResp;aStatus=%d", aStatus );
  3727 
  3680 
  3728     // Create Package
  3681     // Create Package
  3729     CMmDataPackage package;
  3682     CMmDataPackage package;
  3730 
  3683 
  3731     if ( iSMSClass2Write )
  3684     if ( iSMSClass2Write )
  3732         {
  3685         {
  3733         if ( KErrNone == aStatus )
  3686         if ( UICC_STATUS_OK == aStatus )
  3734             {
  3687             {
  3735             // After writing class2 SMS to SIM card, it has
  3688             // After writing class2 SMS to SIM card, it has
  3736             // to be read in case SIM SW has changed the contents
  3689             // to be read in case SIM SW has changed the contents
  3737             TInt ret( UiccReadSMSOrSMSRecordCountReq( iSmsSlotLocation, ETrIdReadSMSForComplete ) );
  3690             TInt ret( UiccReadSMSOrSMSRecordCountReq( iSmsSlotLocation, ETrIdReadSMSForComplete ) );
  3738             if ( KErrNone != ret )
  3691             if ( KErrNone != ret )
  3778                 }
  3731                 }
  3779             }
  3732             }
  3780         }
  3733         }
  3781     else
  3734     else
  3782         {
  3735         {
  3783         if ( KErrNone == aStatus )
  3736         if ( UICC_STATUS_OK == aStatus )
  3784             {
  3737             {
  3785             // After writing class2 SMS to SIM card, it has
  3738             // After writing class2 SMS to SIM card, it has
  3786             // to be read in case SIM SW has changed the contents
  3739             // to be read in case SIM SW has changed the contents
  3787             TInt ret( UiccReadSMSOrSMSRecordCountReq( iSmsSlotLocation, ETrIdReadSMSForComplete ) );
  3740             TInt ret( UiccReadSMSOrSMSRecordCountReq( iSmsSlotLocation, ETrIdReadSMSForComplete ) );
  3788             if ( KErrNone != ret )
  3741             if ( KErrNone != ret )
  3817 // -----------------------------------------------------------------------------
  3770 // -----------------------------------------------------------------------------
  3818 //
  3771 //
  3819 void CMmSmsMessHandler::GetNumOfEFSMSRecords( void )
  3772 void CMmSmsMessHandler::GetNumOfEFSMSRecords( void )
  3820     {
  3773     {
  3821 TFLOGSTRING("TSY: CMmSmsMessHandler::GetNumOfEFSMSRecords" );
  3774 TFLOGSTRING("TSY: CMmSmsMessHandler::GetNumOfEFSMSRecords" );
  3822 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_GETNUMOFEFSMSRECORDS, "CMmSmsMessHandler::GetNumOfEFSMSRecords" );
  3775 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_GETNUMOFEFSMSRECORDS_TD, "CMmSmsMessHandler::GetNumOfEFSMSRecords" );
  3823 
  3776 
  3824     TUint8 recordID( 0 );
  3777     TUint8 recordID( 0 );
  3825     TUiccTrId trId( ETrIdReadSMSRecordCount );
  3778     TUiccTrId trId( ETrIdReadSMSRecordCount );
  3826 
  3779 
  3827     CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq ( recordID,
  3780     CMmSmsMessHandler::UiccReadSMSOrSMSRecordCountReq ( recordID,
  3836 void CMmSmsMessHandler::GetNumOfEFSMSRecordsResp(
  3789 void CMmSmsMessHandler::GetNumOfEFSMSRecordsResp(
  3837     TInt aStatus,
  3790     TInt aStatus,
  3838     const TDesC8& aFileData )
  3791     const TDesC8& aFileData )
  3839     {
  3792     {
  3840 TFLOGSTRING("TSY: CMmSmsMessHandler::GetNumOfEFSMSRecordsResp" );
  3793 TFLOGSTRING("TSY: CMmSmsMessHandler::GetNumOfEFSMSRecordsResp" );
  3841 OstTraceExt2( TRACE_NORMAL, CMMSMSMESSHANDLER_GETNUMOFEFSMSRECORDSRESP, "CMmSmsMessHandler::GetNumOfEFSMSRecordsResp;aStatus=%d;aFileData=%s", aStatus, aFileData );
  3794 OstTraceExt2( TRACE_NORMAL,  CMMSMSMESSHANDLER_GETNUMOFEFSMSRECORDSRESP_TD, "CMmSmsMessHandler::GetNumOfEFSMSRecordsResp;aStatus=%d;aFileData=%s", aStatus, aFileData );
  3842 
  3795 
  3843     //Save number of SMS locations on SIM card
  3796     //Save number of SMS locations on SIM card
  3844     TInt smsNumOfLoc( 0 );
  3797     TInt smsNumOfLoc( 0 );
  3845 
  3798 
  3846     if ( KErrNone == aStatus )
  3799     if ( UICC_STATUS_OK == aStatus )
  3847         {
  3800         {
  3848         TFci fci( aFileData );
  3801         TFci fci( aFileData );
  3849         smsNumOfLoc = fci.GetNumberOfRecords();
  3802         smsNumOfLoc = fci.GetNumberOfRecords();
  3850         }
  3803         }
  3851 
  3804 
  3853     if ( smsNumOfLoc > 0 )
  3806     if ( smsNumOfLoc > 0 )
  3854         {
  3807         {
  3855         // got the total number or SIM SMS entries
  3808         // got the total number or SIM SMS entries
  3856         iSmsCache.SetTotalEntriesL( smsNumOfLoc );
  3809         iSmsCache.SetTotalEntriesL( smsNumOfLoc );
  3857 TFLOGSTRING2("TSY: CMmSmsMessHandler::SimStSmsGetNumOfLocRespL -- total number of locations on sim %d", iSmsCache.TotalEntries() );
  3810 TFLOGSTRING2("TSY: CMmSmsMessHandler::SimStSmsGetNumOfLocRespL -- total number of locations on sim %d", iSmsCache.TotalEntries() );
  3858 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_GETNUMOFEFSMSRECORDSRESP, "CMmSmsMessHandler::GetNumOfEFSMSRecordsResp;iSmsCache.TotalEntries()=%d", iSmsCache.TotalEntries() );
  3811 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_GETNUMOFEFSMSRECORDSRESP_TD, "CMmSmsMessHandler::GetNumOfEFSMSRecordsResp;iSmsCache.TotalEntries()=%d", iSmsCache.TotalEntries() );
  3859 
  3812 
  3860         // now start reading entries one by one starting from record 1
  3813         // now start reading entries one by one starting from record 1
  3861         UiccReadSMSOrSMSRecordCountReq( 1, ETrIdReadSMS );
  3814         UiccReadSMSOrSMSRecordCountReq( 1, ETrIdReadSMS );
  3862         }
  3815         }
  3863     else
  3816     else
  3886 // -----------------------------------------------------------------------------
  3839 // -----------------------------------------------------------------------------
  3887 //
  3840 //
  3888 void CMmSmsMessHandler::UiccDeleteSMSResp( TInt aStatus )
  3841 void CMmSmsMessHandler::UiccDeleteSMSResp( TInt aStatus )
  3889     {
  3842     {
  3890 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccDeleteSMSResp aStatus: %d", aStatus );
  3843 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccDeleteSMSResp aStatus: %d", aStatus );
  3891 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_UICCDELETESMSRESP, "CMmSmsMessHandler::UiccDeleteSMSResp;aStatus=%d", aStatus );
  3844 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_UICCDELETESMSRESP_TD, "CMmSmsMessHandler::UiccDeleteSMSResp;aStatus=%d", aStatus );
  3892 
  3845 
  3893     // Create Package
  3846     // Create Package
  3894     CMmDataPackage package;
  3847     CMmDataPackage package;
  3895 
  3848 
  3896     TInt error( CMmStaticUtility::UICCCSCauseToEpocError( aStatus ) );
  3849     TInt error( CMmStaticUtility::UICCCSCauseToEpocError( aStatus ) );
  3909 // -----------------------------------------------------------------------------
  3862 // -----------------------------------------------------------------------------
  3910 //
  3863 //
  3911 void CMmSmsMessHandler::UiccDeleteAllSMSResp( TInt aStatus )
  3864 void CMmSmsMessHandler::UiccDeleteAllSMSResp( TInt aStatus )
  3912     {
  3865     {
  3913 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccDeleteSMSResp aStatus: %d", aStatus );
  3866 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccDeleteSMSResp aStatus: %d", aStatus );
  3914 OstTrace1( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCDELETEALLSMSRESP, "CMmSmsMessHandler::UiccDeleteAllSMSResp;aStatus=%d", aStatus );
  3867 OstTrace1( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCDELETEALLSMSRESP_TD, "CMmSmsMessHandler::UiccDeleteAllSMSResp;aStatus=%d", aStatus );
  3915 
  3868 
  3916     // Create Package
  3869     // Create Package
  3917     CMmDataPackage package;
  3870     CMmDataPackage package;
  3918 
  3871 
  3919     TInt error( CMmStaticUtility::UICCCSCauseToEpocError( aStatus ) );
  3872     TInt error( CMmStaticUtility::UICCCSCauseToEpocError( aStatus ) );
  3946 TBool CMmSmsMessHandler::CheckSCTimestamp(
  3899 TBool CMmSmsMessHandler::CheckSCTimestamp(
  3947     const RMobileSmsStore::TMobileGsmSmsEntryV1& aEntry,
  3900     const RMobileSmsStore::TMobileGsmSmsEntryV1& aEntry,
  3948     const TTime& aScTime )
  3901     const TTime& aScTime )
  3949     {
  3902     {
  3950 TFLOGSTRING("TSY: CMmSmsMessHandler::CheckSCTimestamp");
  3903 TFLOGSTRING("TSY: CMmSmsMessHandler::CheckSCTimestamp");
  3951 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp" );
  3904 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp" );
  3952     TBool matchFound( EFalse );
  3905     TBool matchFound( EFalse );
  3953 
  3906 
  3954     TInt offset( 1 ); // Message Reference position
  3907     TInt offset( 1 ); // Message Reference position
  3955     TInt messageReference( aEntry.iMsgData[offset] );
  3908     TInt messageReference( aEntry.iMsgData[offset] );
  3956     // Destination address length is integer representation
  3909     // Destination address length is integer representation
  3973 
  3926 
  3974     // Ignore this messsage if month or day are zero (should not happen)
  3927     // Ignore this messsage if month or day are zero (should not happen)
  3975     if ( ( 0 == scTimeStamp[1] ) || ( 0 == scTimeStamp[2] ) )
  3928     if ( ( 0 == scTimeStamp[1] ) || ( 0 == scTimeStamp[2] ) )
  3976         {
  3929         {
  3977 TFLOGSTRING("TSY:CMmSmsMessHandler::CheckSCTimestamp:Invalid timestamp found, ignored.");
  3930 TFLOGSTRING("TSY:CMmSmsMessHandler::CheckSCTimestamp:Invalid timestamp found, ignored.");
  3978 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp, Invalid timestamp found, ignored" );
  3931 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp, Invalid timestamp found, ignored" );
  3979         matchFound = ETrue;
  3932         matchFound = ETrue;
  3980         }
  3933         }
  3981 
  3934 
  3982     if ( !matchFound )
  3935     if ( !matchFound )
  3983         {
  3936         {
  4029 
  3982 
  4030 #ifdef _DEBUG
  3983 #ifdef _DEBUG
  4031             // debug print
  3984             // debug print
  4032             TDateTime dt = simStoredTime.DateTime();
  3985             TDateTime dt = simStoredTime.DateTime();
  4033 TFLOGSTRING("TSY:CMmSmsMessHandler::CheckSCTimestamp:Message stored on SIM:");
  3986 TFLOGSTRING("TSY:CMmSmsMessHandler::CheckSCTimestamp:Message stored on SIM:");
  4034 OstTrace0( TRACE_NORMAL, DUP2_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp, Message stored on SIM:" );
  3987 OstTrace0( TRACE_NORMAL,  DUP2_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp, Message stored on SIM:" );
  4035 TFLOGSTRING2("    year=%d",dt.Year());
  3988 TFLOGSTRING2("    year=%d",dt.Year());
  4036 OstTrace1( TRACE_NORMAL, DUP3_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Year=%d", dt.Year() );
  3989 OstTrace1( TRACE_NORMAL,  DUP3_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Year=%d", dt.Year() );
  4037 TFLOGSTRING2("    month=%d",dt.Month()+1);
  3990 TFLOGSTRING2("    month=%d",dt.Month()+1);
  4038 OstTrace1( TRACE_NORMAL, DUP4_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Month=%d", ( dt.Month() + 1 ) );
  3991 OstTrace1( TRACE_NORMAL,  DUP4_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Month=%d", ( dt.Month() + 1 ) );
  4039 TFLOGSTRING2("    day=%d",dt.Day()+1);
  3992 TFLOGSTRING2("    day=%d",dt.Day()+1);
  4040 OstTrace1( TRACE_NORMAL, DUP5_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Day=%d", ( dt.Day() + 1 ) );
  3993 OstTrace1( TRACE_NORMAL,  DUP5_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Day=%d", ( dt.Day() + 1 ) );
  4041 TFLOGSTRING2("    hour=%d",dt.Hour());
  3994 TFLOGSTRING2("    hour=%d",dt.Hour());
  4042 OstTrace1( TRACE_NORMAL, DUP6_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Hour=%d", dt.Hour() );
  3995 OstTrace1( TRACE_NORMAL,  DUP6_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Hour=%d", dt.Hour() );
  4043 TFLOGSTRING2("    minute=%d",dt.Minute());
  3996 TFLOGSTRING2("    minute=%d",dt.Minute());
  4044 OstTrace1( TRACE_NORMAL, DUP7_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Minute=%d", dt.Minute() );
  3997 OstTrace1( TRACE_NORMAL,  DUP7_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Minute=%d", dt.Minute() );
  4045 TFLOGSTRING2("    second=%d",dt.Second());
  3998 TFLOGSTRING2("    second=%d",dt.Second());
  4046 OstTrace1( TRACE_NORMAL, DUP8_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Second=%d", dt.Second() );
  3999 OstTrace1( TRACE_NORMAL,  DUP8_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Second=%d", dt.Second() );
  4047 TFLOGSTRING2("    timezone difference=%d",simTimezoneDiff);
  4000 TFLOGSTRING2("    timezone difference=%d",simTimezoneDiff);
  4048 OstTraceExt1( TRACE_NORMAL, DUP9_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;simTimezoneDiff=%hhd", simTimezoneDiff );
  4001 OstTraceExt1( TRACE_NORMAL,  DUP9_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;simTimezoneDiff=%hhd", simTimezoneDiff );
  4049             dt = aScTime.DateTime();
  4002             dt = aScTime.DateTime();
  4050 TFLOGSTRING("TSY:CMmSmsMessHandler::CheckSCTimestamp:Message opened on client side:");
  4003 TFLOGSTRING("TSY:CMmSmsMessHandler::CheckSCTimestamp:Message opened on client side:");
  4051 OstTrace0( TRACE_NORMAL, DUP10_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp, Message opened on client side:" );
  4004 OstTrace0( TRACE_NORMAL,  DUP10_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp, Message opened on client side:" );
  4052 TFLOGSTRING2("    year=%d",dt.Year());
  4005 TFLOGSTRING2("    year=%d",dt.Year());
  4053 OstTrace1( TRACE_NORMAL, DUP11_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Year=%d", ( dt.Year() + 1 ) );
  4006 OstTrace1( TRACE_NORMAL,  DUP11_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Year=%d", ( dt.Year() + 1 ) );
  4054 TFLOGSTRING2("    month=%d",dt.Month()+1);
  4007 TFLOGSTRING2("    month=%d",dt.Month()+1);
  4055 OstTrace1( TRACE_NORMAL, DUP12_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Month=%d", ( dt.Month() + 1 ) );
  4008 OstTrace1( TRACE_NORMAL,  DUP12_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Month=%d", ( dt.Month() + 1 ) );
  4056 TFLOGSTRING2("    day=%d",dt.Day()+1);
  4009 TFLOGSTRING2("    day=%d",dt.Day()+1);
  4057 OstTrace1( TRACE_NORMAL, DUP13_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Day=%d", ( dt.Day() + 1 ) );
  4010 OstTrace1( TRACE_NORMAL,  DUP13_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Day=%d", ( dt.Day() + 1 ) );
  4058 TFLOGSTRING2("    hour=%d",dt.Hour());
  4011 TFLOGSTRING2("    hour=%d",dt.Hour());
  4059 OstTrace1( TRACE_NORMAL, DUP14_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Hour=%d", dt.Hour() );
  4012 OstTrace1( TRACE_NORMAL,  DUP14_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Hour=%d", dt.Hour() );
  4060 TFLOGSTRING2("    minute=%d",dt.Minute());
  4013 TFLOGSTRING2("    minute=%d",dt.Minute());
  4061 OstTrace1( TRACE_NORMAL, DUP15_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Minute=%d", dt.Minute() );
  4014 OstTrace1( TRACE_NORMAL,  DUP15_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Minute=%d", dt.Minute() );
  4062 TFLOGSTRING2("    second=%d",dt.Second());
  4015 TFLOGSTRING2("    second=%d",dt.Second());
  4063 OstTrace1( TRACE_NORMAL, DUP16_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP, "CMmSmsMessHandler::CheckSCTimestamp;Second=%d", dt.Second() );
  4016 OstTrace1( TRACE_NORMAL,  DUP16_CMMSMSMESSHANDLER_CHECKSCTIMESTAMP_TD, "CMmSmsMessHandler::CheckSCTimestamp;Second=%d", dt.Second() );
  4064             // debug print
  4017             // debug print
  4065 #endif // _DEBUG
  4018 #endif // _DEBUG
  4066 
  4019 
  4067             if ( simStoredTime == aScTime )
  4020             if ( simStoredTime == aScTime )
  4068                 {
  4021                 {
  4083 TInt CMmSmsMessHandler::UiccUpdateSMSStatus(
  4036 TInt CMmSmsMessHandler::UiccUpdateSMSStatus(
  4084     const TUint8 aRecordId
  4037     const TUint8 aRecordId
  4085     )
  4038     )
  4086     {
  4039     {
  4087 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccUpdateSMSStatusReq aRecordId: %d", aRecordId );
  4040 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccUpdateSMSStatusReq aRecordId: %d", aRecordId );
  4088 OstTraceExt1( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCUPDATESMSSTATUS, "CMmSmsMessHandler::UiccUpdateSMSStatus;aRecordId=%hhu", aRecordId );
  4041 OstTraceExt1( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCUPDATESMSSTATUS_TD, "CMmSmsMessHandler::UiccUpdateSMSStatus;aRecordId=%hhu", aRecordId );
  4089 
  4042 
  4090     // Read parameters from SIM
  4043     // Read parameters from SIM
  4091     // Set parameters for UICC_APPL_CMD_REQ message
  4044     // Set parameters for UICC_APPL_CMD_REQ message
  4092     iRecordId = aRecordId;
  4045     iRecordId = aRecordId;
  4093     TUiccReadLinearFixed params;
  4046     TUiccReadLinearFixed params;
  4118 void CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp(
  4071 void CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp(
  4119     TInt aStatus,
  4072     TInt aStatus,
  4120     const TDesC8& aFileData )
  4073     const TDesC8& aFileData )
  4121     {
  4074     {
  4122 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp" );
  4075 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccReadSMSResp" );
  4123 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCUPDATESMSSTATUSREADSMSRESP, "CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp" );
  4076 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCUPDATESMSSTATUSREADSMSRESP_TD, "CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp" );
  4124 
  4077 
  4125     if ( KErrNone == aStatus )
  4078     if ( UICC_STATUS_OK == aStatus )
  4126         {
  4079         {
  4127         if ( 0 != aFileData.Length() )
  4080         if ( 0 != aFileData.Length() )
  4128             {
  4081             {
  4129            // Set parameters for UICC_APPL_CMD_REQ message
  4082            // Set parameters for UICC_APPL_CMD_REQ message
  4130             TUiccWriteLinearFixed params;
  4083             TUiccWriteLinearFixed params;
  4182 // -----------------------------------------------------------------------------
  4135 // -----------------------------------------------------------------------------
  4183 //
  4136 //
  4184 void CMmSmsMessHandler::UiccUpdateSMSStatusWriteSMSResp( TInt aStatus )
  4137 void CMmSmsMessHandler::UiccUpdateSMSStatusWriteSMSResp( TInt aStatus )
  4185     {
  4138     {
  4186 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp aStatus: %d", aStatus );
  4139 TFLOGSTRING2("TSY: CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp aStatus: %d", aStatus );
  4187 OstTrace1( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_UICCUPDATESMSSTATUSREADSMSRESP, "CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp;aStatus=%d", aStatus );
  4140 OstTrace1( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_UICCUPDATESMSSTATUSREADSMSRESP_TD, "CMmSmsMessHandler::UiccUpdateSMSStatusReadSMSResp;aStatus=%d", aStatus );
  4188 
  4141 
  4189     iMessageRouter->Complete(
  4142     iMessageRouter->Complete(
  4190         ECustomSetSimMessageStatusReadIPC,
  4143         ECustomSetSimMessageStatusReadIPC,
  4191         CMmStaticUtility::UICCCSCauseToEpocError( aStatus )  );
  4144         CMmStaticUtility::UICCCSCauseToEpocError( aStatus )  );
  4192 
  4145 
  4193     // Update the same flag also in TSY's cache.
  4146     // Update the same flag also in TSY's cache.
  4194     if ( KErrNone == aStatus )
  4147     if ( UICC_STATUS_OK == aStatus )
  4195         {
  4148         {
  4196         iSmsCache.SetStorageStatus( iRecordId, RMobileSmsStore::EStoredMessageRead );
  4149         iSmsCache.SetStorageStatus( iRecordId, RMobileSmsStore::EStoredMessageRead );
  4197         }
  4150         }
  4198 
  4151 
  4199     }
  4152     }
  4204 // -----------------------------------------------------------------------------
  4157 // -----------------------------------------------------------------------------
  4205 //
  4158 //
  4206 TInt CMmSmsMessHandler::UiccGetSmspEntryReq()
  4159 TInt CMmSmsMessHandler::UiccGetSmspEntryReq()
  4207     {
  4160     {
  4208 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccGetSmspEntryReq" );
  4161 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccGetSmspEntryReq" );
  4209 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCREADNUMOFSMSPENTRIES, "CMmSmsMessHandler::UiccGetSmspEntryReq" );
  4162 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCREADNUMOFSMSPENTRIES_TD, "CMmSmsMessHandler::UiccGetSmspEntryReq" );
  4210 
  4163 
  4211     // Set parameters for UICC_APPL_CMD_REQ message
  4164     // Set parameters for UICC_APPL_CMD_REQ message
  4212     TUiccReadLinearFixed params;
  4165     TUiccReadLinearFixed params;
  4213     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  4166     params.messHandlerPtr = static_cast<MUiccOperationBase*>( this );
  4214     params.trId = ETrIdGetSmspEntries;
  4167     params.trId = ETrIdGetSmspEntries;
  4234 // -----------------------------------------------------------------------------
  4187 // -----------------------------------------------------------------------------
  4235 //
  4188 //
  4236 TInt CMmSmsMessHandler::UiccStoreSmspEntry( const TDesC8& aFileData )
  4189 TInt CMmSmsMessHandler::UiccStoreSmspEntry( const TDesC8& aFileData )
  4237     {
  4190     {
  4238 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccStoreSmspEntry" );
  4191 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccStoreSmspEntry" );
  4239 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_UICCSTORESMSPENTRY, "CMmSmsMessHandler::UiccStoreSmspEntry" );
  4192 OstTrace0( TRACE_NORMAL,  CMMSMSMESSHANDLER_UICCSTORESMSPENTRY_TD, "CMmSmsMessHandler::UiccStoreSmspEntry" );
  4240 
  4193 
  4241     TInt ret( KErrNone );
  4194     TInt ret( KErrNone );
  4242     TInt dataLength( aFileData.Length() );
  4195     TInt dataLength( aFileData.Length() );
  4243     TPtrC8 data( KNullDesC8 );
  4196     TPtrC8 data( KNullDesC8 );
  4244     TSmsParameters* smsParam = new ( ELeave ) TSmsParameters();
  4197     TSmsParameters* smsParam = new ( ELeave ) TSmsParameters();
  4364 //
  4317 //
  4365 TInt CMmSmsMessHandler::UiccSmsUpdateParameterReq(
  4318 TInt CMmSmsMessHandler::UiccSmsUpdateParameterReq(
  4366     const CMmDataPackage* aDataPackage )
  4319     const CMmDataPackage* aDataPackage )
  4367     {
  4320     {
  4368 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccSmsUpdateParameterReq");
  4321 TFLOGSTRING("TSY: CMmSmsMessHandler::UiccSmsUpdateParameterReq");
  4369 OstTrace0( TRACE_NORMAL, DUP1_CMMSMSMESSHANDLER_UICCSTORESMSPENTRY, "CMmSmsMessHandler::UiccStoreSmspEntry" );
  4322 OstTrace0( TRACE_NORMAL,  DUP1_CMMSMSMESSHANDLER_UICCSTORESMSPENTRY_TD, "CMmSmsMessHandler::UiccStoreSmspEntry" );
  4370 
  4323 
  4371     RMobileSmsMessaging::TMobileSmspEntryV1* smsParameters;
  4324     RMobileSmsMessaging::TMobileSmspEntryV1* smsParameters;
  4372     // Unpack data
  4325     // Unpack data
  4373     aDataPackage->UnPackData( &smsParameters );
  4326     aDataPackage->UnPackData( &smsParameters );
  4374 
  4327 
  4468     params.fileData.Append( smspBuffer );
  4421     params.fileData.Append( smspBuffer );
  4469 
  4422 
  4470     return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
  4423     return iMmUiccMessHandler->CreateUiccApplCmdReq( params );
  4471     }
  4424     }
  4472 
  4425 
       
  4426 
       
  4427 // -----------------------------------------------------------------------------
       
  4428 // CMmSmsMessHandler::SmsResourceConfInd
       
  4429 // -----------------------------------------------------------------------------
       
  4430 //
       
  4431 void CMmSmsMessHandler::SmsResourceConfInd( const TIsiReceiveC& aIsiMsg )
       
  4432     {
       
  4433 TFLOGSTRING( "TSY: CMmSmsMessHandler::SmsResourceConfInd" );
       
  4434 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRESOURCECONFIND_TD, "CMmSmsMessHandler::SmsResourceConfInd" );
       
  4435 
       
  4436     // To check The receive indication is for startup or reconfiguration
       
  4437     if ( SMS_RES_CONF_STARTUP == aIsiMsg.Get8bit(
       
  4438         ISI_HEADER_SIZE + SMS_RESOURCE_CONF_IND_OFFSET_CONFSTATUS ) )
       
  4439         {
       
  4440         TUint sbStartOffset( 0 );
       
  4441         // Check if resource control is requested for MO SM.
       
  4442         if ( KErrNone == aIsiMsg.FindSubBlockOffsetById(
       
  4443             ISI_HEADER_SIZE + SIZE_SMS_RESOURCE_CONF_IND,
       
  4444             SMS_SB_RESOURCE_CONF_REQUIRED,
       
  4445             EIsiSubBlockTypeId16Len16,
       
  4446             sbStartOffset ) )
       
  4447             {
       
  4448             TUint16 resource( aIsiMsg.Get16bit( 
       
  4449                 sbStartOffset + SMS_SB_RESOURCE_CONF_REQUIRED_OFFSET_RESPP ) );
       
  4450             // Check MO SMS control is supported by SIM service table
       
  4451             if ( SMS_RES_ID_CONF_MO_SM_INIT == resource &&
       
  4452                  NULL == iPhonetReceiver->SatMessHandler() )
       
  4453                 {
       
  4454                 SmsResourceConfReq();
       
  4455                 }
       
  4456             }
       
  4457         }
       
  4458     }
       
  4459 
       
  4460 
       
  4461 // -----------------------------------------------------------------------------
       
  4462 // CMmSmsMessHandler::SmsResourceConfReq
       
  4463 // -----------------------------------------------------------------------------
       
  4464 //
       
  4465 void CMmSmsMessHandler::SmsResourceConfReq()
       
  4466     {
       
  4467 TFLOGSTRING("TSY: CMmSmsMessHandler::SmsResourceConfReq");
       
  4468 OstTrace0( TRACE_NORMAL, CMMSMSMESSHANDLER_SMSRESOURCECONFREQ_TD, "CMmSmsMessHandler::SmsResourceConfReq" );
       
  4469 
       
  4470     TBuf8<SIZE_SMS_SB_RESOURCE_CONF> data;
       
  4471     TIsiSubBlock ResourceConfReqSb(
       
  4472         data,
       
  4473         SMS_SB_RESOURCE_CONF,
       
  4474         EIsiSubBlockTypeId16Len16 );
       
  4475 
       
  4476     // set SMS_RESOURCE_IDS to SMS_RES_ID_MO_SM_INIT_DISABLE
       
  4477     data.Append( KSmsResIdMoSmInitDisable >> KShift8 );
       
  4478     data.Append( KSmsResIdMoSmInitDisable );
       
  4479 
       
  4480     // set SMS_RESOURCE_IDS_MASK to SMS_RES_ID_MASK_MO_SM_INIT
       
  4481     data.Append( SMS_RES_ID_MASK_MO_SM_INIT >> KShift8 );
       
  4482     data.Append( SMS_RES_ID_MASK_MO_SM_INIT );
       
  4483 
       
  4484     // Create SMS_RESOURCE_CONF_REQ message
       
  4485     TIsiSend isiMsg( iPhoNetSender->SendBufferDes() );
       
  4486     isiMsg.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_SMS );
       
  4487     isiMsg.Set8bit(
       
  4488         ISI_HEADER_SIZE + SMS_RESOURCE_CONF_REQ_OFFSET_TRANSID,
       
  4489         0 );
       
  4490     isiMsg.Set8bit(
       
  4491         ISI_HEADER_SIZE + SMS_RESOURCE_CONF_REQ_OFFSET_MESSAGEID,
       
  4492         SMS_RESOURCE_CONF_REQ );
       
  4493     isiMsg.Set8bit(
       
  4494         ISI_HEADER_SIZE + SMS_RESOURCE_CONF_REQ_OFFSET_CONFOPERATION,
       
  4495         SMS_RES_CONF_SET );
       
  4496     isiMsg.Set8bit(
       
  4497         ISI_HEADER_SIZE + SMS_RESOURCE_CONF_REQ_OFFSET_SUBBLOCKCOUNT,
       
  4498         1 );
       
  4499 
       
  4500     isiMsg.CopyData(
       
  4501         ISI_HEADER_SIZE + SIZE_SMS_RESOURCE_CONF_REQ,
       
  4502         ResourceConfReqSb.CompleteSubBlock() );
       
  4503 
       
  4504     iPhoNetSender->Send( isiMsg.Complete() );
       
  4505     }
       
  4506 
  4473 //  End of File
  4507 //  End of File