phoneclientserver/phoneclient/Src/UssdWrapper/CPhCltUssdImp.cpp
changeset 46 2fa1fa551b0b
parent 42 35488577e233
child 48 78df25012fda
--- a/phoneclientserver/phoneclient/Src/UssdWrapper/CPhCltUssdImp.cpp	Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,898 +0,0 @@
-/*
-* Copyright (c) 2002-2010 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:  Interface for sending messages.
-*
-*/
-
-
-
-// INCLUDE FILES
-#include "cphcltussdimp.h" 
-#include "cphcltussdrequesthandler.h" 
-#include "phcltclientserver.h" 
-#include <phclttypes.h> 
-
-#include <etelmm.h>
-#include <f32file.h>
-#include <charconv.h>
-#include <gsmuelem.h>
-#include <coemain.h>  
-//#include <phoneclient.rsg> 
-#include <exterror.h>
-
-#include <gsmerror.h>
-#include <etelsat.h>
-
-#include "mphcltussdnotecontrollercallback.h" 
-#include "cphcltussdnotecontroller.h" 
-#include "cphcltussdcommonconstant.h"
-#include "tflogger.h"
-// CONSTANTS
-
-const TUint8 KPhCltUssdDcsDefaultAlphabet = 0x0f; // 00001111
-                       
-const TUint8 KPhCltUssdDcsAlphabetDefaultPrecededLanguage = 0x10; // 00010000 
-const TUint8 KPhCltUssdDcsAlphabetDefaultPrecededLanguageSkipChars3 = 3;
-const TUint8 KPhCltUssdDcsAlphabetDefaultPrecededLanguageSkipChars2 = 2;
-const TUint8 KPhCltUssdDcsAlphabetDefaultPrecededLanguageStartBit = 5;
-
-const TUint8 KPhCltUssdDcsAlphabetUCS2PrecededLanguage = 0x11;   // 00010001
-const TUint8 KPhCltUssdDcsAlphabetUCS2PrecededLanguageSkipChars = 2;
-
-const TUint8 KPhCltUssdDcsGeneralInformationMask = 0xc0;         // 11000000
-const TUint8 KPhCltUssdDcsGeneralInformation = 0x40;             // 01xxxxxx
-const TUint8 KPhCltUssdDcsGeneralInformationCompressed = 0x20;   // xx1xxxxx
-const TUint8 KPhCltUssdDcsGeneralInformationSimMask = 0x13;      // 00010011
-const TUint8 KPhCltUssdDcsGeneralInformationSim = 0x12;          // xxx1xx10
-const TUint8 KPhCltUssdDcsGeneralInformationAlphabetMask = 0x0c; // 00001100
-const TUint8 KPhCltUssdDcsGeneralInformationAlphabet8Bit = 0x04; // xxxx01xx 
-const TUint8 KPhCltUssdDcsGeneralInformationAlphabetUCS2 = 0x08; // xxxx10xx 
-
-const TUint8 KPhCltUssdDcsMessageHandlingAlphabetMask = 0xf4;    // 11110100
-const TUint8 KPhCltUssdDcsMessageHandlingAlphabet8Bit = 0xf4;    // 1111x1xx 
-
-const TUint8 KPhCltUssdCarriageReturn = 0x0d;
-const TUint8 KPhCltUssdDcsNotSet  = 0x00; // not set
-
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-// CLASS DECLARATION
-
-#ifndef TPHCLTUSSDALPHABETPACKER_H
-#define TPHCLTUSSDALPHABETPACKER_H
-
-/**
-* Class for packing the Ussd string.
-*/
-class TPhCltUssdAlphabetPacker
-    {
-    public:  // Constructors and destructor
-
-        /**
-        * Constructor.
-        *
-        * @param aAlphabet The used Data Coding Scheme.
-        * @param aIsBinary Is the data binary.
-        * @param aStartBit The start bit of the conversion.
-        */
-        TPhCltUssdAlphabetPacker(
-            TSmsDataCodingScheme::TSmsAlphabet aAlphabet,
-            TBool aIsBinary,
-            TInt aStartBit );
-
-    public:  // New functions
-
-        /**
-        * Pack the given string to the desired coding scheme.
-        *
-        * @param aOut The output string of packing
-        * @param aIn The string to be packed.
-        * @return The number of octets used.
-        */
-        TInt PackL(TDes8& aOut,const TDesC8& aIn);
-
-        /**
-        * Convert and pack the given string to the desired coding scheme.
-        *
-        * @param aCharacterSetConverter The character converter.
-        * @param aFs Reference to file system.
-        * @param aOut The output string of packing
-        * @param aIn The string to be packed.
-        * @param aConvertedNumUDUnits The number of converted units.
-        * @return The number of octets used.
-        */
-        TInt ConvertAndPackL(
-            CCnvCharacterSetConverter& aCharacterSetConverter,
-            RFs& aFs,
-            TDes8& aOut,
-            const TDesC& aIn,
-            TInt& aConvertedNumUDUnits );
-
-        /**
-        * Return information of how many octets are required when
-        * the aNumUDUnits number of characters is packed.
-        *
-        * @param aNumUDUnits The number of characters to be packed.
-        * @return The number of octets required.
-        */
-        TInt PackedOctetsRequiredL( TInt aNumUDUnits ) const;
-        
-    private:
-
-        // Private helper methods
-        TInt ElementSizeInBitsL() const;
-        
-    private:    // Data
-
-        // The Data Coding Scheme of the conversion.
-        TSmsDataCodingScheme::TSmsAlphabet iAlphabet;
-
-        // Information is the given descriptor binary.
-        TBool iIsBinary;
-
-        // The start bit of the conversion.
-        TInt iStartBit;
-    };
-
-#endif // TPHCLTUSSDALPHABETPACKER_H
-
-
-// -----------------------------------------------------------------------------
-// TPhCltUssdAlphabetPacker::TPhCltUssdAlphabetPacker
-//
-// -----------------------------------------------------------------------------
-//
-TPhCltUssdAlphabetPacker::TPhCltUssdAlphabetPacker(
-    TSmsDataCodingScheme::TSmsAlphabet aAlphabet,
-    TBool aIsBinary,
-    TInt aStartBit)
-    : iAlphabet( aAlphabet ),
-      iIsBinary( aIsBinary ),
-      iStartBit( aStartBit )
-    {
-    }
-
-
-// -----------------------------------------------------------------------------
-// TPhCltUssdAlphabetPacker::PackL
-//
-// -----------------------------------------------------------------------------
-//
-TInt TPhCltUssdAlphabetPacker::PackL( TDes8& aOut,const TDesC8& aIn )
-    {
-    // Ensure we've got the right length
-    TInt packedOctetsRequired = PackedOctetsRequiredL( aIn.Length() );
-    if ( packedOctetsRequired > ( aOut.MaxLength() - aOut.Length() ) )
-        {
-        User::Leave( KErrOverflow );
-        }
-
-    // Do the conversion
-    TInt elementSizeInBits = ElementSizeInBitsL();
-    if ( elementSizeInBits == 8 ) // 8 bit data
-        {
-        // Straight copy here
-        aOut.Append( aIn );
-        }
-    else if ( elementSizeInBits == 7 ) // Need packing to 7-bit
-        {
-        // Get raw pointers and do packing
-        TUint8* outPtr = ( TUint8* )aOut.Ptr() + aOut.Length();
-        const TUint8* inPtr = aIn.Ptr();
-        
-        outPtr[0] = 0;
-        for ( TInt i = 0; i < aIn.Length() ; i++ )
-            {
-            TUint8 to = inPtr[i];
-            *outPtr |= ( to << iStartBit );
-            if ( iStartBit )
-                {
-                outPtr++;
-                *outPtr = ( TUint8 ) ( to >> ( 8 - iStartBit ) );
-                }
-            iStartBit = ( iStartBit + 7 )%8; // roll 0,1,2,3,4,5,6,7,0,1,2,...
-            
-            if ( i == aIn.Length() - 1 ) // if this is the last time
-                {
-                if ( ( to == KPhCltUssdCarriageReturn && iStartBit == 0 ) || 
-                     iStartBit == 1 )
-                    {
-                    //We have to add one CR more
-                    *outPtr |= ( KPhCltUssdCarriageReturn << iStartBit );
-                    if ( iStartBit )
-                        {
-                        outPtr++;
-                        *outPtr = ( TUint8 ) (
-                            KPhCltUssdCarriageReturn >> ( 8 - iStartBit ) );
-                        }
-                    else
-                        {
-                        packedOctetsRequired++;
-                        }
-                    iStartBit = ( iStartBit + 7 )%8;
-                    }
-                }
-            }
-        // Increment the length for the packed data
-        aOut.SetLength( aOut.Length() + packedOctetsRequired );
-        }
-    else
-        {
-        User::Invariant();
-        }
-    // Return number of bytes used
-    return packedOctetsRequired;
-    }
-
-
-// -----------------------------------------------------------------------------
-// TPhCltUssdAlphabetPacker::ConvertAndPackL
-//
-// -----------------------------------------------------------------------------
-//
-TInt TPhCltUssdAlphabetPacker::ConvertAndPackL(
-    CCnvCharacterSetConverter& aCharacterSetConverter,
-    RFs& aFs,
-    TDes8& aOut,
-    const TDesC& aIn,
-    TInt& aConvertedNumUDUnits )
-    {
-    
-    // Do the conversion
-    CSmsAlphabetConverter* converter = 
-        CSmsAlphabetConverter::NewLC( 
-            aCharacterSetConverter, aFs, iAlphabet, iIsBinary );
-
-    TPtrC8 convertedPtr = converter->ConvertFromNativeL( aIn );
-    aConvertedNumUDUnits = convertedPtr.Length();
-
-    // Do the packing
-    TInt octetsUsed = PackL( aOut,convertedPtr );
-
-    // Cleanup and return
-    CleanupStack::PopAndDestroy(); // converter
-    return octetsUsed;
-    }
-
-
-// -----------------------------------------------------------------------------
-// TPhCltUssdAlphabetPacker::PackedOctetsRequiredL
-//
-// -----------------------------------------------------------------------------
-//
-TInt TPhCltUssdAlphabetPacker::PackedOctetsRequiredL( TInt aNumUDUnits ) const
-
-    {  
-    TInt octetsRequired = 0;
-    TInt elementSizeInBits = ElementSizeInBitsL();
-    if ( elementSizeInBits == 8 )
-        {
-        octetsRequired=aNumUDUnits;
-        }
-    else
-        {
-        octetsRequired =
-            ( iStartBit + aNumUDUnits*elementSizeInBits + 7 )/8;    // Rounds up
-        }
-    return octetsRequired;
-    }
-
-
-// -----------------------------------------------------------------------------
-// TPhCltUssdAlphabetPacker::ElementSizeInBitsL
-//
-// -----------------------------------------------------------------------------
-//
-TInt TPhCltUssdAlphabetPacker::ElementSizeInBitsL() const
-    {   
-    if ( iIsBinary )
-        return 8;
-    switch ( iAlphabet )
-        {
-        case TSmsDataCodingScheme::ESmsAlphabet7Bit:
-            {
-            return 7;
-            }
-        case TSmsDataCodingScheme::ESmsAlphabet8Bit:
-        case TSmsDataCodingScheme::ESmsAlphabetUCS2:
-            {
-            return 8;
-            }
-        default:
-            {
-            User::Leave( KErrGsmSMSDataCodingSchemeNotSupported );
-            return 8;
-            }
-        }
-    }
-
-
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CPhCltUssdImp* CPhCltUssdImp::NewL( TBool aShowNotes )
-    {
-    TFLOGSTRING("CPhCltUssdImp: NewL call")
-    CPhCltUssdImp* self = new( ELeave ) CPhCltUssdImp;
-    CleanupStack::PushL( self );
-    self->ConstructL( aShowNotes );
-    CleanupStack::Pop(); // self
-    TFLOGSTRING("CPhCltUssdImp: NewL exit")
-    return self;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CPhCltUssdImp::ConstructL( TBool aShowNotes )
-    {
-    TFLOGSTRING("CPhCltUssdImp: ConstructL call")
-    // The note controller is needed only if the notes are shown.
-    iNoteController = NULL;
-    
-    if ( aShowNotes )
-        {
-        iNoteController = CPhCltUssdNoteController::NewL( 
-            *this );
-        }
-
-    iDCS = KPhCltUssdDcsDefaultAlphabet;
-    iWait = new( ELeave ) CActiveSchedulerWait;
-
-    // The one that send the request forward.
-    iRequestHandler = CPhCltUssdRequestHandler::NewL( 
-        *this, 
-        CActive::EPriorityStandard );
-    TFLOGSTRING("CPhCltUssdImp: ConstructL exit")
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::CPhCltUssdImp
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CPhCltUssdImp::CPhCltUssdImp()
-    {
-    TFLOGSTRING("CPhCltUssdImp: CPhCltUssdImp call_exit")
-    } 
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::~CPhCltUssdImp
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-CPhCltUssdImp::~CPhCltUssdImp()
-    {
-    TFLOGSTRING("CPhCltUssdImp: ~CPhCltUssdImp call") 
-    if ( iWait )
-        {
-        if ( iWait->IsStarted() )
-            {
-            iWait->AsyncStop();
-            }
-        delete iWait;
-        iWait = NULL;
-        }
-
-    delete iRequestHandler;
-    iRequestHandler = NULL;
-    
-    delete iNoteController;
-    iNoteController = NULL;
-    TFLOGSTRING("CPhCltUssdImp: ~CPhCltUssdImp exit") 
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::HandleSendEventL
-// 
-// Called when the Send request is completed. aError might be
-// positive -> the Send is completed due received message.
-// -----------------------------------------------------------------------------
-//
-void CPhCltUssdImp::HandleSendEventL( const TInt aError )
-    {
-    iSendError = Min( aError , KErrNone );
-    TFLOGSTRING2("CPhCltUssdImp: HandleSendEventL\
-            aError = %d call", aError)
-    // iNoteController is allocated only if notes are shown.
-    if ( iNoteController )
-        {
-        // Send request is completed, now destroy the wait note
-        iNoteController->DestroyGlobalWaitNote();
-
-        // Show a different note depenging on the error code.
-        if ( aError <= 0 )
-            {
-            switch ( aError )
-                {
-                // All Ok.
-                case KErrNone:
-                    iNoteController->ShowGlobalInformationNoteL( EPhCltUssdDone );
-                    break;
-
-                // Operation cancelled.
-                case KErrCancel:
-                    iNoteController->ShowGlobalInformationNoteL( EPhCltUssdUnconfirme );
-                    break;
-
-                // Ongoing Ussd session or the string is barred due SS request
-                // or Fixed Dialling feature.
-                case KErrInUse:
-                case KErrAccessDenied:
-                case KErrGsmSSCallBarred:
-                    iNoteController->ShowGlobalInformationNoteL( EPhCltUssdNotallowed );
-                    break;
-
-                // No network coverage.
-                case KErrGsmSMSNoNetworkService:
-                    iNoteController->ShowGlobalInformationNoteL(EPhCltUssdNoservice );
-                    break;
-
-                // Offline mode.
-                case KErrGsmOfflineOpNotAllowed:
-                    iNoteController->ShowGlobalInformationNoteL( EPhCltUssdOffline );
-                    break;
-                    
-                case KErrSatControl:
-                    break; 
-
-                // Unknown error.
-                default:
-                    iNoteController->ShowGlobalInformationNoteL( EPhCltUssdNotDone );
-                    break;
-                }
-            }
-        }
-
-    // Let the original active object (one that did the send request) run again.
-    if ( iWait->IsStarted() )
-        {
-        iWait->AsyncStop();
-        }
-    TFLOGSTRING("CPhCltUssdImp: HandleSendEventL exit")
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::SendUssd
-// 
-// 16-bit buffer is packed into 7-bit stream and sent.
-// Default alphabet is used.
-// -----------------------------------------------------------------------------
-//
-TInt CPhCltUssdImp::SendUssd( const TDesC& aMsgData )
-    {
-    __ASSERT_ALWAYS( aMsgData.Length() <= KPhCltUssdMax8BitCharacters,
-        User::Invariant() );
-
-    TRAPD( err ,
-        {
-        HBufC8* buffer8 = HBufC8::NewLC( KPhCltUssdMax7BitCharacterOctets );
-        
-        TPtr8 ptr8 = buffer8->Des();
-        EncodeL( aMsgData , ptr8 );
-        
-        User::LeaveIfError( SendUssd( ptr8 ) );
-        
-        CleanupStack::PopAndDestroy(); // ptr8
-        });
-
-    return err;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::SendUssd
-// 
-// Packed buffer is send to the network with default alphabet.
-// -----------------------------------------------------------------------------
-//
-/*****************************************************
-*   Series 60 Customer / ETel
-*   Series 60  ETel API
-*****************************************************/
-
-TInt CPhCltUssdImp::SendUssd( const TDesC8& aMsgData )
-    {
-    __ASSERT_ALWAYS( aMsgData.Length() <= KPhCltUssdMax7BitCharacterOctets,
-        User::Invariant() );
- 
-    return SendUssd( aMsgData , iDCS );
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::SendUssd
-// 
-// Packed buffer is sent to network with given alphabet.
-// -----------------------------------------------------------------------------
-//
-TInt CPhCltUssdImp::SendUssd( 
-    const TDesC8& aMsgData, 
-    const TUint8 iSendDcs )
-    {
-    TFLOGSTRING("CPhCltUssdImp: SendUssd call")
-    __ASSERT_ALWAYS( aMsgData.Length() <= KPhCltUssdMax7BitCharacterOctets,
-        User::Invariant() );
-
-    RMobileUssdMessaging::TMobileUssdAttributesV1 attribute;
-
-    attribute.iFlags = 
-        RMobileUssdMessaging::KUssdDataFormat + 
-        RMobileUssdMessaging::KUssdMessageDcs;
-    if ( iDCS2  == KPhCltDcs7Bit )
-        {
-        attribute.iFormat = RMobileUssdMessaging::EFormatPackedString;
-        }
-    else
-        {
-        attribute.iFormat = RMobileUssdMessaging::EFormatUnspecified;
-        }
-        
-    if ( iSendDcs == KPhCltUssdDcsNotSet  ) // 0x00
-        {
-        attribute.iDcs = KPhCltUssdDcsDefaultAlphabet;
-        }
-    else
-        {
-        attribute.iDcs = iSendDcs;
-        } 
-    
-    RMobileUssdMessaging::TMobileUssdAttributesV1Pckg 
-        attributePckg( attribute );
-
-
-    if ( iWait->IsStarted() )
-        {
-        return KErrInUse;
-        }
-
-    iSendError = KErrNone;
-    TFLOGSTRING("CPhCltUssdImp: SendUssd iRequestHandler")
-    iRequestHandler->SendUssd( aMsgData , attributePckg );
-    // iNoteController is allocated only if notes are shown.
-    TFLOGSTRING("CPhCltUssdImp: SendUssd ShowGlobalWaitNoteL")
-    if ( iNoteController )
-        {
-        TRAP_IGNORE( iNoteController->ShowGlobalWaitNoteL(); 
-                    );
-        }
-    TFLOGSTRING("CPhCltUssdImp: SendUssd iWait") 
-
-    // Set this active object to wait the completion of the send request.
-    iWait->Start();
-
-    TFLOGSTRING("CPhCltUssdImp: SendUssd exit") 
-    return iSendError;
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::SendUssdCancel
-// 
-// Cancels the out-standing request.
-// -----------------------------------------------------------------------------
-//
-void CPhCltUssdImp::SendUssdCancel()
-    {
-    TFLOGSTRING("CPhCltUssdImp: SendUssdCancel call")
-    iRequestHandler->SendUssdCancel();
-    TFLOGSTRING("CPhCltUssdImp: SendUssdCancel exit")
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::StartUssdEditor
-// 
-// Request Ussd App to start
-// ---------------------------------------------------------------------------
-//
-TInt CPhCltUssdImp::StartUssdEditor() const
-    {
-    return iRequestHandler->UssdClient().StartUssdEditor();
-    }
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::AppStarting
-// 
-// UI informs that it is been created
-// -----------------------------------------------------------------------------
-//
-TInt CPhCltUssdImp::AppStarting()
-    {
-    TFLOGSTRING("CPhCltUssdImp: AppStarting call")
-    TInt res = iRequestHandler->UssdClient().AppStarting();
-    TFLOGSTRING2("CPhCltUssdImp: AppStarting exit res = %d",res)
-    return res;
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::AppTerminating
-// 
-// UI informs that it is terminating
-// -----------------------------------------------------------------------------
-//    
-TInt CPhCltUssdImp::AppTerminating( 
-      TPhCltUssdAppExitReason aExitReason )
-    {
-    TFLOGSTRING("CPhCltUssdImp: AppTerminating call")
-    TInt res = iRequestHandler->UssdClient().AppTerminating( aExitReason );
-    TFLOGSTRING2("CPhCltUssdImp: AppTerminating exit res = %d",res)
-    return res;
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::AppToForeground
-// 
-// UI informs that it is brougth to foreground
-// -----------------------------------------------------------------------------
-//    
-TBool CPhCltUssdImp::AppToForeground()
-    {
-    TFLOGSTRING("CPhCltUssdImp: AppToForeground call")
-    TBool res =  iRequestHandler->UssdClient().AppToForeground();
-    TFLOGSTRING2("CPhCltUssdImp: AppToForeground exit res = %d",res)
-    return res;
-    }
-    
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::AppToBackground
-// 
-// UI informs that it is gone background
-// -----------------------------------------------------------------------------
-//    
-TInt CPhCltUssdImp::AppToBackground()
-    {
-    TFLOGSTRING("CPhCltUssdImp: AppToBackground call")
-    TInt res = iRequestHandler->UssdClient().AppToBackground();
-    TFLOGSTRING2("CPhCltUssdImp: AppToBackground exit res = %d",res)
-    return res;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::StartSAT
-// 
-// 
-// -----------------------------------------------------------------------------
-//    
-void  CPhCltUssdImp::StartSAT( 
-            TRequestStatus& aStatus, 
-            TDes& aReceiveMessage, 
-            TPckg< TUint >& aShowNotesAndDcs )
-    {
-    TFLOGSTRING("CPhCltUssdImp: StartSAT call")
-    iRequestHandler->UssdClient().StartSAT( aStatus, aReceiveMessage, aShowNotesAndDcs );
-    TFLOGSTRING("CPhCltUssdImp: StartSAT exit")
-    }
- 
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::StopSAT
-// 
-// Cancels SAT session
-// -----------------------------------------------------------------------------
-//   
- void CPhCltUssdImp::StopSAT()
-    {
-    TFLOGSTRING("CPhCltUssdImp: StopSAT call")
-    iRequestHandler->UssdClient().StopSAT();
-    TFLOGSTRING("CPhCltUssdImp: StopSAT exit")
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::GlobalWaitNoteHidden
-//
-// Dialog is hidden by the cancel key.
-// -----------------------------------------------------------------------------
-//
-void CPhCltUssdImp::GlobalWaitNoteHidden()
-    {
-    TFLOGSTRING("CPhCltUssdImp: GlobalWaitNoteHidden call")
-    TFLOGSTRING("CPhCltUssdImp: GlobalWaitNoteHidden exit")
-    }
-
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::EncodeL
-//
-// Converts a given Uniocde string into 7-bit buffer.
-// -----------------------------------------------------------------------------
-//
-void CPhCltUssdImp::EncodeL( const TDesC& aSrc, TDes8& aDes )
-    {
-    TFLOGSTRING("CPhCltUssdImp: EncodeL call")
-    aDes.Zero();
-    TSmsDataCodingScheme::TSmsAlphabet alphabet = 
-        TSmsDataCodingScheme::ESmsAlphabet7Bit; // default
-        
-    CCnvCharacterSetConverter* charConv = CCnvCharacterSetConverter::NewLC();
-    
-    TUint cutChars = 0;
-    TUint startBit = 0;
-
-    if ( iDCS == KPhCltUssdDcsAlphabetDefaultPrecededLanguage )
-        {
-        alphabet = TSmsDataCodingScheme::TSmsDataCodingScheme::ESmsAlphabet7Bit;
-        FindFirstCarriageReturnL( aSrc , cutChars , startBit );
-        
-        }
-    else if ( iDCS == KPhCltUssdDcsAlphabetUCS2PrecededLanguage )
-        {
-        alphabet = TSmsDataCodingScheme::ESmsAlphabetUCS2;
-        cutChars = KPhCltUssdDcsAlphabetUCS2PrecededLanguageSkipChars;
-        }
-    else if ( (iDCS & KPhCltUssdDcsGeneralInformationMask)  == 
-            KPhCltUssdDcsGeneralInformation ) // General data coding information
-        {
-        //Is text compressed?
-        if ( iDCS & KPhCltUssdDcsGeneralInformationCompressed )
-            {
-            User::Leave( KErrNotSupported );
-            }
-        // Is SIM specific message
-        else if ( ( iDCS & KPhCltUssdDcsGeneralInformationSimMask ) 
-                   == KPhCltUssdDcsGeneralInformationSim )
-            {
-            User::Leave( KErrAbort ); // Do not show any messages
-            }
-        // 8 bit data?
-        else if ( ( iDCS & KPhCltUssdDcsGeneralInformationAlphabetMask ) ==  
-                   KPhCltUssdDcsGeneralInformationAlphabet8Bit )
-            {
-            alphabet = TSmsDataCodingScheme::ESmsAlphabet8Bit;
-            }
-        // UCS2 bit data?
-        else if ( ( iDCS & KPhCltUssdDcsGeneralInformationAlphabetMask ) == 
-                   KPhCltUssdDcsGeneralInformationAlphabetUCS2 )
-            {
-            alphabet = TSmsDataCodingScheme::ESmsAlphabetUCS2;
-            }
-        }
-    // Data coding/message handling
-    else if ( ( iDCS & KPhCltUssdDcsMessageHandlingAlphabetMask ) 
-               == KPhCltUssdDcsMessageHandlingAlphabet8Bit )
-        {
-        alphabet = TSmsDataCodingScheme::ESmsAlphabet8Bit;
-        }
-    
-    TPhCltUssdAlphabetPacker* packer = 
-        new ( ELeave ) TPhCltUssdAlphabetPacker( 
-            alphabet, EFalse, startBit );
-        CleanupStack::PushL( packer );
-        
-   
-    RFs fs;
-    User::LeaveIfError( fs.Connect() );
-    CleanupClosePushL( fs );
-    
-    TInt numberOfElem = 0;
-   // packer->ConvertAndPackL( 
-    //    *charConv , fs , aDes , aSrc , numberOfElem );
-        
-        
-    if ( alphabet == TSmsDataCodingScheme::ESmsAlphabet7Bit )
-        {
-        //TInt numberOfElem = (( aSrc.Length() - cutChars ) * 8 - startBit ) / 7;
-            
-         packer->ConvertAndPackL( 
-        *charConv , fs , aDes , aSrc.Right( aSrc.Length() - cutChars ), numberOfElem );
-
-        // DCS was 7-bit data.
-        iDCS2 = KPhCltDcs7Bit; 
-        }
-    else // ESmsAlphabet8Bit || ESmsAlphabetUCS2
-        {
-        CSmsAlphabetConverter* converter =
-            CSmsAlphabetConverter::NewLC(
-                *charConv ,fs, alphabet, EFalse );
-
-        aDes = converter->ConvertFromNativeL(
-            aSrc.Right( aSrc.Length() - cutChars ) );
-        CleanupStack::PopAndDestroy(); //converter
-
-        if( alphabet == TSmsDataCodingScheme::ESmsAlphabet8Bit )
-            {
-            // DCS was 8-bit data.
-            iDCS2 = KPhCltDcs8Bit;
-            }
-        else if( alphabet == TSmsDataCodingScheme::ESmsAlphabetUCS2 )
-            {
-             //DCS was UCS2 data.
-            iDCS2 = KPhCltDcsUcs2;
-            }
-        // If DCS not 8-bit or UCS2, then EPhCltDcsUnknown is returned.
-        }
-    
-    CleanupStack::PopAndDestroy(3); // fs, packer, charConv
-    TFLOGSTRING("CPhCltUssdImp: EncodeL exit")
-    }
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::SetDCS()
-//
-// Set data coding scheme 
-// -----------------------------------------------------------------------------
-//
-void CPhCltUssdImp::SetDCS( TUint8 aDCS )
-    {
-    iDCS = aDCS;
-    }
-
-// -----------------------------------------------------------------------------
-// CPhCltUssdImp::FindFirstCarriageReturnL
-// -----------------------------------------------------------------------------
-//
-void CPhCltUssdImp::FindFirstCarriageReturnL( 
-    const TDesC& aBuffer ,
-    TUint& aSkipChars , 
-    TUint& aStartBit )
-    {
-    if ( aBuffer.Length() < 3 )
-        {
-        User::Leave( KErrUnderflow );
-        }
-
-    aSkipChars = 0;
-    aStartBit = 0;
-
-    // Try out two different cases:
-    // 1. Find CR from thrid byte
-    // 2. Find CR from second byte, starting from bit 6
-
-    // 1.:
-    if ( aBuffer[2] == KPhCltUssdCarriageReturn )
-        {
-        aSkipChars = KPhCltUssdDcsAlphabetDefaultPrecededLanguageSkipChars3;
-        aStartBit = 0;
-        return;
-        }
-
-    // 2.:
-    // First put the pieces together and then compare
-    // Take last 2 bits from the second byte:
-    TUint result1 = aBuffer[1];
-    result1 = result1 >> 6;
-
-    // Take first 5 bits from the third byte:
-    TUint result2 = aBuffer[2];
-    result2 = result2 & 0x1f; // bits 0-4.
-    result2 = result2 << 2; // move to bits 2-6.
-
-    TUint result = result1 + result2; // 0000 00xx + 0xxx xx00
-    if ( result == KPhCltUssdCarriageReturn )
-        {
-        aSkipChars = KPhCltUssdDcsAlphabetDefaultPrecededLanguageSkipChars2;
-        aStartBit = KPhCltUssdDcsAlphabetDefaultPrecededLanguageStartBit;
-        return;
-        }
-
-    // Is was not case 1. or 2. so we are not supporting sort of string.
-    User::Leave( KErrNotSupported );
-    }
-
-// End of File