satengine/SatServer/Commands/ReceiveDataCmd/src/CReceiveDataHandler.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
equal deleted inserted replaced
42:35488577e233 46:2fa1fa551b0b
     1 /*
       
     2 * Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Handles ReceiveData command
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include    "MSatApi.h"
       
    20 #include    "MSatUtils.h"
       
    21 #include    "MSatSystemState.h"
       
    22 #include    "MSatUiSession.h"
       
    23 #include    "SatSOpcodes.h"
       
    24 #include    "MSatSUiClientHandler.h"
       
    25 #include    "CReceiveDataHandler.h"
       
    26 #include    "SatLog.h"
       
    27 #include    "MSatBIPDataChannel.h"
       
    28 
       
    29 // ======== MEMBER FUNCTIONS ========
       
    30 
       
    31 // -----------------------------------------------------------------------------
       
    32 // Two-phased constructor.
       
    33 // -----------------------------------------------------------------------------
       
    34 //
       
    35 CReceiveDataHandler* CReceiveDataHandler::NewL( MSatUtils* aUtils )
       
    36     {
       
    37     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::NewL calling" )
       
    38     CReceiveDataHandler* self = new( ELeave ) CReceiveDataHandler;
       
    39 
       
    40     CleanupStack::PushL( self );
       
    41     self->BaseConstructL( aUtils );
       
    42     self->ConstructL();
       
    43     CleanupStack::Pop( self );
       
    44 
       
    45     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::NewL exiting" )
       
    46     return self;
       
    47     }
       
    48 
       
    49 // -----------------------------------------------------------------------------
       
    50 // Destructor.
       
    51 // -----------------------------------------------------------------------------
       
    52 //
       
    53 CReceiveDataHandler::~CReceiveDataHandler()
       
    54     {
       
    55     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
    56         CReceiveDataHandler calling" )
       
    57     Cancel();
       
    58     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
    59         ~CReceiveDataHandler exiting" )
       
    60     }
       
    61 
       
    62 // -----------------------------------------------------------------------------
       
    63 // From class MSatCommand.
       
    64 // Response from the client.
       
    65 // -----------------------------------------------------------------------------
       
    66 //
       
    67 void CReceiveDataHandler::ClientResponse()
       
    68     {
       
    69     LOG( NORMAL, "CReceiveDataHandler::ClientResponse calling-exiting" )
       
    70     }
       
    71     
       
    72 // -----------------------------------------------------------------------------
       
    73 // From class CSatCommandHandler.
       
    74 // Waits for indication of user wanting to close the BIP session.
       
    75 // -----------------------------------------------------------------------------
       
    76 //
       
    77 void CReceiveDataHandler::Event( TInt aEvent )
       
    78     {
       
    79     LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::Event calling, \
       
    80         aEvent:%d", aEvent )
       
    81 
       
    82     switch ( aEvent )
       
    83         {
       
    84         case MSatUtils::ECommandCancelled:
       
    85         case MSatUtils::ECancelledUsingEndKey:
       
    86             {
       
    87             // Check Channel activation status
       
    88             if ( iUtils->BipUtils().IsContextActive() )
       
    89                 {
       
    90                 LOG( NORMAL, "ReceiveData: CReceiveDataHandler::Event \
       
    91                      IsContextActive" )
       
    92                 // Next command is rejected
       
    93                 iUserCancelled = ETrue;
       
    94                 SendTerminalResponse(); // If command is executing, send.
       
    95                 }
       
    96             break;
       
    97             }
       
    98         case MSatUtils::EOpenChannelExecuting:
       
    99             {
       
   100             // New channel, reset user cancel flag.
       
   101             iUserCancelled = EFalse;
       
   102             break;
       
   103             }
       
   104         default:
       
   105             {
       
   106             // Move event to base class
       
   107             CSatCommandHandler::Event( aEvent );
       
   108             }
       
   109         }
       
   110     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::Event exiting" )
       
   111     }
       
   112 
       
   113 
       
   114 // -----------------------------------------------------------------------------
       
   115 // From class CActive.
       
   116 // Cancels the sat request.
       
   117 // -----------------------------------------------------------------------------
       
   118 //
       
   119 void CReceiveDataHandler::DoCancel()
       
   120     {
       
   121     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   122         DoCancel calling" )
       
   123     iUtils->USatAPI().NotifyReceiveDataCancel();
       
   124     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   125         DoCancel exiting" )
       
   126     }
       
   127 
       
   128 // -----------------------------------------------------------------------------
       
   129 // From class CSatCommandHandler.
       
   130 // Requests the command notification.
       
   131 // -----------------------------------------------------------------------------
       
   132 //
       
   133 void CReceiveDataHandler::IssueUSATRequest( TRequestStatus& aStatus )
       
   134     {
       
   135     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   136         IssueUSATRequest calling" )
       
   137     // Empty data
       
   138     new (&iReceiveDataData) RSat::TReceiveDataV2();
       
   139 
       
   140     iUtils->USatAPI().NotifyReceiveData( aStatus, iReceiveDataPckg );
       
   141     iUtils->NotifyEvent( MSatUtils::EBipCommandDoneExecuting );
       
   142     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   143         IssueUSATRequest exiting" )
       
   144     }
       
   145 
       
   146 // -----------------------------------------------------------------------------
       
   147 // From class CSatCommandHandler.
       
   148 // Precheck before executing the command.
       
   149 // -----------------------------------------------------------------------------
       
   150 //
       
   151 TBool CReceiveDataHandler::CommandAllowed()
       
   152     {
       
   153     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::CommandAllowed \
       
   154         calling" )
       
   155     TBool commandAllowed( ETrue );
       
   156 
       
   157     // Check user cancel
       
   158     if ( iUserCancelled )
       
   159         {
       
   160         LOG( NORMAL, "ReceiveData: CReceiveDataHandler::CommandAllowed \
       
   161              iUserCancelled true" )
       
   162         SendTerminalResponse();
       
   163         commandAllowed = EFalse;
       
   164         }
       
   165     else
       
   166         {
       
   167 
       
   168         // Proceed with the command
       
   169         const TInt channelId( iReceiveDataData.iDestination );
       
   170 
       
   171         if ( ( RSat::KChannel1 > channelId ) ||
       
   172             ( RSat::KChannel7 < channelId ) ||
       
   173             // If icon data without alpha id 
       
   174             ( ( RSat::EAlphaIdProvided !=
       
   175                 iReceiveDataData.iAlphaId.iStatus ) &&
       
   176             ( ( RSat::ESelfExplanatory ==
       
   177                 iReceiveDataData.iIconId.iQualifier ) ||
       
   178             ( RSat::ENotSelfExplanatory ==
       
   179                 iReceiveDataData.iIconId.iQualifier ) ) ) )
       
   180             {
       
   181             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::CommandAllowed \
       
   182                 Unknown channel identifier or icon without alpha id - \
       
   183                 Not allowed" )
       
   184             // Create the response IPC package
       
   185             iReceiveDataRspData.SetPCmdNumber(
       
   186                                  iReceiveDataData.PCmdNumber() );
       
   187             iReceiveDataRspData.iGeneralResult = RSat::KCmdDataNotUnderstood;
       
   188             iReceiveDataRspData.iInfoType = RSat::KNoAdditionalInfo;
       
   189             iReceiveDataRspData.iAdditionalInfo.Zero();
       
   190             TerminalRsp( RSat::EReceiveData, iReceiveDataRspPckg );
       
   191             commandAllowed = EFalse;
       
   192             }
       
   193         // Set icon command flag whether icon data was received and set qualifier
       
   194         // to no icon id
       
   195         // To be removed when icons are allowed in this command
       
   196         else if ( ( RSat::ESelfExplanatory ==
       
   197             iReceiveDataData.iIconId.iQualifier ) ||
       
   198             ( RSat::ENotSelfExplanatory ==
       
   199             iReceiveDataData.iIconId.iQualifier ) )
       
   200             {
       
   201             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::CommandAllowed \
       
   202                  ENoIconId" )
       
   203             iIconCommand = ETrue;
       
   204             iReceiveDataData.iIconId.iQualifier = RSat::ENoIconId;
       
   205             }
       
   206         else
       
   207             {
       
   208             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::CommandAllowed \
       
   209                  others" )
       
   210             iIconCommand = EFalse;
       
   211             }
       
   212             
       
   213         // ReceiveData doesn't need to check Service, ongoing calls etc.
       
   214         // because data is waiting in SAT Engine, so ReceiveData doesn't 
       
   215         // do any network operations. 
       
   216         }
       
   217     LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::CommandAllowed exiting,\
       
   218           commandAllowed: %d", commandAllowed )
       
   219     return commandAllowed;
       
   220     }
       
   221 
       
   222 // -----------------------------------------------------------------------------
       
   223 // From class CSatCommandHandler.
       
   224 // Need for ui session.
       
   225 // -----------------------------------------------------------------------------
       
   226 //
       
   227 TBool CReceiveDataHandler::NeedUiSession()
       
   228     {
       
   229     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::NeedUiSession calling" )
       
   230     // UI is NOT needed in case where AlphaID is provided and it is a NULL
       
   231     iNeedUiSession = ( !( RSat::EAlphaIdNull ==
       
   232                           iReceiveDataData.iAlphaId.iStatus ) &&
       
   233                        !( RSat::EAlphaIdNotPresent ==
       
   234                           iReceiveDataData.iAlphaId.iStatus ) );
       
   235     // Send notification to Mediator client if Cover UI is supported
       
   236     if ( iNeedUiSession && iUtils->CoverUiSupported() )
       
   237         {
       
   238         LOG( NORMAL, "ReceiveData: CReceiveDataHandler::NeedUiSession \
       
   239              CoverUiSupported" )
       
   240         TSatCommandData medEventData;
       
   241         medEventData.iPCmdNumber = RSat::EReceiveData;
       
   242         medEventData.iAlphaId = iReceiveDataData.iAlphaId;
       
   243         medEventData.iDuration.iNumOfUnits = KSatDefaultDuration;
       
   244         medEventData.iIconID = iReceiveDataData.iIconId;
       
   245         TSatCommandPckg tPckg( medEventData );
       
   246         iUtils->RaiseSatEvent( tPckg );
       
   247         }
       
   248     LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::NeedUiSession exiting,\
       
   249           iNeedUiSession: %d", iNeedUiSession )
       
   250     return iNeedUiSession;
       
   251     }
       
   252 
       
   253 // -----------------------------------------------------------------------------
       
   254 // From class CSatCommandHandler.
       
   255 // Called when USAT API notifies that command.
       
   256 // -----------------------------------------------------------------------------
       
   257 //
       
   258 void CReceiveDataHandler::HandleCommand()
       
   259     {
       
   260     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand calling" )
       
   261 
       
   262     // Notify other's about this command executiuon
       
   263     iUtils->NotifyEvent( MSatUtils::EReceiveDataExecuting );
       
   264     iUtils->NotifyEvent( MSatUtils::EBipCommandExecuting );
       
   265     TInt uiError( KErrNone );
       
   266 
       
   267     if ( iNeedUiSession )
       
   268         {
       
   269         LOG( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   270             Sending UI Notification" )
       
   271         uiError = SendUiNotification();
       
   272         }
       
   273     LOG2( NORMAL, 
       
   274     "ReceiveData: CReceiveDataHandler::HandleCommand uiError: %i", uiError )
       
   275     if ( KErrNone == uiError )
       
   276         {
       
   277         iChDataLength = 0;
       
   278 
       
   279         // Proceed with the command
       
   280         TInt err( MSatBIPUtils::ESatBIPSuccess );
       
   281         TInt error( KErrNone );
       
   282 
       
   283         TInt requestedLength( iReceiveDataData.iChannelDataLength );
       
   284 
       
   285         // Make sure that reguested data length is not
       
   286         // more than KSatBIPMaxResponseSize
       
   287         if ( requestedLength > KSatBIPMaxResponseSize )
       
   288             {
       
   289             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   290             requestedLength > KSatBIPMaxResponseSize" )
       
   291             requestedLength = KSatBIPMaxResponseSize;
       
   292             }
       
   293 
       
   294         LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   295         Requested data length: %i", requestedLength )
       
   296 
       
   297         // Get Data Channel
       
   298         MSatBIPDataChannel* datachannel =
       
   299             iUtils->BipUtils().DataChannel(
       
   300                 iReceiveDataData.iDestination, err );
       
   301                 
       
   302         LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   303         err: %i", err )
       
   304         //Check if ch was found
       
   305         if ( MSatBIPUtils::ESatBIPSuccess == err 
       
   306             || MSatBIPUtils::ESatBIPChannelClosed == err )
       
   307             {
       
   308             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   309             MSatBIPUtils::ESatBIPSuccess == err" )
       
   310             iChData.Zero();
       
   311             TRAP( error, err = datachannel->ReceiveDataL(
       
   312                                     iChData,
       
   313                                     requestedLength,
       
   314                                     iChDataLength ) );
       
   315             }
       
   316         LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   317         error: %i", error )
       
   318         // No point to continue
       
   319         if ( error != KErrNone )
       
   320             {
       
   321             iReceiveDataRspData.iGeneralResult =
       
   322                 RSat::KBearerIndepProtocolError;
       
   323             }
       
   324         // Not all requested data yet available
       
   325         else if ( MSatBIPUtils::ESatBIPReqBufSizeNotAvail == err ||
       
   326                   MSatBIPUtils::ESatBIPChannelClosed == err )
       
   327             {
       
   328             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   329                 Not all requested data available" )
       
   330             iReceiveDataRspData.iGeneralResult = RSat::KMissingInformation;
       
   331             }
       
   332         // Some other error
       
   333         else if ( MSatBIPUtils::ESatBIPSuccess != err )
       
   334             {
       
   335             LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand \
       
   336                 Error %i", err )
       
   337             iReceiveDataRspData.iGeneralResult =
       
   338                 RSat::KBearerIndepProtocolError;
       
   339             }
       
   340         // Everything fine
       
   341         else
       
   342             {
       
   343             LOG( NORMAL, 
       
   344             "ReceiveData: CReceiveDataHandler::HandleCommand success")
       
   345             iReceiveDataRspData.iGeneralResult = RSat::KSuccess;
       
   346             }
       
   347 
       
   348         // Send terminal response
       
   349         SendTerminalResponse( err );
       
   350         }
       
   351 
       
   352     LOG2( NORMAL, 
       
   353     "ReceiveData: CReceiveDataHandler::HandleCommand %i bytes Remain in RX \
       
   354     buffer.", iChDataLength )
       
   355     LOG2( NORMAL, 
       
   356     "ReceiveData: CReceiveDataHandler::HandleCommand Returning %i bytes", 
       
   357     iChData.Length() )
       
   358 
       
   359     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::HandleCommand exiting" )
       
   360     }
       
   361 
       
   362 // -----------------------------------------------------------------------------
       
   363 // From class CSatCommandHandler.
       
   364 // Indicates the failure of launching ui client.
       
   365 // -----------------------------------------------------------------------------
       
   366 //
       
   367 void CReceiveDataHandler::UiLaunchFailed()
       
   368     {
       
   369     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::UiLaunchFailed calling" )
       
   370     iReceiveDataRspData.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   371     iReceiveDataRspData.iInfoType = RSat::KMeProblem;
       
   372     iReceiveDataRspData.iAdditionalInfo.SetLength( 1 );
       
   373     iReceiveDataRspData.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
       
   374     iReceiveDataRspData.SetPCmdNumber( iReceiveDataData.PCmdNumber() );
       
   375     TerminalRsp( RSat::EReceiveData, iReceiveDataRspPckg );
       
   376     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::UiLaunchFailed exiting" )
       
   377     }
       
   378 
       
   379 // -----------------------------------------------------------------------------
       
   380 // C++ default constructor can NOT contain any code, that
       
   381 // might leave.
       
   382 // -----------------------------------------------------------------------------
       
   383 //
       
   384 //lint -e{1403, 1769} Can not be initialized.
       
   385 CReceiveDataHandler::CReceiveDataHandler() :
       
   386     CSatCommandHandler(),
       
   387     iReceiveDataData(),
       
   388     iReceiveDataPckg( iReceiveDataData ),
       
   389     iReceiveDataRspData(),
       
   390     iReceiveDataRspPckg( iReceiveDataRspData ),
       
   391     iReceiveDataUiData(),
       
   392     iReceiveDataUiPckg( iReceiveDataUiData ),
       
   393     iReceiveDataUiRsp(),
       
   394     iReceiveDataUiRspPckg( iReceiveDataUiRsp ),
       
   395     // To be removed when icons are allowed in this command
       
   396     iIconCommand( EFalse )
       
   397     {
       
   398     LOG( NORMAL,
       
   399         "ReceiveData: CReceiveDataHandler::\
       
   400             CReceiveDataHandler calling - exiting" )
       
   401     }
       
   402 
       
   403 // -----------------------------------------------------------------------------
       
   404 // Symbian 2nd phase constructor can leave.
       
   405 // -----------------------------------------------------------------------------
       
   406 //
       
   407 void CReceiveDataHandler::ConstructL()
       
   408     {
       
   409     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::ConstructL \
       
   410         calling" )
       
   411 
       
   412     iUtils->RegisterServiceRequestL( ESatSProactiveNotification,
       
   413         ESatSProactiveNotificationResponse, this );
       
   414 
       
   415     // Register to ui service request
       
   416     iUtils->RegisterL( this, MSatUtils::ECommandCancelled );
       
   417     iUtils->RegisterL( this, MSatUtils::ECancelledUsingEndKey );
       
   418     iUtils->RegisterL( this, MSatUtils::EOpenChannelExecuting );
       
   419 
       
   420     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::ConstructL \
       
   421         exiting" )
       
   422     }
       
   423 
       
   424 // -----------------------------------------------------------------------------
       
   425 // Sends notification to UI.
       
   426 // -----------------------------------------------------------------------------
       
   427 //
       
   428 TInt CReceiveDataHandler::SendUiNotification()
       
   429     {
       
   430     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendUiNotification \
       
   431         calling" )
       
   432     // Register to ui service request
       
   433     TRAPD( uiError, iUtils->RegisterServiceRequestL(
       
   434         ESatSProactiveNotification,
       
   435         ESatSProactiveNotificationResponse, this ) );
       
   436     LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::SendUiNotification \
       
   437           uiError: %d", uiError )
       
   438     // Check UI error
       
   439     if ( KErrNone == uiError )
       
   440         {
       
   441         // Create IPC data to UI
       
   442         iReceiveDataUiData.iCommand = ESatSReceiveDataNotify;
       
   443         
       
   444         iReceiveDataUiData.iText = iReceiveDataData.iAlphaId.iAlphaId;
       
   445         iReceiveDataUiData.iIconId.iIdentifier
       
   446              = iReceiveDataData.iIconId.iIdentifier;
       
   447 
       
   448         // Define icon qualifier
       
   449         if ( RSat::ENotSelfExplanatory ==
       
   450             iReceiveDataData.iIconId.iQualifier )
       
   451             {
       
   452             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   453                  SendUiNotification ENotSelfExplanatory" )
       
   454             iReceiveDataUiData.iIconId.iIconQualifier =
       
   455                 ESatNotSelfExplanatory;
       
   456             }
       
   457         else if ( RSat::ESelfExplanatory ==
       
   458             iReceiveDataData.iIconId.iQualifier )
       
   459             {
       
   460             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   461                  SendUiNotification ESelfExplanatory" )
       
   462             iReceiveDataUiData.iIconId.iIconQualifier = ESatSelfExplanatory; 
       
   463             }
       
   464         else // Icon qualifier not present
       
   465             {
       
   466             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   467                  SendUiNotification ESatENoIconId" )
       
   468             iReceiveDataUiData.iIconId.iIconQualifier = ESatENoIconId;
       
   469             }
       
   470         LOG2( NORMAL, "ReceiveData: CReceiveDataHandler::SendUiNotification \
       
   471               iReceiveDataData.iAlphaId.iStatus: %d", 
       
   472               iReceiveDataData.iAlphaId.iStatus )    
       
   473         // Define AlphaID status
       
   474         switch ( iReceiveDataData.iAlphaId.iStatus )
       
   475             {
       
   476             case RSat::EAlphaIdNotPresent:
       
   477                 {
       
   478                 iReceiveDataUiData.iAlphaIdStatus = ESatAlphaIdNotProvided;
       
   479                 break;
       
   480                 }
       
   481 
       
   482             case RSat::EAlphaIdProvided:
       
   483                 {
       
   484                 iReceiveDataUiData.iAlphaIdStatus = ESatAlphaIdNotNull;
       
   485                 break;
       
   486                 }
       
   487 
       
   488             default:
       
   489                 {
       
   490                 iReceiveDataUiData.iAlphaIdStatus = ESatAlphaIdNull;
       
   491                 break;
       
   492                 }
       
   493             }
       
   494 
       
   495         // Send notification to UI
       
   496         MSatUiSession* session = iUtils->SatUiHandler().UiSession();
       
   497         session->SendCommand( &iReceiveDataUiPckg,
       
   498                               &iReceiveDataUiRspPckg,
       
   499                               ESatSProactiveNotification );
       
   500         }
       
   501     else
       
   502         {
       
   503         // Send error terminal response
       
   504         iReceiveDataRspData.iGeneralResult = RSat::KMeUnableToProcessCmd;
       
   505         SendTerminalResponse( RSat::KNoSpecificMeProblem );
       
   506         }
       
   507     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendUiNotification \
       
   508         exiting" )
       
   509     return uiError;
       
   510     }
       
   511 
       
   512 // -----------------------------------------------------------------------------
       
   513 // Completes Terminal response and sends it.
       
   514 // -----------------------------------------------------------------------------
       
   515 //
       
   516 void CReceiveDataHandler::SendTerminalResponse( const TInt aError )
       
   517     {
       
   518     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendTerminalResponse \
       
   519         calling" )
       
   520 
       
   521     if ( iUserCancelled )
       
   522         {
       
   523         LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendTerminalResponse \
       
   524             User cancelled the action" )
       
   525         iReceiveDataRspData.iGeneralResult = RSat::KPSessionTerminatedByUser;
       
   526         iReceiveDataRspData.iInfoType = RSat::KNoAdditionalInfo;
       
   527         iReceiveDataRspData.iAdditionalInfo.Zero();
       
   528         }
       
   529     else if ( RSat::KMissingInformation == iReceiveDataRspData.iGeneralResult ||
       
   530               RSat::KSuccess == iReceiveDataRspData.iGeneralResult )
       
   531         {
       
   532         LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendTerminalResponse\
       
   533             KMissingInformation or KSuccess" )
       
   534         iReceiveDataRspData.iInfoType = RSat::KChannelData;
       
   535         iReceiveDataRspData.iAdditionalInfo.Copy( iChData );
       
   536         // More than maximum bytes remaining
       
   537         if ( iChDataLength > KSatBIPMoreThanMaxSize )
       
   538             {
       
   539             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   540             SendTerminalResponse iChDataLength > KSatBIPMoreThanMaxSize" )
       
   541             iReceiveDataRspData.iChannelDataLength = KSatBIPMoreThanMaxSize;
       
   542             }
       
   543         else
       
   544             {
       
   545             iReceiveDataRspData.iChannelDataLength =
       
   546                 static_cast<TUint8>( iChDataLength );
       
   547             }
       
   548 
       
   549         // If command had icon data and was done succesfully,
       
   550         // report that icon was not shown.
       
   551         // To be removed and correct handling (i.e. ClientResponse to
       
   552         // notification is received) for general result
       
   553         // KSuccessRequestedIconNotDisplayed must be added when icons
       
   554         // are allowed in this command 
       
   555         if ( ( RSat::KSuccess == iReceiveDataRspData.iGeneralResult ) &&
       
   556             iIconCommand )
       
   557             {
       
   558             LOG( NORMAL, "ReceiveData: CReceiveDataHandler::\
       
   559             SendTerminalResponse KSuccessRequestedIconNotDisplayed" )
       
   560             iReceiveDataRspData.iGeneralResult =
       
   561                 RSat::KSuccessRequestedIconNotDisplayed;
       
   562             }
       
   563         }
       
   564     else
       
   565         {
       
   566         LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendTerminalResponse\
       
   567              others" )
       
   568         iReceiveDataRspData.iInfoType = RSat::KMeProblem;
       
   569         iReceiveDataRspData.iAdditionalInfo.SetLength( 1 );
       
   570         // Error code from MSatBIPUtils is the same as defined in etelsat.h,
       
   571         // so we can put that error code straigth to additional info
       
   572         iReceiveDataRspData.iAdditionalInfo[0] = static_cast<TUint8> ( aError );
       
   573         iReceiveDataRspData.iChannelDataLength = 0;
       
   574         }
       
   575 
       
   576     if ( IsCommandExecuting() )
       
   577         {
       
   578         LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendTerminalResponse\
       
   579              IsCommandExecuting" )
       
   580         // Create the response IPC package
       
   581         iReceiveDataRspData.SetPCmdNumber( iReceiveDataData.PCmdNumber() );
       
   582 
       
   583         // Fixed order to send terminal response.
       
   584         iUtils->NotifyEvent( MSatUtils::EDelaySimSessionEnd );
       
   585         iUtils->USatAPI().TerminalRsp( RSat::EReceiveData, iReceiveDataRspPckg );
       
   586         Start();
       
   587         }
       
   588     LOG( NORMAL, "ReceiveData: CReceiveDataHandler::SendTerminalResponse \
       
   589         exiting" )
       
   590     }
       
   591