satengine/SatServer/Commands/SendSSCmd/src/CSendSsHandler.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/satengine/SatServer/Commands/SendSSCmd/src/CSendSsHandler.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1002 +0,0 @@
-/*
-* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Handles SendSS command
-*
-*/
-
-
-#include    <cphonegsmparserbase.h>
-#include    <cphonegsmparserresult.h>
-#include    <phonegsmparser.h>
-#include    <cphonegsmoptioncontainerbase.h>
-
-#include    "MSatSystemState.h"
-#include    "MSatApi.h"
-#include    "MSatUtils.h"
-#include    "MSatUiSession.h"
-#include    "SatSOpcodes.h"
-#include    "MSatSUiClientHandler.h"
-#include    "CSendSsHandler.h"
-#include    "SatLog.h"
-#include    "csatsendssrequestcompletehandler.h"
-#include    "csatsendssadditionalinfohandler.h"
-#include    "csatsendsshandler.h"
-
-// CustomAPI returns KCustomApiSsGsmActive=0x01
-const TInt KSsGsmActiveSuccess = 0x01;
-// CustomAPI returns KCustomApiSsGsmRegistered=0x02
-const TInt KSsGsmRegistered = 0x02;
-// CustomAPI returns KCustomApiSsGsmProvisioned=0x04
-const TInt KSsGsmProvisioned = 0x04;
-// CustomAPI returns KCustomApiSsGsmQuiescent=0x08
-const TInt KSsGsmQuiescent = 0x08;
-// CustomAPI returns SsServiceFailedResp=0xFFFF
-const TInt KSsServiceFailed = 0xFFFF;
-// Error code for NetworkFailure = 0xFFFE
-const TInt KSsNetworkError = 0xFFFE;
-//interval wait for ussd send
-const TInt KCallbackInterval = 1000000;
-// Interval wait for additional info
-const TInt KSSRequestCallbackInterval = 5000000;
-// Ss OperationCode value.
-const TInt KSsOperationShowFDNLIst = 0x05;
-const TInt KSsOperationPasswordRegistration = 0x06;
-// Ss error
-const TInt KSsSimAtkCcRejected = 0x13;
-const TInt KTwo = 2;
-
-// ======== MEMBER FUNCTIONS ========
-
-// -----------------------------------------------------------------------------
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CSendSSHandler* CSendSSHandler::NewL( MSatUtils* aUtils )
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::NewL calling" )
-
-    CSendSSHandler* self = new( ELeave ) CSendSSHandler;
-
-    CleanupStack::PushL( self );
-    self->BaseConstructL( aUtils );
-    self->ConstructL();
-    CleanupStack::Pop( self );
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::NewL exiting" )
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CSendSSHandler::~CSendSSHandler()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::~CSendSSHandler calling" )
-
-    Cancel();
-    // Destroy all objects.
-    delete iAdditionalInfoHandler;
-    delete iRequestCompleteHandler;
-    delete iPhoneGsmHandlerBase;
-    delete iParser;
-    delete iResult;
-    delete iPhoneGsmOptionContainerBase;
-    if ( iTimer )
-        {
-        iTimer->Cancel();
-        delete iTimer;
-        iTimer = NULL;
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::~CSendSSHandler exiting" )
-    }
-    
-// -----------------------------------------------------------------------------
-// Processes the SS Request Complete.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::DispatchSsRequestComplete( TInt aErrCode )
-    {
-    LOG2( SIMPLE, "SENDSS: CSendSSHandler::DispatchSsRequestComplete \
-    called aErrCode: %i", aErrCode )
-
-    if ( ( KSsGsmActiveSuccess == aErrCode ) ||
-         ( KSsGsmRegistered == aErrCode ) ||
-         ( KSsGsmProvisioned == aErrCode ) ||
-         ( KSsGsmQuiescent == aErrCode ) )
-        {
-        iSsResult = KErrNone;
-        }
-    else
-        {
-        iSsResult = aErrCode;
-        }
-
-    // Store result for later use
-    iSsResult = aErrCode;
-    iRequestCompleteArrived = ETrue;
-
-    //is additional info received
-    if ( iAdditionalInfoArrived )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::DispatchSsRequestComplete \
-        iAdditionalInfoArrived true" )
-        HandleSendSsResult();
-        }
-    else    //if not 5 second timer to get additional info
-        {
-        if ( !iTimer )
-            {
-            LOG( SIMPLE, 
-            "CSendSSHandler::DispatchSsRequestComplete iTimer false" )
-            TRAPD( err, iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); );
-            
-            LOG2( NORMAL, "SENDSS: CSendSSHandler::DispatchSsRequestComplete \
-            CPeriodic::NewL err: %d ", err )              
-            if ( KErrNone == err )
-                {
-                iTimer->Start( KSSRequestCallbackInterval,
-                    KCallbackInterval, TCallBack( SSRequestCallback, this ) );
-                }
-            }
-        }
-
-    LOG( SIMPLE, "CSendSSHandler::DispatchSsRequestComplete exit" )
-    }
-
-// -----------------------------------------------------------------------------
-// Processes the SS aditional info.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::DispatchSsAdditionalInfo(
-    const TDesC& aAdditionalInfo )
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::DispatchSsAdditionalInfo called" )
-
-    iAdditionalInfoArrived = ETrue;
-    iAdditionalInfo.Copy( aAdditionalInfo );
-    LOG2( SIMPLE, "SENDSS: CSendSSHandler::DispatchSsAdditionalInfo length of\
-    aAdditionalInfo: %i", aAdditionalInfo.Length())
-
-    if ( aAdditionalInfo.Length() > 0 )
-        {
-        // This is special case due tsy will not send request complete.
-        if ( ( ( KSsOperationPasswordRegistration == aAdditionalInfo[0] ) ||
-               ( KSsOperationShowFDNLIst == aAdditionalInfo[0] ) ) &&
-             ( !iRequestCompleteArrived ) )
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::DispatchSsAdditionalInfo special case" )
-            iSsResult = KErrNone;
-            iRequestCompleteArrived = ETrue;
-            }
-        }
-
-    //is requestcompletenotification reveived
-    if ( iRequestCompleteArrived )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::DispatchSsAdditionalInfo \
-        iRequestCompleteArrived true" )
-        HandleSendSsResult();
-        }
-    else    //if not 5 second timer to get requestcompletenote
-        {
-        if ( !iTimer )
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::DispatchSsAdditionalInfo iTimer false" )
-            TRAPD( err, iTimer = CPeriodic::NewL( CActive::EPriorityStandard ); );
-            
-            LOG2( NORMAL, "SENDSS: CSendSSHandler::DispatchSsAdditionalInfo \
-            CPeriodic::NewL err: %d ", err )            
-            if ( KErrNone == err )
-                {
-                iTimer->Start( KSSRequestCallbackInterval,
-                    KCallbackInterval, TCallBack( SSRequestCallback, this ) );
-                }
-            }
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::DispatchSsAdditionalInfo exit" )
-    }
-
-// -----------------------------------------------------------------------------
-// From class MSatCommand.
-// Response from the client.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::ClientResponse()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::ClientResponse calling" )
-
-    if ( iQueryRsp.iAccepted && !iNotificationSent )
-        {
-        LOG( NORMAL, 
-        "SENDSS: CSendSSHandler::ClientResponse Sending notification" )
-        iNotificationSent = ETrue;
-
-        // Register service request
-        TRAP_IGNORE( iUtils->RegisterServiceRequestL(
-            ESatSProactiveNotification,
-            ESatSProactiveNotificationResponse,
-            this ) )
-
-        // Send notification
-        iUtils->SatUiHandler().UiSession()->SendCommand(
-            &iNotificationDataPckg,
-            &iNotificationRspPckg,
-            ESatSProactiveNotification );
-        }
-    else if ( iNotificationRsp.iAccepted && iNotificationSent )
-        {
-        LOG( NORMAL, 
-        "SENDSS: CSendSSHandler::ClientResponse Notification response" )
-        }
-    else // User reject
-        {
-        iUserAccepted = EFalse;
-        // Cannot return KPCmdNotAcceptedByUser (ETSI 11.14 v8.3.0 p65)
-        iSendSsRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
-        iSendSsRsp.iInfoType = RSat::KMeProblem;
-        iSendSsRsp.iAdditionalInfo.SetLength( 1 );
-        iSendSsRsp.iAdditionalInfo[0] = RSat::KScreenBusy;
-
-        if ( iQueryRsp.iSessionTerminatedByUser )
-            {
-            LOG( NORMAL, "SENDSS: CSendSSHandler::ClientResponse \
-            ESessionTerminatedByUser" )
-            // Notify sim session end command that next sim session end
-            // should close the ui session.
-            iUtils->NotifyEvent( MSatUtils::ESessionTerminatedByUser );
-            }
-
-        SendTerminalResponse();
-        }
-
-    // Release Wait
-    if ( iSendWait.IsStarted() )
-        {
-        LOG( NORMAL, "SENDSS: CSendSSHandler::ClientResponse stop iSendWait" )
-        iSendWait.AsyncStop();
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::ClientResponse exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// From class CSatCommandHandler.
-// Waits for indication of user rejection
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::Event( TInt aEvent )
-    {
-    LOG2( SIMPLE, "SENDSS: CSendSSHandler::Event calling, aEvent:%d", aEvent )
-
-    switch ( aEvent )
-        {
-        case MSatUtils::ECancelledUsingEndKey:
-            {
-            // Notify sim session end command that next sim session end
-            // should close the ui session.
-            iUtils->NotifyEvent( MSatUtils::ESessionTerminatedByUser );
-            // This event is handled as above, but notification must be done.
-            }
-            //lint -fallthrough intended here
-
-        case MSatUtils::ECommandCancelled:
-            {
-            // Check is there a confirmation on screen
-            if ( !iQueryOn || iNotificationSent )
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::Event iNotificationSent true" )
-                // Cancel notification requests
-                iRequestCompleteHandler->Cancel();
-                iAdditionalInfoHandler->Cancel();
-
-                iSendSsRsp.iGeneralResult = RSat::KUssdTransactionTerminatedByUser;
-                iSendSsRsp.iInfoType = RSat::KNoAdditionalInfo;
-                iSendSsRsp.iAdditionalInfo.Zero();
-                SendTerminalResponse();
-                }
-            break;
-            }
-
-        default:
-            {
-            // Move event to base class
-            CSatCommandHandler::Event( aEvent );
-            }
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::Event exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// From class CActive.
-// Cancels the sat request.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::DoCancel()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::DoCancel calling" )
-
-    iUtils->USatAPI().NotifySendSsCancel();
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::DoCancel exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// From class CSatCommandHandler.
-// Requests the command notification.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::IssueUSATRequest( TRequestStatus& aStatus )
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::IssueUSATRequest calling" )
-
-    // Clear the IPC package.
-    new (&iSendSsData) RSat::TSendSsV1();
-    iQueryOn = EFalse;
-    iQueryRsp.iAccepted = EFalse; // default
-    iNotificationRsp.iAccepted = EFalse;
-    iSendSsRsp.iGeneralResult = RSat::KPSessionTerminatedByUser; // default
-    iSendSsRsp.iInfoType = RSat::KNoAdditionalInfo;
-    iSendSsRsp.iAdditionalInfo.Zero();
-
-    iUtils->USatAPI().NotifySendSs( aStatus, iSendSsPckg );
-
-    // Unregister from events
-    iUtils->UnregisterEvent( this, MSatUtils::ECommandCancelled );
-    iUtils->UnregisterEvent( this, MSatUtils::ECancelledUsingEndKey );
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::IssueUSATRequest exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// From class CSatCommandHandler.
-// Precheck before executing the command.
-// -----------------------------------------------------------------------------
-//
-TBool CSendSSHandler::CommandAllowed()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::CommandAllowed calling" )
-
-    // Allow this command to send terminal response
-    iTerminalRespSent = EFalse;
-    RMobilePhone::TMobilePhoneRegistrationStatus registrationStatus(
-        iUtils->SystemState().GetNetworkRegistrationStatus() );
-
-    TBool commandAllowed( ETrue );
-
-    // icon without alpha id
-    if ( ( RSat::EAlphaIdProvided != iSendSsData.iAlphaId.iStatus ) &&
-         ( RSat::ESelfExplanatory == iSendSsData.iIconId.iQualifier ||
-           RSat::ENotSelfExplanatory == iSendSsData.iIconId.iQualifier ) )
-        {
-        iSendSsRsp.iGeneralResult = RSat::KCmdDataNotUnderstood;
-        iSendSsRsp.iInfoType = RSat::KNoAdditionalInfo;
-        iSendSsRsp.iAdditionalInfo.Zero();
-        commandAllowed = EFalse;
-        LOG( SIMPLE,
-            "SENDSS: CSendSSHandler::CommandAllowed icon without alpha id" )
-        }
-    else if ( ( RMobilePhone::ERegisteredOnHomeNetwork != registrationStatus ) &&
-        ( RMobilePhone::ERegisteredRoaming != registrationStatus ) )
-        {
-        iSendSsRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
-        iSendSsRsp.iInfoType = RSat::KMeProblem;
-        iSendSsRsp.iAdditionalInfo.SetLength( 1 );
-        iSendSsRsp.iAdditionalInfo[0] = RSat::KNoService;
-        commandAllowed = EFalse;
-        LOG( SIMPLE,
-            "SENDSS: CSendSSHandler::CommandAllowed no service" )
-        }
-    // Set icon command flag whether icon data was received and set qualifier
-    // to no icon id
-    // To be removed when icons are allowed in this command
-    else if ( ( RSat::ESelfExplanatory ==
-        iSendSsData.iIconId.iQualifier ) ||
-        ( RSat::ENotSelfExplanatory ==
-        iSendSsData.iIconId.iQualifier ) )
-        {
-        LOG( SIMPLE,
-            "SENDSS: CSendSSHandler::CommandAllowed ENoIconId" )
-        iIconCommand = ETrue;
-        iSendSsData.iIconId.iQualifier = RSat::ENoIconId;
-        }
-    else
-        {
-        LOG( SIMPLE,
-            "SENDSS: CSendSSHandler::CommandAllowed others" )
-        iIconCommand = EFalse;
-        }
-
-    if ( !commandAllowed )
-        {
-        SendTerminalResponse();
-        LOG( SIMPLE, "SENDSS: CSendSSHandler::CommandAllowed not allowed" )
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::CommandAllowed exiting" )
-    return commandAllowed;
-    }
-
-// -----------------------------------------------------------------------------
-// From class CSatCommandHandler.
-// Answers for need of UI session.
-// -----------------------------------------------------------------------------
-//
-TBool CSendSSHandler::NeedUiSession()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::NeedUiSession calling" )
-
-    iNeedUiSession = !TransparentSsSending();
-
-    // Notify Cover UI if it's supported
-    if ( iNeedUiSession && iUtils->CoverUiSupported() )
-        {
-        TSatCommandData medEventData;
-        medEventData.iPCmdNumber = RSat::ESendSs;
-        medEventData.iAlphaId = iSendSsData.iAlphaId;
-        if ( iUtils->SystemState().IsConfirmSatOperationsOn() )
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::NeedUiSession KSatLongDuration" )
-            medEventData.iDuration.iNumOfUnits = KSatLongDuration;
-            }
-        else
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::NeedUiSession KSatDefaultDuration" )
-            medEventData.iDuration.iNumOfUnits = KSatDefaultDuration;
-            }
-        medEventData.iDuration.iTimeUnit = RSat::ESeconds;
-        medEventData.iIconID = iSendSsData.iIconId;
-        TSatCommandPckg tPckg( medEventData );
-        iUtils->RaiseSatEvent( tPckg );
-        }
-
-    LOG2( SIMPLE, "SENDSS: CSendSSHandler::NeedUiSession exiting,\
-    iNeedUiSession: %d", iNeedUiSession )
-    return iNeedUiSession;
-    }
-
-// -----------------------------------------------------------------------------
-// From class CSatCommandHandler.
-// Called when USAT API notifies that command.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::HandleCommand()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::HandleCommand calling" )
-
-    iUtils->NotifyEvent( MSatUtils::ESendSsExecuting );
-
-    // This is true, by default
-    iUserAccepted = ETrue;
-
-    if ( iNeedUiSession )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::HandleCommand iNeedUiSession true" )
-        TRAP_IGNORE(
-        // Register to listen user cancel events:
-        // Cancel key event from dialog
-        iUtils->RegisterL( this, MSatUtils::ECommandCancelled );
-        // End key from dialog
-        iUtils->RegisterL( this, MSatUtils::ECancelledUsingEndKey ) )
-
-        // Build Qyery and Notify packages
-        // Has to be casted to TInt before casting to TSatIconQualifier, because
-        // GCC warns about the direct cast.
-        const struct TSatIconId iconId = { iSendSsData.iIconId.iIdentifier,
-            static_cast<TSatIconQualifier>(
-                static_cast<TInt>( iSendSsData.iIconId.iQualifier ) ) };
-
-        if ( RSat::EAlphaIdNotPresent == iSendSsData.iAlphaId.iStatus )
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::HandleCommand EAlphaIdNotPresent" )
-            iQueryData.iAlphaIdStatus = ESatAlphaIdNotProvided;
-            iNotificationData.iAlphaIdStatus = ESatAlphaIdNotProvided;
-            }
-        else if ( RSat::EAlphaIdProvided == iSendSsData.iAlphaId.iStatus )
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::HandleCommand EAlphaIdProvided" )
-            iQueryData.iAlphaIdStatus = ESatAlphaIdNotNull;
-            iNotificationData.iAlphaIdStatus = ESatAlphaIdNotNull;
-            }
-        else
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::HandleCommand ESatAlphaIdNull" )
-            iQueryData.iAlphaIdStatus = ESatAlphaIdNull;
-            iNotificationData.iAlphaIdStatus = ESatAlphaIdNull;
-            }
-
-        iQueryData.iCommand = ESatSSendSsQuery;
-        iQueryData.iQueryText = iSendSsData.iAlphaId.iAlphaId;
-        iQueryData.iIconId = iconId;
-
-        iNotificationSent = EFalse;
-        iNotificationData.iCommand = ESatSSendSsNotify;
-        iNotificationData.iText = iSendSsData.iAlphaId.iAlphaId;
-        iNotificationData.iIconId = iconId;
-
-        MSatUiSession* uiSession = iUtils->SatUiHandler().UiSession();
-
-        // Send either query or notification
-        if ( iQueryOn )
-            {
-            LOG( NORMAL, 
-            "SENDSS: CSendSSHandler::HandleCommand Sending Query" )
-            iNotificationSent = EFalse;
-            // Register service request
-            TRAP_IGNORE( iUtils->RegisterServiceRequestL(
-                ESatSProactiveQuery,
-                ESatSProactiveQueryResponse,
-                this ) )
-
-            // Send query
-            uiSession->SendCommand(
-                &iQueryPckg,
-                &iQueryRspPckg,
-                ESatSProactiveQuery );
-            }
-        else
-            {
-            LOG( NORMAL, 
-            "SENDSS: CSendSSHandler::HandleCommand Sending notification" )
-            iNotificationSent = ETrue;
-
-            // Register service request
-            TRAP_IGNORE( iUtils->RegisterServiceRequestL(
-                ESatSProactiveNotification,
-                ESatSProactiveNotificationResponse,
-                this ) )
-
-            // Send notification
-            uiSession->SendCommand(
-                &iNotificationDataPckg,
-                &iNotificationRspPckg,
-                ESatSProactiveNotification );
-            }
-
-        if ( !iSendWait.IsStarted() )
-            {
-            LOG( NORMAL, 
-            "SENDSS: CSendSSHandler::HandleCommand start iSendWait" )
-            // Start waiting response from the user
-            iSendWait.Start();
-            }
-        }
-
-    if ( iUserAccepted )
-        {
-        LOG( NORMAL, 
-        "SENDSS: CSendSSHandler::HandleCommand iUserAccepted true" )
-        // Ready to send Ss string
-        TRAPD( err, SendSsStringL() )
-        if ( KErrNone != err )
-            {
-            LOG2( NORMAL, " Ss sending failed: %i", err )
-            iSendSsRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
-            iSendSsRsp.iInfoType = RSat::KMeProblem;
-            iSendSsRsp.iAdditionalInfo.SetLength( 1 );
-            iSendSsRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
-            SendTerminalResponse();
-            }
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::HandleCommand exiting" )
-    }
-    
-// -----------------------------------------------------------------------------
-// From class CSatCommandHandler.
-// Indicates the failure of launching ui client
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::UiLaunchFailed()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::UiLaunchFailed calling" )
-
-    iSendSsRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
-    iSendSsRsp.iInfoType = RSat::KMeProblem;
-    iSendSsRsp.iAdditionalInfo.SetLength( 1 );
-    iSendSsRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
-    SendTerminalResponse();
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::UiLaunchFailed exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-//lint -e{1403, 1769} Can not be initialized.
-CSendSSHandler::CSendSSHandler() :
-    CSatCommandHandler(),
-    iSendSsData(),
-    iSendSsPckg( iSendSsData ),
-    iSendSsRsp(),
-    iSendSsRspPckg( iSendSsRsp ),
-    iQueryData(),
-    iQueryPckg( iQueryData ),
-    iQueryRsp(),
-    iQueryRspPckg( iQueryRsp ),
-    iNotificationData(),
-    iNotificationDataPckg( iNotificationData ),
-    iNotificationRsp(),
-    iNotificationRspPckg( iNotificationRsp ),
-    // To be removed when icons are allowed in this command
-    iIconCommand( EFalse )
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::CSendSSHandler calling - exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::ConstructL()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::ConstructL calling" )
-
-    // Create additional info and request complete handlers
-    iAdditionalInfoHandler = CSatSendSsAdditionalInfoHandler::NewL(
-        *iUtils->CustomApi(), this );
-    iRequestCompleteHandler = CSatSendSsRequestCompleteHandler::NewL(
-        *iUtils->CustomApi(), this );
-    iPhoneGsmHandlerBase = new ( ELeave ) CSatSendSsHandler();
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::ConstructL exiting" )
-    }
-    
-// -----------------------------------------------------------------------------
-// Handles the Ss string sending.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::SendSsStringL()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::SendSsString calling" )
-
-    // Set default values
-    iSsResult = KErrArgument;
-    iRequestCompleteArrived = EFalse;
-    iAdditionalInfoArrived = EFalse;
-
-    //Parsing and interpreting
-    TBuf<RSat::KStringMaxSize> sendMessage;
-    sendMessage.Copy( iSendSsData.iSsString.iSsString );
-
-    // CPhoneGsmOptionContainerBase cannot be deleted before SendSsString 
-    // complete, so the object is designed as a member in order that it can be 
-    // deleted asychronously.
-    iParser = PhoneGsmParser::CreateParserL();
-    iResult = PhoneGsmParser::CreateResultL();
-    iPhoneGsmOptionContainerBase = PhoneGsmParser::CreateOptionContainerL();
-
-    //Update options
-    iPhoneGsmOptionContainerBase->SetOptionStatus( KPhoneOptionSend, ETrue );
-
-    //Parsing and interpreting
-
-    //Parse string
-    if ( iParser->ParseL( sendMessage, *iResult, *iPhoneGsmOptionContainerBase ) )
-        {
-        if ( PhoneGsmParser::DetermineContentType( *iResult ) ==
-            PhoneGsmParser::EContentSupplementaryService )
-            {
-
-            if ( !iRequestCompleteHandler->IsActive() )
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::SendSsString start \
-                iRequestCompleteHandler" )
-                iRequestCompleteHandler->Start();
-                }
-
-            if ( !iAdditionalInfoHandler->IsActive() )
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::SendSsString start \
-                iAdditionalInfoHandler" )
-                iAdditionalInfoHandler->Start();
-                }
-
-            // Make a Default Additional Info here, in case additional
-            // info field won't be received
-            // the field is a dummy
-            iAdditionalInfo.SetLength( 1 );
-            iAdditionalInfo[0] = 0x00;
-
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::SendSsString Processing Ss" )
-
-            // CPhoneGsmHandlerBase lives in all lifetime of 
-            // CSendSSHandler. So, it designed as a member.
-            iPhoneGsmHandlerBase->ProcessL( *iResult );
-            }
-        else
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::SendSsString KCmdDataNotUnderstood" )
-            iSendSsRsp.iGeneralResult = RSat::KCmdDataNotUnderstood;
-            iSendSsRsp.iInfoType = RSat::KNoAdditionalInfo;
-            iSendSsRsp.iAdditionalInfo.Zero();
-
-            // Send terminal response
-            SendTerminalResponse();
-            }
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::SendSsString exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// Handles the result of Ss sending.
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::HandleSendSsResult()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::HandleSendSsResult calling" )
-    LOG2( SIMPLE, 
-    "SENDSS: CSendSSHandler::HandleSendSsResult iSsResult: %i", iSsResult )
-    // Remove progress bar from the screen
-    if ( KSsServiceFailed == iSsResult || KSsNetworkError == iSsResult )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::HandleSendSsResult Clearing Progress bar.." )
-        iUtils->NotifyUiEvent( ESatSsEndEvent, ESatEventFailure, iSsResult );
-        // Send Error notification, but only if Alpha ID was provided
-	    if ( ESatAlphaIdNotNull == iNotificationData.iAlphaIdStatus )
-	        {
-	        LOG( SIMPLE, 
-	        "SENDSS: CSendSSHandler::HandleSendSsResult Sending Ss note: \
-	        Not Done" )
-	        iUtils->NotifyUiEvent( ESatSsErrorEvent, ESatEventFailure, 
-	        	iSsResult );
-	        }
-        }
-    else if ( iNotificationSent )
-        {
-        // Remove the UI dialog
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::HandleSendSsResult iNotificationSent true" )
-        iUtils->NotifyUiEvent( ESatSsEndEvent, ESatEventCompleteOk, iSsResult );
-        }
-
-    switch ( iSsResult )
-        {
-        case KErrGeneral: // Command not processed
-            {
-            iSendSsRsp.iGeneralResult = RSat::KMeUnableToProcessCmd;
-            iSendSsRsp.iInfoType = RSat::KMeProblem;
-            iSendSsRsp.iAdditionalInfo.SetLength( 1 );
-            iSendSsRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
-            break;
-            }
-
-        case KErrArgument:
-            {
-            iSendSsRsp.iGeneralResult = RSat::KCmdDataNotUnderstood;
-            iSendSsRsp.iInfoType = RSat::KNoAdditionalInfo;
-            iSendSsRsp.iAdditionalInfo.Zero();
-            break;
-            }
-
-        case KSsServiceFailed:
-            {
-            //This is a special case, TSY sends error value in additional info
-            //when SS is rejected by Call control 
-            if ( KTwo <= iAdditionalInfo.Length() && 
-                KSsSimAtkCcRejected == iAdditionalInfo[1] )
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::HandleSendSsResult \
-                KInteractionWithCCPermanentError" )
-                iSendSsRsp.iGeneralResult = 
-                    RSat::KInteractionWithCCPermanentError;
-                iSendSsRsp.iAdditionalInfo.SetLength( 1 );
-                iSendSsRsp.iAdditionalInfo[0] = RSat::KActionNotAllowed;	
-                }
-            else
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::HandleSendSsResult KSsReturnError" )
-                iSendSsRsp.iGeneralResult = RSat::KSsReturnError;
-                iSendSsRsp.iAdditionalInfo.Copy( iAdditionalInfo );	
-                }
-            iSendSsRsp.iInfoType = RSat::KMeProblem;
-            break;
-            }
-
-        case KSsNetworkError:
-            {
-            iSendSsRsp.iGeneralResult = RSat::KNetworkUnableToProcessCmd;
-            iSendSsRsp.iInfoType = RSat::KSatNetworkErrorInfo;
-            iSendSsRsp.iAdditionalInfo.SetLength( 1 );
-            if ( iAdditionalInfo.Length() > 1 )
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::HandleSendSsResult \
-                iAdditionalInfo.Length() > 1" )
-                iSendSsRsp.iAdditionalInfo[0] = \
-                    ( iAdditionalInfo[1] == RSat::KNoSpecificMeProblem ) \
-                    ? iAdditionalInfo[1] : ( iAdditionalInfo[1] | 0x80 );
-                }
-            else
-                {
-                iSendSsRsp.iAdditionalInfo[0] = RSat::KNoSpecificMeProblem;
-                }
-            break;
-            }
-
-        default:
-            {
-            // Convert terminal rsp if icon used
-            iSendSsRsp.iGeneralResult = RSat::KSuccess;
-
-            // If command had icon data and was done succesfully,
-            // report that icon was not shown.
-            // To be removed and correct handling (i.e. ClientResponse to
-            // notification is received) for general result
-            // KSuccessRequestedIconNotDisplayed must be added when icons are
-            // allowed in this command 
-            if ( iIconCommand )
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::HandleSendSsResult iIconCommand \
-                true" )
-                iSendSsRsp.iGeneralResult =
-                            RSat::KSuccessRequestedIconNotDisplayed;
-                }
-            
-            if ( iAdditionalInfo.Length() )
-                {
-                LOG( SIMPLE, 
-                "SENDSS: CSendSSHandler::HandleSendSsResult \
-                iAdditionalInfo.Length >0" )
-                iSendSsRsp.iInfoType = RSat::KSendSsInfo;
-                iSendSsRsp.iAdditionalInfo.Copy( iAdditionalInfo );
-                }
-            else
-                {
-                iSendSsRsp.iInfoType = RSat::KNoAdditionalInfo;
-                iSendSsRsp.iAdditionalInfo.Zero();
-                }
-
-            break;
-            }
-        }
-
-    delete iResult;
-    iResult = NULL;
-
-    delete iParser;
-    iParser = NULL;
-
-    delete iPhoneGsmOptionContainerBase;
-    iPhoneGsmOptionContainerBase = NULL;
-
-    iRequestCompleteHandler->Cancel();
-    iAdditionalInfoHandler->Cancel();
-
-    // Send terminal response
-    SendTerminalResponse();
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::HandleSendSsResult exiting" )
-    }
-    
-// -----------------------------------------------------------------------------
-// SS sending should be transparent if alpha identifier is provided but it's
-// length is 0. Also user query setting is not on.
-// -----------------------------------------------------------------------------
-//
-TBool CSendSSHandler::TransparentSsSending()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::TransparentSsSending calling" )
-
-    TBool result( EFalse );
-    const RSat::TAlphaId alphaId( iSendSsData.iAlphaId );
-
-    // Store to member variable for later use
-    iQueryOn = iUtils->SystemState().IsConfirmSatOperationsOn();
-
-    if ( ( alphaId.iStatus == RSat::EAlphaIdProvided &&
-           alphaId.iAlphaId.Length() == 0 ) ||
-           alphaId.iStatus == RSat::EAlphaIdNull )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::TransparentSsSending EAlphaIdNull" )
-        if ( !iQueryOn )
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::TransparentSsSending iQueryOn false" )
-            result = ETrue;
-            }
-        }
-
-    LOG2( SIMPLE, "SENDSS: CSendSSHandler::TransparentSsSending exiting: %i",
-        result )
-    return result;
-    }
-
-// -----------------------------------------------------------------------------
-// Sends terminal response, if not yet sent
-// -----------------------------------------------------------------------------
-//
-void CSendSSHandler::SendTerminalResponse()
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::SendTerminalResponse calling" )
-
-    if ( !iTerminalRespSent )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::SendTerminalResponse iTerminalRespSent false" )
-        iTerminalRespSent = ETrue;
-        iSendSsRsp.SetPCmdNumber( iSendSsData.PCmdNumber() );
-        TerminalRsp( RSat::ESendSs, iSendSsRspPckg );
-        }
-
-    // Delete timer in case it is still active
-    if ( iTimer )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::SendTerminalResponse iTimer true" )
-        iTimer->Cancel();
-        delete iTimer;
-        iTimer = NULL;
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::SendTerminalResponse exiting" )
-    }
-
-// -----------------------------------------------------------------------------
-// Callback for SendSS additionalinfo waiting timer.
-// -----------------------------------------------------------------------------
-//
-TInt CSendSSHandler::SSRequestCallback( TAny* aPtr )
-    {
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::SSRequestCallback calling" )
-
-    CSendSSHandler* handler =
-        static_cast<CSendSSHandler*>( aPtr );
-
-    if ( handler )
-        {
-        LOG( SIMPLE, 
-        "SENDSS: CSendSSHandler::SSRequestCallback handler true" )
-        handler->HandleSendSsResult();
-
-        if ( handler->iTimer )
-            {
-            LOG( SIMPLE, 
-            "SENDSS: CSendSSHandler::SSRequestCallback cancel iTimer" )
-            handler->iTimer->Cancel();
-            delete handler->iTimer;
-            handler->iTimer = NULL;
-            }
-        }
-
-    LOG( SIMPLE, "SENDSS: CSendSSHandler::SSRequestCallback exiting" )
-    return ( KErrNone );
-    }
-