adaptationlayer/tsy/nokiatsy_dll/src/cmmbroadmesshandler.cpp
changeset 9 8486d82aef45
parent 5 8ccc39f9d787
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".
     9 * Initial Contributors:
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description: 
    14 * Description:
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 
    19 
    19 
    68 // -----------------------------------------------------------------------------
    68 // -----------------------------------------------------------------------------
    69 //
    69 //
    70 CMmBroadMessHandler::CMmBroadMessHandler()
    70 CMmBroadMessHandler::CMmBroadMessHandler()
    71     {
    71     {
    72 TFLOGSTRING("TSY: CMmBroadMessHandler::CMmBroadMessHandler");
    72 TFLOGSTRING("TSY: CMmBroadMessHandler::CMmBroadMessHandler");
    73 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_CMMBROADMESSHANDLER, "CMmBroadMessHandler::CMmBroadMessHandler" );
    73 OstTrace0( TRACE_NORMAL,  CMMBROADMESSHANDLER_CMMBROADMESSHANDLER_TD, "CMmBroadMessHandler::CMmBroadMessHandler" );
    74     }
    74     }
    75 
    75 
    76 // -----------------------------------------------------------------------------
    76 // -----------------------------------------------------------------------------
    77 // CMmSmsMessHandler::ConstructL
    77 // CMmSmsMessHandler::ConstructL
    78 // Symbian 2nd phase constructor can leave.
    78 // Symbian 2nd phase constructor can leave.
    79 // -----------------------------------------------------------------------------
    79 // -----------------------------------------------------------------------------
    80 //
    80 //
    81 void CMmBroadMessHandler::ConstructL()
    81 void CMmBroadMessHandler::ConstructL()
    82     {
    82     {
    83 TFLOGSTRING("TSY: CMmBroadMessHandler::ConstructL");
    83 TFLOGSTRING("TSY: CMmBroadMessHandler::ConstructL");
    84 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_CONSTRUCTL, "CMmBroadMessHandler::ConstructL" );
    84 OstTrace0( TRACE_NORMAL,  CMMBROADMESSHANDLER_CONSTRUCTL_TD, "CMmBroadMessHandler::ConstructL" );
    85     // Initialise the array. Maximun of pages in a WCDMA CBS message is 15
    85     // Initialise the array. Maximun of pages in a WCDMA CBS message is 15
    86     iCbsMsg = new( ELeave ) CArrayPtrFlat< TWcdmaCbsMsg >( 10 );
    86     iCbsMsg = new( ELeave ) CArrayPtrFlat< TWcdmaCbsMsg >( 10 );
    87 
    87 
    88     // Cb subscription number.
    88     // Cb subscription number.
    89     iCbSubscriptionNumber = SMS_NEW_SUBSCRIPTION;
    89     iCbSubscriptionNumber = SMS_NEW_SUBSCRIPTION;
   101     CMmPhoNetReceiver* aPhoNetReceiver, // a pointer to the phonetReceiver
   101     CMmPhoNetReceiver* aPhoNetReceiver, // a pointer to the phonetReceiver
   102     CMmMessageRouter* aMessageRouter    // a pointer to the Message router
   102     CMmMessageRouter* aMessageRouter    // a pointer to the Message router
   103     )
   103     )
   104     {
   104     {
   105 TFLOGSTRING("TSY: CMmBroadMessHandler::NewL");
   105 TFLOGSTRING("TSY: CMmBroadMessHandler::NewL");
   106 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_NEWL, "CMmBroadMessHandler::NewL" );
   106 OstTrace0( TRACE_NORMAL,  CMMBROADMESSHANDLER_NEWL_TD, "CMmBroadMessHandler::NewL" );
   107     CMmBroadMessHandler* mmBroadMessHandler =
   107     CMmBroadMessHandler* mmBroadMessHandler =
   108         new( ELeave ) CMmBroadMessHandler();
   108         new( ELeave ) CMmBroadMessHandler();
   109 
   109 
   110     CleanupStack::PushL( mmBroadMessHandler );
   110     CleanupStack::PushL( mmBroadMessHandler );
   111     mmBroadMessHandler->iPhoNetSender = aPhoNetSender;
   111     mmBroadMessHandler->iPhoNetSender = aPhoNetSender;
   132 // -----------------------------------------------------------------------------
   132 // -----------------------------------------------------------------------------
   133 //
   133 //
   134 CMmBroadMessHandler::~CMmBroadMessHandler()
   134 CMmBroadMessHandler::~CMmBroadMessHandler()
   135     {
   135     {
   136 TFLOGSTRING("TSY: CMmBroadMessHandler::~CMmBroadMessHandler");
   136 TFLOGSTRING("TSY: CMmBroadMessHandler::~CMmBroadMessHandler");
   137 OstTrace0( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_CMMBROADMESSHANDLER, "CMmBroadMessHandler::~CMmBroadMessHandler" );
   137 OstTrace0( TRACE_NORMAL,  DUP1_CMMBROADMESSHANDLER_CMMBROADMESSHANDLER_TD, "CMmBroadMessHandler::~CMmBroadMessHandler" );
   138     if ( iCbsMsg )
   138     if ( iCbsMsg )
   139         {
   139         {
   140         iCbsMsg->ResetAndDestroy();
   140         iCbsMsg->ResetAndDestroy();
   141         delete iCbsMsg;
   141         delete iCbsMsg;
   142         }
   142         }
   151     {
   151     {
   152     TUint8 resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
   152     TUint8 resource( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_RESOURCEID ) );
   153     TUint8 messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
   153     TUint8 messageId( aIsiMessage.Get8bit( ISI_HEADER_OFFSET_MESSAGEID ) );
   154 
   154 
   155 TFLOGSTRING3("TSY: CMmBroadMessHandler::ReceiveMessageL. Resource:%d, MsgId:%d", resource,messageId);
   155 TFLOGSTRING3("TSY: CMmBroadMessHandler::ReceiveMessageL. Resource:%d, MsgId:%d", resource,messageId);
   156 OstTraceExt2( TRACE_NORMAL, CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL;resource=%hhd;messageId=%hhx", resource, messageId );
   156 OstTraceExt2( TRACE_NORMAL,  CMMBROADMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmBroadMessHandler::ReceiveMessageL;resource=%hhd;messageId=%hhx", resource, messageId );
   157 
   157 
   158     switch ( resource )
   158     switch ( resource )
   159         {
   159         {
   160         case PN_SMS:
   160         case PN_SMS:
   161             {
   161             {
   162 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL - PN_SMS");
   162 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL - PN_SMS");
   163 OstTrace0( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL - PN_SMS" );
   163 OstTrace0( TRACE_NORMAL,  DUP1_CMMBROADMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmBroadMessHandler::ReceiveMessageL - PN_SMS" );
   164 
   164 
   165             switch( messageId )
   165             switch( messageId )
   166                 {
   166                 {
   167                 case SMS_CB_ROUTING_RESP:
   167                 case SMS_CB_ROUTING_RESP:
   168                     {
   168                     {
   175                     break;
   175                     break;
   176                     }
   176                     }
   177                 default:
   177                 default:
   178                     {
   178                     {
   179 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL - PN_SMS - default");
   179 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL - PN_SMS - default");
   180 OstTrace0( TRACE_NORMAL, DUP3_CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL - PN_SMS - default" );
   180 OstTrace0( TRACE_NORMAL,  DUP3_CMMBROADMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmBroadMessHandler::ReceiveMessageL - PN_SMS - default" );
   181                     // No appropriate handler methods for ISI-message found.
   181                     // No appropriate handler methods for ISI-message found.
   182                     break;
   182                     break;
   183                     }
   183                     }
   184                 }
   184                 }
   185             break;
   185             break;
   186             }
   186             }
   187         default:
   187         default:
   188             {
   188             {
   189 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL. Switch resource case default");
   189 TFLOGSTRING("TSY: CMmBroadMessHandler::ReceiveMessageL. Switch resource case default");
   190 OstTrace0( TRACE_NORMAL, DUP2_CMMBROADMESSHANDLER_RECEIVEMESSAGEL, "CMmBroadMessHandler::ReceiveMessageL. Switch resource case default" );
   190 OstTrace0( TRACE_NORMAL,  DUP2_CMMBROADMESSHANDLER_RECEIVEMESSAGEL_TD, "CMmBroadMessHandler::ReceiveMessageL. Switch resource case default" );
   191             // No appropriate handler methods for ISI-message found.
   191             // No appropriate handler methods for ISI-message found.
   192             break;
   192             break;
   193             }
   193             }
   194         }
   194         }
   195     return;
   195     return;
   206     TUint8 aTransId, // Transaction ID
   206     TUint8 aTransId, // Transaction ID
   207     const CMmDataPackage* aDataPackage // Data Package
   207     const CMmDataPackage* aDataPackage // Data Package
   208     )
   208     )
   209     {
   209     {
   210 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingRequest");
   210 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingRequest");
   211 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest" );
   211 OstTrace0( TRACE_NORMAL,  CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST_TD, "CMmBroadMessHandler::SmsCbRoutingRequest" );
   212 
   212 
   213     // Variable for the routing command initialized
   213     // Variable for the routing command initialized
   214     TUint8 routingCommand( 0 );
   214     TUint8 routingCommand( 0 );
   215     // Contents of the data package
   215     // Contents of the data package
   216     TCbsCbmiAndLangAndFilter data;
   216     TCbsCbmiAndLangAndFilter data;
   219 
   219 
   220     if ( RMobileBroadcastMessaging::EBroadcastAcceptNone == data.iSetting )
   220     if ( RMobileBroadcastMessaging::EBroadcastAcceptNone == data.iSetting )
   221         {
   221         {
   222         // Release routing
   222         // Release routing
   223 TFLOGSTRING("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be released.");
   223 TFLOGSTRING("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be released.");
   224 OstTrace0( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be released." );
   224 OstTrace0( TRACE_NORMAL,  DUP1_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST_TD, "CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be released." );
   225         routingCommand = SMS_ROUTING_RELEASE;
   225         routingCommand = SMS_ROUTING_RELEASE;
   226         }
   226         }
   227     else if ( RMobileBroadcastMessaging::EBroadcastAcceptAll == data.iSetting )
   227     else if ( RMobileBroadcastMessaging::EBroadcastAcceptAll == data.iSetting )
   228         {
   228         {
   229         // Activate routing
   229         // Activate routing
   230 TFLOGSTRING("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be activated.");
   230 TFLOGSTRING("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be activated.");
   231 OstTrace0( TRACE_NORMAL, DUP2_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be activated." );
   231 OstTrace0( TRACE_NORMAL,  DUP2_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST_TD, "CMmBroadMessHandler::SmsCbRoutingRequest:CB routing will be activated." );
   232         routingCommand = SMS_ROUTING_SET;
   232         routingCommand = SMS_ROUTING_SET;
   233         }
   233         }
   234     else
   234     else
   235         {
   235         {
   236 TFLOGSTRING2("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:Unsupported filter 0x%x.",data.iSetting);
   236 TFLOGSTRING2("TSY:CMmBroadMessHandler::SmsCbRoutingRequest:Unsupported filter 0x%x.",data.iSetting);
   237 // Following lines flagged out just get rid of compiler warning when trace
   237 // Following lines flagged out just get rid of compiler warning when trace
   238 // compiler is not in use.
   238 // compiler is not in use.
   239 #ifdef OST_TRACE_COMPILER_IN_USE
   239 #ifdef OST_TRACE_COMPILER_IN_USE
   240         TUint tempValue = data.iSetting; // Parameter just for tracing
   240         TUint tempValue = data.iSetting; // Parameter just for tracing
   241 OstTraceExt1( TRACE_NORMAL, DUP3_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST, "CMmBroadMessHandler::SmsCbRoutingRequest;data.iSetting=%hhx", tempValue );
   241 OstTraceExt1( TRACE_NORMAL,  DUP3_CMMBROADMESSHANDLER_SMSCBROUTINGREQUEST_TD, "CMmBroadMessHandler::SmsCbRoutingRequest;data.iSetting=%hhx", tempValue );
   242 #endif // OST_TRACE_COMPILER_IN_USE
   242 #endif // OST_TRACE_COMPILER_IN_USE
   243         return KErrArgument;
   243         return KErrArgument;
   244         }
   244         }
   245 
   245 
   246     // Create a buffer to hold the request
   246     // Create a buffer to hold the request
   280 void CMmBroadMessHandler::SmsCbRoutingResp
   280 void CMmBroadMessHandler::SmsCbRoutingResp
   281     (
   281     (
   282     const TIsiReceiveC& aSmsCbRoutingResp // Received isimsg
   282     const TIsiReceiveC& aSmsCbRoutingResp // Received isimsg
   283     )
   283     )
   284     {
   284     {
   285 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingResp");
       
   286 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_SMSGSMCBROUTINGRESP, "CMmBroadMessHandler::SmsCbRoutingResp" );
       
   287     TInt ipc( 0 ); // Initialize to zero
   285     TInt ipc( 0 ); // Initialize to zero
   288 
       
   289     iCbSubscriptionNumber = aSmsCbRoutingResp.Get8bit(
       
   290         ISI_HEADER_SIZE + SMS_CB_ROUTING_RESP_OFFSET_SUBSCRIPTIONNUMBER );
       
   291 
       
   292     TUint8 isiCause( aSmsCbRoutingResp.Get8bit( ISI_HEADER_SIZE
       
   293         + SMS_CB_ROUTING_RESP_OFFSET_SMSCAUSE ) );
       
   294 
       
   295     TInt cause( CMmStaticUtility::CSCauseToEpocError(
       
   296         PN_SMS,
       
   297         SMS_CAUSE_TYPE_COMMON,
       
   298         isiCause ) );
       
   299 
   286 
   300     TUint8 traid( aSmsCbRoutingResp.Get8bit( ISI_HEADER_SIZE
   287     TUint8 traid( aSmsCbRoutingResp.Get8bit( ISI_HEADER_SIZE
   301         + SMS_CB_ROUTING_RESP_OFFSET_TRANSID ) );
   288         + SMS_CB_ROUTING_RESP_OFFSET_TRANSID ) );
   302 
   289 
   303     // Response for SmsGsmCbRoutingReq (receive message)
   290     if( EBroadcastMessagingReceiveMessage == traid ||
   304     if ( EBroadcastMessagingReceiveMessage == traid )
   291         EBroadcastMessagingReceiveMessageCancel == traid ||
   305         {
   292         EBroadcastMessagingSetFilterSetting == traid )
   306         ipc = EMobileBroadcastMessagingReceiveMessage;
   293         {
   307         }
   294 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingResp");
   308     // Response for SmsGsmCbRoutingReq (receive message cancel)
   295 OstTrace0( TRACE_NORMAL,  CMMBROADMESSHANDLER_SMSGSMCBROUTINGRESP_TD, "CMmBroadMessHandler::SmsCbRoutingResp" );
   309     else if ( EBroadcastMessagingReceiveMessageCancel == traid )
   296 
   310         {
   297         iCbSubscriptionNumber = aSmsCbRoutingResp.Get8bit(
   311         ipc = EMobileBroadcastMessagingReceiveMessageCancel;
   298             ISI_HEADER_SIZE + SMS_CB_ROUTING_RESP_OFFSET_SUBSCRIPTIONNUMBER );
   312         }
   299 
   313     // Response for SmsGsmCbRoutingReq (set filter setting)
   300         TUint8 isiCause( aSmsCbRoutingResp.Get8bit( ISI_HEADER_SIZE
   314     else if ( EBroadcastMessagingSetFilterSetting == traid )
   301             + SMS_CB_ROUTING_RESP_OFFSET_SMSCAUSE ) );
   315         {
   302 
   316         ipc = EMobileBroadcastMessagingSetFilterSetting;
   303         TInt cause( CMmStaticUtility::CSCauseToEpocError(
   317         }
   304             PN_SMS,
   318 
   305             SMS_CAUSE_TYPE_COMMON,
   319     // Complete status change indication, if ipc is set
   306             isiCause ) );
   320     if ( 0 != ipc )
   307 
   321         {
   308         // Response for SmsGsmCbRoutingReq (receive message)
   322         iMessageRouter->Complete( ipc, cause );
   309         if ( EBroadcastMessagingReceiveMessage == traid )
   323         }
   310             {
   324 
   311             ipc = EMobileBroadcastMessagingReceiveMessage;
   325     return;
   312             }
       
   313         // Response for SmsGsmCbRoutingReq (receive message cancel)
       
   314         else if ( EBroadcastMessagingReceiveMessageCancel == traid )
       
   315             {
       
   316             ipc = EMobileBroadcastMessagingReceiveMessageCancel;
       
   317             }
       
   318         // Response for SmsGsmCbRoutingReq (set filter setting)
       
   319         else if ( EBroadcastMessagingSetFilterSetting == traid )
       
   320             {
       
   321             ipc = EMobileBroadcastMessagingSetFilterSetting;
       
   322             }
       
   323 
       
   324         // Complete status change indication, if ipc is set
       
   325         if ( 0 != ipc )
       
   326             {
       
   327             iMessageRouter->Complete( ipc, cause );
       
   328             }
       
   329        }
   326     }
   330     }
   327 
   331 
   328 // -----------------------------------------------------------------------------
   332 // -----------------------------------------------------------------------------
   329 // CMmBroadMessHandler:: SmsCbRoutingInd
   333 // CMmBroadMessHandler:: SmsCbRoutingInd
   330 // Incoming CB message. When the SMS Server receives a CB message
   334 // Incoming CB message. When the SMS Server receives a CB message
   336     (
   340     (
   337     const TIsiReceiveC& aSmsCbRoutingInd // Received ISI message
   341     const TIsiReceiveC& aSmsCbRoutingInd // Received ISI message
   338     )
   342     )
   339     {
   343     {
   340 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingInd");
   344 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsCbRoutingInd");
   341 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL, "CMmBroadMessHandler::SmsCbRoutingIndL" );
   345 OstTrace0( TRACE_NORMAL,  CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL_TD, "CMmBroadMessHandler::SmsCbRoutingIndL" );
   342 
   346 
   343     CMmDataPackage data;
   347     CMmDataPackage data;
   344     TInt error ( KErrNone );
   348     TInt error ( KErrNone );
   345 
   349 
   346     // Get the number of subblocks
   350     // Get the number of subblocks
   362         infoLength = aSmsCbRoutingInd.Get8bit( firstSbOffset
   366         infoLength = aSmsCbRoutingInd.Get8bit( firstSbOffset
   363             + SMS_SB_CB_MESSAGE_OFFSET_INFOLENGTH );
   367             + SMS_SB_CB_MESSAGE_OFFSET_INFOLENGTH );
   364         }
   368         }
   365 
   369 
   366 TFLOGSTRING2("TSY: CMmBroadMessHandler::SmsCbRoutingIndL. infoLength:%d",infoLength);
   370 TFLOGSTRING2("TSY: CMmBroadMessHandler::SmsCbRoutingIndL. infoLength:%d",infoLength);
   367 OstTraceExt1( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL, "CMmBroadMessHandler::SmsCbRoutingIndL;infoLength=%hhu", infoLength );
   371 OstTraceExt1( TRACE_NORMAL,  DUP1_CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL_TD, "CMmBroadMessHandler::SmsCbRoutingIndL;infoLength=%hhu", infoLength );
   368 
   372 
   369     // Reset and destroy the array
   373     // Reset and destroy the array
   370     iCbsMsg->ResetAndDestroy();
   374     iCbsMsg->ResetAndDestroy();
   371 
   375 
   372     // GSM mode, don't care of info length
   376     // GSM mode, don't care of info length
   417     // WCDMA mode,take care of info length and number of subblocks should be
   421     // WCDMA mode,take care of info length and number of subblocks should be
   418     // less or equal to 15
   422     // less or equal to 15
   419     else if ( ( SMS_CB_MESSAGE_CONTENT_SIZE >= infoLength )
   423     else if ( ( SMS_CB_MESSAGE_CONTENT_SIZE >= infoLength )
   420         && ( KWcdmaCbsNumberOfSbMax >= sbNumber ) )
   424         && ( KWcdmaCbsNumberOfSbMax >= sbNumber ) )
   421         {
   425         {
   422         TUint currSbOffset( firstSbOffset );
   426         TUint currSbOffset( ISI_HEADER_SIZE + SIZE_SMS_CB_ROUTING_IND );
   423         // Loop through the SMS_SB_CB_MESSAGE sub blocks.
   427         // Search all SMS_SB_CB_MESSAGE subblocks
   424         for ( TInt i( 0 ); i < sbNumber; i++)
   428         while ( KErrNone == aSmsCbRoutingInd.FindSubBlockOffsetById(
       
   429             currSbOffset,
       
   430             SMS_SB_CB_MESSAGE,
       
   431             EIsiSubBlockTypeId16Len16,
       
   432             currSbOffset ) )
   425             {
   433             {
   426             TWcdmaCbsMsg* wcdmaCbsMsg = new ( ELeave ) TWcdmaCbsMsg;
   434             TWcdmaCbsMsg* wcdmaCbsMsg = new ( ELeave ) TWcdmaCbsMsg;
   427             CleanupStack::PushL( wcdmaCbsMsg );
   435             CleanupStack::PushL( wcdmaCbsMsg );
   428 
   436 
   429             // Total number of subblocks in SMS_CB_ROUTING_IND
   437             // Total number of subblocks in SMS_CB_ROUTING_IND
   473             //note: Lint doesn't understand the use of PopAndDestroy and 'thinks'
   481             //note: Lint doesn't understand the use of PopAndDestroy and 'thinks'
   474             //that there is a memory leak for wcdmaCbsMsg, we disable that warning with
   482             //that there is a memory leak for wcdmaCbsMsg, we disable that warning with
   475             //the following command
   483             //the following command
   476             //lint -e429
   484             //lint -e429
   477             }
   485             }
   478 
       
   479         // Pack data
   486         // Pack data
   480         data.PackData( &iCbsMsg, &sbNumber );
   487         data.PackData( &iCbsMsg, &sbNumber );
   481 
   488 
   482         // Complete
   489         // Complete
   483         iMessageRouter->Complete(
   490         iMessageRouter->Complete(
   486             error );
   493             error );
   487         }
   494         }
   488     else    // Illegal value ( e.g network is not working correctly )
   495     else    // Illegal value ( e.g network is not working correctly )
   489         {
   496         {
   490 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsGsmCbRoutingNtfL illegal value (e.g network problem )");
   497 TFLOGSTRING("TSY: CMmBroadMessHandler::SmsGsmCbRoutingNtfL illegal value (e.g network problem )");
   491 OstTrace0( TRACE_NORMAL, DUP2_CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL, "CMmBroadMessHandler::SmsGsmCbRoutingNtfL-illegal value (e.g network problem" );
   498 OstTrace0( TRACE_NORMAL,  DUP2_CMMBROADMESSHANDLER_SMSGSMCBROUTINGNTFL_TD, "CMmBroadMessHandler::SmsGsmCbRoutingNtfL-illegal value (e.g network problem" );
   492 
   499 
   493         error = KErrGeneral;
   500         error = KErrGeneral;
   494         // Complete. We could complete with either ipc
   501         // Complete. We could complete with either ipc
   495         // EMmTsyWcdmaBroadcastNotifyMessageReceived or
   502         // EMmTsyWcdmaBroadcastNotifyMessageReceived or
   496         // EMmTsyGsmBroadcastNotifyMessageReceived but as it doesn't matter,
   503         // EMmTsyGsmBroadcastNotifyMessageReceived but as it doesn't matter,
   513     TInt aIpc, // IPC number
   520     TInt aIpc, // IPC number
   514     const CMmDataPackage* aDataPackage // packed data
   521     const CMmDataPackage* aDataPackage // packed data
   515     )
   522     )
   516     {
   523     {
   517 TFLOGSTRING("TSY: CMmBroadMessHandler::ExtFuncL");
   524 TFLOGSTRING("TSY: CMmBroadMessHandler::ExtFuncL");
   518 OstTrace0( TRACE_NORMAL, CMMBROADMESSHANDLER_EXTFUNCL, "CMmBroadMessHandler::ExtFuncL" );
   525 OstTrace0( TRACE_NORMAL,  CMMBROADMESSHANDLER_EXTFUNCL_TD, "CMmBroadMessHandler::ExtFuncL" );
   519     TInt ret( KErrNone );
   526     TInt ret( KErrNone );
   520 
   527 
   521     TUint8 transId( 0 ); // Initialize to zero
   528     TUint8 transId( 0 ); // Initialize to zero
   522 
   529 
   523     switch ( aIpc )
   530     switch ( aIpc )
   539             }
   546             }
   540         default:
   547         default:
   541             {
   548             {
   542             // This method should only be called for Broadcast cases
   549             // This method should only be called for Broadcast cases
   543 TFLOGSTRING2("TSY: CMmBroadMessHandler::ExtFuncL - Unknown IPC: %d", aIpc);
   550 TFLOGSTRING2("TSY: CMmBroadMessHandler::ExtFuncL - Unknown IPC: %d", aIpc);
   544 OstTrace1( TRACE_NORMAL, DUP1_CMMBROADMESSHANDLER_EXTFUNCL, "CMmBroadMessHandler::ExtFuncL;aIpc=%d", aIpc );
   551 OstTrace1( TRACE_NORMAL,  DUP1_CMMBROADMESSHANDLER_EXTFUNCL_TD, "CMmBroadMessHandler::ExtFuncL;aIpc=%d", aIpc );
   545             ret = KErrArgument;
   552             ret = KErrArgument;
   546             break;
   553             break;
   547             }
   554             }
   548         }
   555         }
   549     if ( EBroadcastMessagingUnknown != transId )
   556     if ( EBroadcastMessagingUnknown != transId )