phoneclientserver/phoneserver/src/ussd/cphsrvussdmanager.cpp
author hgs
Mon, 04 Oct 2010 15:57:13 +0300
changeset 51 12bc758d6a02
parent 48 78df25012fda
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  USSD Manager.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
// INCLUDE FILES
hgs
parents:
diff changeset
    19
#include "cphsrvussdmanager.h" 
hgs
parents:
diff changeset
    20
#include "phsrvutils.h" 
hgs
parents:
diff changeset
    21
#include "cphsrvussdsendhandler.h" 
hgs
parents:
diff changeset
    22
#include "cphsrvussdreceivehandler.h" 
hgs
parents:
diff changeset
    23
#include "cphsrvussdnotifynwrelease.h" 
hgs
parents:
diff changeset
    24
#include "cphsrvresourcemanager.h" 
hgs
parents:
diff changeset
    25
#include "cphsrvussdreplytimer.h" 
hgs
parents:
diff changeset
    26
#include "mphsrvussdmessagesentobserver.h" 
hgs
parents:
diff changeset
    27
#include "mphsrvphoneinterface.h" 
hgs
parents:
diff changeset
    28
#include "cphsrvussdsessioncancelwaiter.h" 
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <apacmdln.h>
hgs
parents:
diff changeset
    31
#include <apgtask.h>
hgs
parents:
diff changeset
    32
#include <bautils.h>
hgs
parents:
diff changeset
    33
#include <textresolver.h>
hgs
parents:
diff changeset
    34
#include <charconv.h>
hgs
parents:
diff changeset
    35
#include <gsmuelem.h>
hgs
parents:
diff changeset
    36
#include <exterror.h>
hgs
parents:
diff changeset
    37
#include <rmmcustomapi.h>
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
#include <w32std.h>
hgs
parents:
diff changeset
    40
#include <apgcli.h>
hgs
parents:
diff changeset
    41
#include <cphcltussd.h> 
hgs
parents:
diff changeset
    42
#include <hbtextresolversymbian.h>
hgs
parents:
diff changeset
    43
#include <phoneserver.rsg> 
hgs
parents:
diff changeset
    44
#include "phsrvdebuginfo.h" 
hgs
parents:
diff changeset
    45
#include <e32property.h>
hgs
parents:
diff changeset
    46
#include <centralrepository.h>
hgs
parents:
diff changeset
    47
#include <coreapplicationuisdomainpskeys.h>
hgs
parents:
diff changeset
    48
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// CONSTANTS
hgs
parents:
diff changeset
    51
const TInt KPhSrvDefaultValue = 0x00000000;
hgs
parents:
diff changeset
    52
// See SharedDataKeysVariant.h or NcnListInternalPSKeys.h
hgs
parents:
diff changeset
    53
// const TInt KPhSrvUssdNoTone = 0; 
hgs
parents:
diff changeset
    54
// const TInt KPhSrvUssdTimeOutObserverGranularity = 2;
hgs
parents:
diff changeset
    55
// const TInt KPhSrvUssdSentMessageObserverGranularity = 2;
hgs
parents:
diff changeset
    56
// See KUssdSecureId in phcltclientserver.h
hgs
parents:
diff changeset
    57
//const TInt KPhSrvUssdAppUID = 0x10005955; 
hgs
parents:
diff changeset
    58
hgs
parents:
diff changeset
    59
const TInt KPhSrvUssdMessageQueryInterval = 500000; // 0.5 sec
hgs
parents:
diff changeset
    60
//const TInt KPhSrvUssdNoteExitPeriod = 500000; // 0.5 sec
hgs
parents:
diff changeset
    61
//
hgs
parents:
diff changeset
    62
const TUint KPhSrvUssdDefaultDCS = 0x0f;                        // 00001111
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
const TUint KPhSrvUssdDcsAlphabetDefaultPrecededLanguage = 0x10;// 00010000
hgs
parents:
diff changeset
    65
const TUint KPhSrvUssdDcsAlphabetDefaultPrecededLanguageSkipChars3 = 3;
hgs
parents:
diff changeset
    66
const TUint KPhSrvUssdDcsAlphabetDefaultPrecededLanguageSkipChars2 = 2;
hgs
parents:
diff changeset
    67
const TUint KPhSrvUssdDcsAlphabetDefaultPrecededLanguageStartBit = 5;
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
const TUint KPhSrvUssdDcsAlphabetUCS2PrecededLanguage = 0x11;   // 00010001
hgs
parents:
diff changeset
    70
const TUint KPhSrvUssdDcsAlphabetUCS2PrecededLanguageSkipChars = 2;
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
const TUint KPhSrvUssdDcsGeneralInformationMask = 0xc0;         // 11000000
hgs
parents:
diff changeset
    73
const TUint KPhSrvUssdDcsGeneralInformation = 0x40;             // 01xxxxxx
hgs
parents:
diff changeset
    74
const TUint KPhSrvUssdDcsGeneralInformationCompressed = 0x20;   // xx1xxxxx
hgs
parents:
diff changeset
    75
const TUint KPhSrvUssdDcsGeneralInformationSimMask = 0x13;      // 00010011
hgs
parents:
diff changeset
    76
const TUint KPhSrvUssdDcsGeneralInformationSim = 0x12;          // xxx1xx10
hgs
parents:
diff changeset
    77
const TUint KPhSrvUssdDcsGeneralInformationAlphabetMask = 0x0c; // 00001100
hgs
parents:
diff changeset
    78
const TUint KPhSrvUssdDcsGeneralInformationAlphabet8Bit = 0x04; // xxxx01xx
hgs
parents:
diff changeset
    79
const TUint KPhSrvUssdDcsGeneralInformationAlphabetUCS2 = 0x08; // xxxx10xx
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
const TUint KPhSrvUssdDcsMessageHandlingAlphabetMask = 0xf4;    // 11110100
hgs
parents:
diff changeset
    82
const TUint KPhSrvUssdDcsMessageHandlingAlphabet8Bit = 0xf4;    // 1111x1xx
hgs
parents:
diff changeset
    83
const TInt KPhrUssdNotifyArraySize = 1;
hgs
parents:
diff changeset
    84
hgs
parents:
diff changeset
    85
// Refers to HbPopup::NoDismiss = 0
hgs
parents:
diff changeset
    86
const TInt KPhSrvUssdPopupDismissPolicy = 0; 
hgs
parents:
diff changeset
    87
// The time out only for testing, from CPhSrvUssdReplyTimer.cpp
hgs
parents:
diff changeset
    88
const TUint KPhSrvUssdTimeout = 300000000;
hgs
parents:
diff changeset
    89
48
hgs
parents: 36
diff changeset
    90
//Refers to HbMessageBox::Yes
hgs
parents: 36
diff changeset
    91
const TUint KHbMsgBoxBtnYes = 0x00002000;
hgs
parents: 36
diff changeset
    92
//Refers to HbMessageBox::No
hgs
parents: 36
diff changeset
    93
const TUint KHbMsgBoxBtnNo = 0x00010000;
hgs
parents: 36
diff changeset
    94
33
hgs
parents:
diff changeset
    95
// Use QT style localization
hgs
parents:
diff changeset
    96
_LIT(KUssdLocFilename, "ussd_");
hgs
parents:
diff changeset
    97
_LIT(KCommonLocFilename, "common_");
hgs
parents:
diff changeset
    98
_LIT(KLocPath, "z:\\resource\\qt\\translations");
hgs
parents:
diff changeset
    99
_LIT(KUssdReply, "txt_ussd_button_reply"); // Reply
hgs
parents:
diff changeset
   100
_LIT(KUssdExit, "txt_ussd_button_exit"); // Exit
hgs
parents:
diff changeset
   101
_LIT(KUssdNext, "txt_ussd_button_next"); //Next
hgs
parents:
diff changeset
   102
_LIT(KUssdYes, "txt_common_button_yes"); // Yes
hgs
parents:
diff changeset
   103
_LIT(KUssdNo, "txt_common_button_no"); // No
hgs
parents:
diff changeset
   104
_LIT(KUssdTitle, "txt_ussd_title_message"); // Message
hgs
parents:
diff changeset
   105
_LIT(KUssdDone, "txt_ussd_dpopinfo_done"); // Done
hgs
parents:
diff changeset
   106
_LIT(KUssdConfirm, "txt_ussd_info_there_are_still_unread_notifications");
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
// MACROS
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
#define _DPRINT_FLAGS() \
hgs
parents:
diff changeset
   111
    _DDPRINT( 4, "PhSrv.FLAGS.MsgTypeReply ", iMsgTypeReply ); \
hgs
parents:
diff changeset
   112
    _DDPRINT( 4, "PhSrv.FLAGS.NwReleased   ", iNetworkReleased ); \
hgs
parents:
diff changeset
   113
    _DDPRINT( 4, "PhSrv.FLAGS.SendingAck   ", iSendingAck ); \
hgs
parents:
diff changeset
   114
    _DDPRINT( 4, "PhSrv.FLAGS.AcksToBeSent ", iAcksToBeSent ); \
hgs
parents:
diff changeset
   115
    _DDPRINT( 4, "PhSrv.FLAGS.iSendRelease ", iSendRelease ); \
hgs
parents:
diff changeset
   116
    _DDPRINT( 4, "PhSrv.FLAGS.iClearArray  ", iClearArray ); \
hgs
parents:
diff changeset
   117
    _DDPRINT( 4, "PhSrv.FLAGS.iLaunchGMQ   ", iLaunchGMQ ); \
hgs
parents:
diff changeset
   118
    _DDPRINT( 4, "PhSrv.FLAGS.NotifyCount  ", NotifyCount() ); \
hgs
parents:
diff changeset
   119
    _DDPRINT( 4, "PhSrv.FLAGS.iShowDone    ", iShowDone ); 
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
// ============================= LOCAL FUNCTIONS ===============================
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
// CLASS DECLARATION
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
#ifndef TPHSRVUSSDALPHABETPACKER_H
hgs
parents:
diff changeset
   126
#define TPHSRVUSSDALPHABETPACKER_H
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
// CONSTANTS
hgs
parents:
diff changeset
   129
const TUint8 KPhSrvUssdCarriageReturn = 0x0d;
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
/**
hgs
parents:
diff changeset
   132
*  Packs and unpacks data encoded in an Ussd alphabet.
hgs
parents:
diff changeset
   133
*
hgs
parents:
diff changeset
   134
*  @since 1.0
hgs
parents:
diff changeset
   135
*/
hgs
parents:
diff changeset
   136
class TPhSrvUssdAlphabetPacker
hgs
parents:
diff changeset
   137
    {
hgs
parents:
diff changeset
   138
    public:  // Constructors and destructor
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
        /**
hgs
parents:
diff changeset
   141
        * Constructor.
hgs
parents:
diff changeset
   142
        *
hgs
parents:
diff changeset
   143
        * @param aAlphabet The alphabet that is used.
hgs
parents:
diff changeset
   144
        * @param aIsBinary Is the data binary, that will be converted.
hgs
parents:
diff changeset
   145
        * @param aStartBit The start bit for conversion.
hgs
parents:
diff changeset
   146
        */
hgs
parents:
diff changeset
   147
        TPhSrvUssdAlphabetPacker(
hgs
parents:
diff changeset
   148
            TSmsDataCodingScheme::TSmsAlphabet aAlphabet,
hgs
parents:
diff changeset
   149
            TBool aIsBinary,
hgs
parents:
diff changeset
   150
            TInt aStartBit );
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
    public: // New functions
hgs
parents:
diff changeset
   154
hgs
parents:
diff changeset
   155
        /**
hgs
parents:
diff changeset
   156
        * Unpacks 7-bit buffer to 8-bit buffer.
hgs
parents:
diff changeset
   157
        *
hgs
parents:
diff changeset
   158
        * @param aIn Descriptor where the 7-bit buffer is.
hgs
parents:
diff changeset
   159
        * @param aOut 8-bit buffer to set the result.
hgs
parents:
diff changeset
   160
        * @param aNumUDUnits Buffer length.
hgs
parents:
diff changeset
   161
        * @return Length of the result buffer.
hgs
parents:
diff changeset
   162
        */
hgs
parents:
diff changeset
   163
        TInt UnpackL(
hgs
parents:
diff changeset
   164
            const TDesC8& aIn,
hgs
parents:
diff changeset
   165
            TDes8& aOut,
hgs
parents:
diff changeset
   166
            TInt aNumUDUnits );
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
        /**
hgs
parents:
diff changeset
   169
        * Unpacks 7-bit buffer to 8-bit and converts to unicode.
hgs
parents:
diff changeset
   170
        *
hgs
parents:
diff changeset
   171
        * @param aCharacterSetConverter Does the converting.
hgs
parents:
diff changeset
   172
        * @param aFs File server session.
hgs
parents:
diff changeset
   173
        * @param aIn Packed 7-bit buffer.
hgs
parents:
diff changeset
   174
        * @param aOut Unicode buffer.
hgs
parents:
diff changeset
   175
        * @param aNumUDUnits Number of charahters.
hgs
parents:
diff changeset
   176
        * @return Number of used octets in 8-bit buffer.
hgs
parents:
diff changeset
   177
        */
hgs
parents:
diff changeset
   178
        TInt UnpackAndConvertL(
hgs
parents:
diff changeset
   179
            CCnvCharacterSetConverter& aCharacterSetConverter,
hgs
parents:
diff changeset
   180
            RFs& aFs,
hgs
parents:
diff changeset
   181
            const TDesC8& aIn,
hgs
parents:
diff changeset
   182
            TDes& aOut,
hgs
parents:
diff changeset
   183
            TInt aNumUDUnits );
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
        /**
hgs
parents:
diff changeset
   186
        * Counts the needed octet amout.
hgs
parents:
diff changeset
   187
        *
hgs
parents:
diff changeset
   188
        * @param aNumUDUnits Number of source characters.
hgs
parents:
diff changeset
   189
        * @return Octets needed.
hgs
parents:
diff changeset
   190
        */
hgs
parents:
diff changeset
   191
        TInt PackedOctetsRequiredL( TInt aNumUDUnits ) const;
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
    private:
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
        // Private helper methods
hgs
parents:
diff changeset
   197
        TInt ElementSizeInBitsL() const;
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
    private:    // Data
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
        // The used coding alphabet.
hgs
parents:
diff changeset
   203
        TSmsDataCodingScheme::TSmsAlphabet iAlphabet;
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
        // Is the packed data binary.
hgs
parents:
diff changeset
   206
        TBool iIsBinary;
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
        // The start bit for packing.
hgs
parents:
diff changeset
   209
        TInt iStartBit;
hgs
parents:
diff changeset
   210
    };
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
#endif // TPHSRVUSSDALPHABETPACKER_H
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   216
// TPhSrvUssdAlphabetPacker::TPhSrvUssdAlphabetPacker
hgs
parents:
diff changeset
   217
// Constructor.
hgs
parents:
diff changeset
   218
//
hgs
parents:
diff changeset
   219
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   220
//
hgs
parents:
diff changeset
   221
TPhSrvUssdAlphabetPacker::TPhSrvUssdAlphabetPacker(
hgs
parents:
diff changeset
   222
    TSmsDataCodingScheme::TSmsAlphabet aAlphabet,
hgs
parents:
diff changeset
   223
    TBool aIsBinary,
hgs
parents:
diff changeset
   224
    TInt aStartBit)
hgs
parents:
diff changeset
   225
    : iAlphabet( aAlphabet ),iIsBinary( aIsBinary ),iStartBit( aStartBit )
hgs
parents:
diff changeset
   226
    {
hgs
parents:
diff changeset
   227
    }
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   231
// TPhSrvUssdAlphabetPacker::UnpackL
hgs
parents:
diff changeset
   232
// Unpacks user data units from aIn and appends to aOut.
hgs
parents:
diff changeset
   233
//
hgs
parents:
diff changeset
   234
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   235
//
hgs
parents:
diff changeset
   236
TInt TPhSrvUssdAlphabetPacker::UnpackL(
hgs
parents:
diff changeset
   237
    const TDesC8& aIn,
hgs
parents:
diff changeset
   238
    TDes8& aOut,
hgs
parents:
diff changeset
   239
    TInt aNumUDUnits )
hgs
parents:
diff changeset
   240
    {
hgs
parents:
diff changeset
   241
    TInt length = aNumUDUnits;
hgs
parents:
diff changeset
   242
    // Ensure we've got enough  output buffer
hgs
parents:
diff changeset
   243
    if ( aOut.Length() + length > aOut.MaxLength() )
hgs
parents:
diff changeset
   244
        {
hgs
parents:
diff changeset
   245
        User::Leave(KErrCorrupt);
hgs
parents:
diff changeset
   246
        }
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
    TInt elementSizeInBits = ElementSizeInBitsL();
hgs
parents:
diff changeset
   249
    if ( elementSizeInBits == 8 ) // 8-bit data?
hgs
parents:
diff changeset
   250
        {
hgs
parents:
diff changeset
   251
        aOut.Append( aIn );
hgs
parents:
diff changeset
   252
        }
hgs
parents:
diff changeset
   253
    else if ( elementSizeInBits == 7 ) // need unpacking from 7-bit data
hgs
parents:
diff changeset
   254
        {
hgs
parents:
diff changeset
   255
        // Get raw pointers and do unpacking
hgs
parents:
diff changeset
   256
        TUint8* outPtr = ( TUint8* )aOut.Ptr() + aOut.Length();
hgs
parents:
diff changeset
   257
        const TUint8* inPtr = aIn.Ptr();
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
        for ( TInt i = 0; i < length; i++ )
hgs
parents:
diff changeset
   260
            {
hgs
parents:
diff changeset
   261
            TInt from = ( *inPtr >> iStartBit ) & 0x7F; // Take seven bits
hgs
parents:
diff changeset
   262
            if ( iStartBit )
hgs
parents:
diff changeset
   263
                {
hgs
parents:
diff changeset
   264
                inPtr++;
hgs
parents:
diff changeset
   265
                // Take more from next byte
hgs
parents:
diff changeset
   266
                from |= ( *inPtr << ( 8 - iStartBit ) ) & 0x7F;
hgs
parents:
diff changeset
   267
                }
hgs
parents:
diff changeset
   268
            outPtr[i] = ( TUint8 ) from;
hgs
parents:
diff changeset
   269
            iStartBit = ( iStartBit + 7 ) % 8; // roll: 0,1,2,...,6,7,0,1,2...
hgs
parents:
diff changeset
   270
            }
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
        // The last character will be ignored if message ends
hgs
parents:
diff changeset
   273
        // on an octet bounday with CR.
hgs
parents:
diff changeset
   274
        if ( outPtr[ length-1 ] == KPhSrvUssdCarriageReturn && iStartBit == 0 )
hgs
parents:
diff changeset
   275
            {
hgs
parents:
diff changeset
   276
            length--;
hgs
parents:
diff changeset
   277
            }
hgs
parents:
diff changeset
   278
        aOut.SetLength( aOut.Length() + length );
hgs
parents:
diff changeset
   279
        }
hgs
parents:
diff changeset
   280
    else
hgs
parents:
diff changeset
   281
        {
hgs
parents:
diff changeset
   282
        __ASSERT_DEBUG(EFalse,
hgs
parents:
diff changeset
   283
            PhoneServerUtils::Panic( EPhoneServerPanicModeLogicFault ) );
hgs
parents:
diff changeset
   284
        }
hgs
parents:
diff changeset
   285
    return length;
hgs
parents:
diff changeset
   286
    }
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   290
// TPhSrvUssdAlphabetPacker::UnpackAndConvertL
hgs
parents:
diff changeset
   291
// Unpacks the converts the input data, aIn, and appends to aOut
hgs
parents:
diff changeset
   292
//
hgs
parents:
diff changeset
   293
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   294
//
hgs
parents:
diff changeset
   295
TInt TPhSrvUssdAlphabetPacker::UnpackAndConvertL(
hgs
parents:
diff changeset
   296
    CCnvCharacterSetConverter& aCharacterSetConverter,
hgs
parents:
diff changeset
   297
    RFs& aFs,
hgs
parents:
diff changeset
   298
    const TDesC8& aIn,
hgs
parents:
diff changeset
   299
    TDes& aOut,
hgs
parents:
diff changeset
   300
    TInt aNumUDUnits )
hgs
parents:
diff changeset
   301
    {
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
    // Unpack first
hgs
parents:
diff changeset
   304
    HBufC8* unpackedBuffer = HBufC8::NewLC( aNumUDUnits );
hgs
parents:
diff changeset
   305
    TPtr8 unpackedBufferPtr( unpackedBuffer->Des() );
hgs
parents:
diff changeset
   306
    UnpackL( aIn, unpackedBufferPtr,aNumUDUnits );
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
    // Convert
hgs
parents:
diff changeset
   309
    CSmsAlphabetConverter* converter =
hgs
parents:
diff changeset
   310
        CSmsAlphabetConverter::NewLC(
hgs
parents:
diff changeset
   311
            aCharacterSetConverter, aFs, iAlphabet, iIsBinary );
hgs
parents:
diff changeset
   312
hgs
parents:
diff changeset
   313
    TPtrC convertedPtr = converter->ConvertToNativeL( *unpackedBuffer );
hgs
parents:
diff changeset
   314
    if ( convertedPtr.Length() > ( aOut.MaxLength() - aOut.Length() ) )
hgs
parents:
diff changeset
   315
        {
hgs
parents:
diff changeset
   316
        User::Leave( KErrCorrupt );
hgs
parents:
diff changeset
   317
        }
hgs
parents:
diff changeset
   318
    // Cleanup and return
hgs
parents:
diff changeset
   319
    aOut.Append( convertedPtr );
hgs
parents:
diff changeset
   320
    CleanupStack::PopAndDestroy( 2 );    // unpackedBuffer, converter
hgs
parents:
diff changeset
   321
    return aNumUDUnits;
hgs
parents:
diff changeset
   322
    }
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   326
// TPhSrvUssdAlphabetPacker::PackedOctetsRequiredL
hgs
parents:
diff changeset
   327
// Returns the number of octets needed to pack the specified number of
hgs
parents:
diff changeset
   328
//
hgs
parents:
diff changeset
   329
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   330
//
hgs
parents:
diff changeset
   331
TInt TPhSrvUssdAlphabetPacker::PackedOctetsRequiredL( TInt aNumUDUnits ) const
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
    {
hgs
parents:
diff changeset
   334
    TInt octetsRequired = 0;
hgs
parents:
diff changeset
   335
    TInt elementSizeInBits = ElementSizeInBitsL();
hgs
parents:
diff changeset
   336
    if ( elementSizeInBits == 8 )
hgs
parents:
diff changeset
   337
        {
hgs
parents:
diff changeset
   338
        octetsRequired=aNumUDUnits;
hgs
parents:
diff changeset
   339
        }
hgs
parents:
diff changeset
   340
    else
hgs
parents:
diff changeset
   341
        {
hgs
parents:
diff changeset
   342
        octetsRequired =
hgs
parents:
diff changeset
   343
            ( iStartBit+aNumUDUnits * elementSizeInBits + 7 ) / 8;  // Rounds up
hgs
parents:
diff changeset
   344
        }
hgs
parents:
diff changeset
   345
    return octetsRequired;
hgs
parents:
diff changeset
   346
    }
hgs
parents:
diff changeset
   347
hgs
parents:
diff changeset
   348
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   349
// TPhSrvUssdAlphabetPacker::ElementSizeInBitsL
hgs
parents:
diff changeset
   350
// Returns the size in bits of a UDL element for the alphabet.  Leaves if
hgs
parents:
diff changeset
   351
// invalid data coding scheme.
hgs
parents:
diff changeset
   352
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   353
//
hgs
parents:
diff changeset
   354
TInt TPhSrvUssdAlphabetPacker::ElementSizeInBitsL() const
hgs
parents:
diff changeset
   355
    {
hgs
parents:
diff changeset
   356
    if (iIsBinary)
hgs
parents:
diff changeset
   357
        return 8;
hgs
parents:
diff changeset
   358
    switch ( iAlphabet )
hgs
parents:
diff changeset
   359
        {
hgs
parents:
diff changeset
   360
        case TSmsDataCodingScheme::ESmsAlphabet7Bit:
hgs
parents:
diff changeset
   361
            {
hgs
parents:
diff changeset
   362
            return 7;
hgs
parents:
diff changeset
   363
            }
hgs
parents:
diff changeset
   364
        case TSmsDataCodingScheme::ESmsAlphabet8Bit:
hgs
parents:
diff changeset
   365
        case TSmsDataCodingScheme::ESmsAlphabetUCS2:
hgs
parents:
diff changeset
   366
            {
hgs
parents:
diff changeset
   367
            return 8;
hgs
parents:
diff changeset
   368
            }
hgs
parents:
diff changeset
   369
        default:
hgs
parents:
diff changeset
   370
            {
hgs
parents:
diff changeset
   371
            User::Leave(KErrGsmSMSDataCodingSchemeNotSupported);
hgs
parents:
diff changeset
   372
            return 8;
hgs
parents:
diff changeset
   373
            }
hgs
parents:
diff changeset
   374
        }
hgs
parents:
diff changeset
   375
    }
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   382
// CPhSrvUssdManager::CPhSrvUssdManager
hgs
parents:
diff changeset
   383
//
hgs
parents:
diff changeset
   384
// Constructor
hgs
parents:
diff changeset
   385
//
hgs
parents:
diff changeset
   386
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   387
//
hgs
parents:
diff changeset
   388
CPhSrvUssdManager::CPhSrvUssdManager(
hgs
parents:
diff changeset
   389
    RFs& aFsSession,
hgs
parents:
diff changeset
   390
    CPhSrvResourceManager& aResourceManager
hgs
parents:
diff changeset
   391
    )
hgs
parents:
diff changeset
   392
    :CActive( EPriorityLow ),
hgs
parents:
diff changeset
   393
     iFsSession( aFsSession ),
hgs
parents:
diff changeset
   394
     iResourceManager( aResourceManager ),
hgs
parents:
diff changeset
   395
     iDeviceDialog( NULL ),
hgs
parents:
diff changeset
   396
     iDCS ( KPhCltDcsUnknown ),
hgs
parents:
diff changeset
   397
     iReturnResultPckg ( iReturnResult ),
48
hgs
parents: 36
diff changeset
   398
     iTextBuffer ( NULL ),
hgs
parents: 36
diff changeset
   399
     iDialogType ( EInvalidType )
33
hgs
parents:
diff changeset
   400
    {
hgs
parents:
diff changeset
   401
    CActiveScheduler::Add( this );
hgs
parents:
diff changeset
   402
    }
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   406
// CPhSrvUssdManager::~CPhSrvUssdManager
hgs
parents:
diff changeset
   407
//
hgs
parents:
diff changeset
   408
// Destructor
hgs
parents:
diff changeset
   409
//
hgs
parents:
diff changeset
   410
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   411
//
hgs
parents:
diff changeset
   412
CPhSrvUssdManager::~CPhSrvUssdManager()
hgs
parents:
diff changeset
   413
    {
hgs
parents:
diff changeset
   414
    _DPRINT( 4, "PhSrv.~CPhSrvUssdManager.start" );
hgs
parents:
diff changeset
   415
hgs
parents:
diff changeset
   416
hgs
parents:
diff changeset
   417
    delete iUssdSendHandler;
hgs
parents:
diff changeset
   418
    iUssdSendHandler = NULL;
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
    delete iUssdReceiveHandler;
hgs
parents:
diff changeset
   421
    iUssdReceiveHandler = NULL;
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
    delete iUssdNotifyNWRelease;
hgs
parents:
diff changeset
   424
    iUssdNotifyNWRelease = NULL;
hgs
parents:
diff changeset
   425
hgs
parents:
diff changeset
   426
    Cancel();
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
    iTimer.Close();
hgs
parents:
diff changeset
   429
    
hgs
parents:
diff changeset
   430
    delete iTextBuffer;
hgs
parents:
diff changeset
   431
    iTextBuffer = NULL;
hgs
parents:
diff changeset
   432
    
hgs
parents:
diff changeset
   433
    delete iDeviceDialog;
hgs
parents:
diff changeset
   434
    iDeviceDialog = NULL;
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
    if ( iNotifyArray )
hgs
parents:
diff changeset
   437
        {
hgs
parents:
diff changeset
   438
        iNotifyArray->Reset();
hgs
parents:
diff changeset
   439
        }
hgs
parents:
diff changeset
   440
    delete iNotifyArray;
hgs
parents:
diff changeset
   441
    if ( iUssdReplyTimer )
hgs
parents:
diff changeset
   442
        {
hgs
parents:
diff changeset
   443
        iUssdReplyTimer->Stop();
hgs
parents:
diff changeset
   444
        }
hgs
parents:
diff changeset
   445
    delete iUssdReplyTimer;
hgs
parents:
diff changeset
   446
    iUssdReplyTimer = NULL;
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
    iFsSession.Close();
hgs
parents:
diff changeset
   449
hgs
parents:
diff changeset
   450
    iMobileUssdMessaging.Close();
hgs
parents:
diff changeset
   451
    
hgs
parents:
diff changeset
   452
    delete iMoAckCallback;
hgs
parents:
diff changeset
   453
hgs
parents:
diff changeset
   454
    _DPRINT( 4, "PhSrv.~CPhSrvUssdManager.end" );
hgs
parents:
diff changeset
   455
    }
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   459
// CPhSrvUssdManager::ConstructL
hgs
parents:
diff changeset
   460
//
hgs
parents:
diff changeset
   461
// Symbian OS 2nd phase constructor
hgs
parents:
diff changeset
   462
//
hgs
parents:
diff changeset
   463
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   464
//
hgs
parents:
diff changeset
   465
void CPhSrvUssdManager::ConstructL( MPhSrvPhoneInterface& aPhoneInterface )
hgs
parents:
diff changeset
   466
    {
hgs
parents:
diff changeset
   467
    _DPRINT( 4, "PhSrv.ConstructL.Start" );
hgs
parents:
diff changeset
   468
    const TBool textResolver = HbTextResolverSymbian::Init( 
hgs
parents:
diff changeset
   469
        KUssdLocFilename, KLocPath );
hgs
parents:
diff changeset
   470
    _DDPRINT( 4, "PhSrv.ConstructL.ussd loc:", textResolver );
hgs
parents:
diff changeset
   471
    User::LeaveIfError( iTimer.CreateLocal() );
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
    User::LeaveIfError( iMobileUssdMessaging.Open( aPhoneInterface.PhSrvMobilePhone() ) );
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
    // Check support
hgs
parents:
diff changeset
   476
    RMobileUssdMessaging::TMobileUssdCapsV1 caps;
hgs
parents:
diff changeset
   477
    RMobileUssdMessaging::TMobileUssdCapsV1Pckg pckgCaps( caps );
hgs
parents:
diff changeset
   478
    User::LeaveIfError( iMobileUssdMessaging.GetCaps( pckgCaps ) );
hgs
parents:
diff changeset
   479
hgs
parents:
diff changeset
   480
    if ( !( ( caps.iUssdTypes & RMobileUssdMessaging::KCapsMTUssd ) == 0 &&
hgs
parents:
diff changeset
   481
        ( caps.iUssdFormat & RMobileUssdMessaging::KCapsPackedString ) == 0 ) )
hgs
parents:
diff changeset
   482
        {
hgs
parents:
diff changeset
   483
        _DPRINT( 4, "PhSrv.CPhSrvUssdManager::ConstructL" );
hgs
parents:
diff changeset
   484
        iUssdReceiveHandler = new( ELeave ) CPhSrvUssdReceiveHandler(
hgs
parents:
diff changeset
   485
            *this,
hgs
parents:
diff changeset
   486
            iMobileUssdMessaging );
hgs
parents:
diff changeset
   487
        iUssdReceiveHandler->ConstructL();
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
        iUssdNotifyNWRelease = new( ELeave )  CPhSrvUssdNotifyNWRelease(
hgs
parents:
diff changeset
   490
            *this,
hgs
parents:
diff changeset
   491
            iMobileUssdMessaging );
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
        iUssdNotifyNWRelease->ConstructL();
hgs
parents:
diff changeset
   494
        }
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
    iPhoneInterface = &aPhoneInterface;
hgs
parents:
diff changeset
   497
hgs
parents:
diff changeset
   498
    SendHandlerL();
hgs
parents:
diff changeset
   499
    
hgs
parents:
diff changeset
   500
    iMoAckCallback = new (ELeave) CAsyncCallBack( TCallBack( MoAckCallback, this ), CActive::EPriorityIdle );
hgs
parents:
diff changeset
   501
hgs
parents:
diff changeset
   502
    iVariantReadOnlyValues = KPhSrvDefaultValue;
hgs
parents:
diff changeset
   503
hgs
parents:
diff changeset
   504
    User::LeaveIfError( GetTelephonyVariantData() );
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
    _DDPRINT( 4, "PhSrv.ConstructL.iSatCanceled ", iSatCanceled );
hgs
parents:
diff changeset
   507
    _DDPRINT( 4, "PhSrv.ConstructL.iShowDone ", iShowDone );
hgs
parents:
diff changeset
   508
    iNotifyArray = new( ELeave ) CDesCArrayFlat( KPhrUssdNotifyArraySize );
hgs
parents:
diff changeset
   509
    _DPRINT( 4, "PhSrv.ConstructL.End" );
hgs
parents:
diff changeset
   510
    }
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   514
// CPhSrvUssdManager::SendHandlerL
hgs
parents:
diff changeset
   515
//
hgs
parents:
diff changeset
   516
// The send handler.
hgs
parents:
diff changeset
   517
//
hgs
parents:
diff changeset
   518
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   519
//
hgs
parents:
diff changeset
   520
CPhSrvUssdSendHandler& CPhSrvUssdManager::SendHandlerL()
hgs
parents:
diff changeset
   521
    {
hgs
parents:
diff changeset
   522
    // If SendHandler is not created, first check that MO Ussd
hgs
parents:
diff changeset
   523
    // is supported by the TSY.
hgs
parents:
diff changeset
   524
    _DPRINT( 4, "PhSrv.SendHandlerL.Start" );
hgs
parents:
diff changeset
   525
    if ( iUssdSendHandler == NULL )
hgs
parents:
diff changeset
   526
        {
hgs
parents:
diff changeset
   527
        _DPRINT( 4, "PhSrv.SendHandlerL.iUssdSendHandler.NULL" );
hgs
parents:
diff changeset
   528
        RMobileUssdMessaging::TMobileUssdCapsV1 caps;
hgs
parents:
diff changeset
   529
        RMobileUssdMessaging::TMobileUssdCapsV1Pckg pckgCaps( caps );
hgs
parents:
diff changeset
   530
        User::LeaveIfError( iMobileUssdMessaging.GetCaps( pckgCaps ) );
hgs
parents:
diff changeset
   531
        _DPRINT( 4, "PhSrv.SendHandlerL.iMobileUssdMessaging.GetCaps" );
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
        if ( ( caps.iUssdTypes & RMobileUssdMessaging::KCapsMOUssd ) == 0 ||
hgs
parents:
diff changeset
   534
            ( caps.iUssdFormat & RMobileUssdMessaging::KCapsPackedString )
hgs
parents:
diff changeset
   535
            == 0 )
hgs
parents:
diff changeset
   536
            {
hgs
parents:
diff changeset
   537
            _DPRINT( 4, "PhSrv.SendHandlerL.KErrNotSupported" );
hgs
parents:
diff changeset
   538
            User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   539
            }
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
        iUssdSendHandler =
hgs
parents:
diff changeset
   542
            new( ELeave ) CPhSrvUssdSendHandler(
hgs
parents:
diff changeset
   543
                *this,
hgs
parents:
diff changeset
   544
                iMobileUssdMessaging,
hgs
parents:
diff changeset
   545
                *iPhoneInterface );
hgs
parents:
diff changeset
   546
        }
hgs
parents:
diff changeset
   547
    _DPRINT( 4, "PhSrv.SendHandlerL.End" );
hgs
parents:
diff changeset
   548
    return *iUssdSendHandler;
hgs
parents:
diff changeset
   549
    }
hgs
parents:
diff changeset
   550
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   553
// CPhSrvUssdManager::SendUssdL
hgs
parents:
diff changeset
   554
//
hgs
parents:
diff changeset
   555
// Send the USSD message.
hgs
parents:
diff changeset
   556
//
hgs
parents:
diff changeset
   557
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   558
//
hgs
parents:
diff changeset
   559
void CPhSrvUssdManager::SendUssdL(
hgs
parents:
diff changeset
   560
    const TDesC8& aMsgData,
hgs
parents:
diff changeset
   561
    RMobileUssdMessaging::TMobileUssdAttributesV1& aMsgAttribute,
hgs
parents:
diff changeset
   562
    MPhSrvUssdMessageSentObserver& aObserver )
hgs
parents:
diff changeset
   563
    {
hgs
parents:
diff changeset
   564
    _DPRINT( 4, "PhSrv.SendUssdL.Start ######" );
hgs
parents:
diff changeset
   565
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
   566
    
hgs
parents:
diff changeset
   567
    if ( iObserver && iNetworkReleased ) 
hgs
parents:
diff changeset
   568
        {
hgs
parents:
diff changeset
   569
        // Network has been released but the previous send request is still alive.
hgs
parents:
diff changeset
   570
        // Cancel the pervious send operation, complete the old request with error
hgs
parents:
diff changeset
   571
        // and clean up the pointer.
hgs
parents:
diff changeset
   572
        _DPRINT( 4, "PhSrv.SendUssdL.Error.Complete.Existing" );
hgs
parents:
diff changeset
   573
        if ( iUssdSendHandler ) 
hgs
parents:
diff changeset
   574
            {
hgs
parents:
diff changeset
   575
            iUssdSendHandler->Cancel();
hgs
parents:
diff changeset
   576
            }
hgs
parents:
diff changeset
   577
        iObserver->UssdMessageSentObserverHandleResult( KErrSessionClosed );
hgs
parents:
diff changeset
   578
        iObserver = NULL;
hgs
parents:
diff changeset
   579
        }
hgs
parents:
diff changeset
   580
    
hgs
parents:
diff changeset
   581
    if ( iObserver || iSendingAck )
hgs
parents:
diff changeset
   582
        {
hgs
parents:
diff changeset
   583
        _DPRINT( 4, "PhSrv.SendUssdL.KErrInUse" );
hgs
parents:
diff changeset
   584
        // Other client is using the service.
hgs
parents:
diff changeset
   585
        User::Leave( KErrInUse );
hgs
parents:
diff changeset
   586
        }
hgs
parents:
diff changeset
   587
hgs
parents:
diff changeset
   588
    // Check that message type is set
hgs
parents:
diff changeset
   589
    if( ( aMsgAttribute.iFlags & RMobileUssdMessaging::KUssdMessageType )
hgs
parents:
diff changeset
   590
        == 0 )
hgs
parents:
diff changeset
   591
        _DPRINT( 4, "PhSrv.SendUssdL.KUssdMessageType.0" );
hgs
parents:
diff changeset
   592
        {
hgs
parents:
diff changeset
   593
        // Mesasge type not set -> Set it.
hgs
parents:
diff changeset
   594
        aMsgAttribute.iFlags |= RMobileUssdMessaging::KUssdMessageType;
hgs
parents:
diff changeset
   595
        if ( NetworkWaitingForAnAnswer() )
hgs
parents:
diff changeset
   596
            {
hgs
parents:
diff changeset
   597
            // Network is waiting for an answer
hgs
parents:
diff changeset
   598
            _DPRINT( 4, "PhSrv.SendUssdL.EUssdMOReply" );   // debug print
hgs
parents:
diff changeset
   599
            aMsgAttribute.iType = RMobileUssdMessaging::EUssdMOReply;
hgs
parents:
diff changeset
   600
            }
hgs
parents:
diff changeset
   601
        else
hgs
parents:
diff changeset
   602
            {
hgs
parents:
diff changeset
   603
            _DPRINT( 4, "PhSrv.SendUssdL.EUssdMORequest" );  // debug print
hgs
parents:
diff changeset
   604
            aMsgAttribute.iType = RMobileUssdMessaging::EUssdMORequest;
hgs
parents:
diff changeset
   605
            }
hgs
parents:
diff changeset
   606
        }
hgs
parents:
diff changeset
   607
        
hgs
parents:
diff changeset
   608
    RMobileUssdMessaging::TMobileUssdAttributesV1Pckg attribs( aMsgAttribute );
hgs
parents:
diff changeset
   609
    iShowDone = ETrue;
hgs
parents:
diff changeset
   610
    _DPRINT( 4, "PhSrv.SendUssdL.iShowDone.ETrue" );
hgs
parents:
diff changeset
   611
    _DPRINT( 4, "PhSrv.SendUssdL.Send" );
hgs
parents:
diff changeset
   612
    SendHandlerL().SendUssdL( aMsgData , attribs );
hgs
parents:
diff changeset
   613
    iObserver = &aObserver;
hgs
parents:
diff changeset
   614
    // Not closing nor closed anymore
hgs
parents:
diff changeset
   615
    iNetworkReleased = EFalse;
hgs
parents:
diff changeset
   616
    iSendRelease = EFalse;
hgs
parents:
diff changeset
   617
    iClearArray = EFalse;
hgs
parents:
diff changeset
   618
    
hgs
parents:
diff changeset
   619
    // Reply timer can be killed here... Receive event might come right after this
hgs
parents:
diff changeset
   620
    // which will setup the timer again if needed.
hgs
parents:
diff changeset
   621
    if ( NetworkWaitingForAnAnswer() )
hgs
parents:
diff changeset
   622
        {
hgs
parents:
diff changeset
   623
        _DPRINT( 4, "PhSrv.SendUssdCancel.TimerStop" );   // debug print
hgs
parents:
diff changeset
   624
        iUssdReplyTimer->Stop();
hgs
parents:
diff changeset
   625
        }
hgs
parents:
diff changeset
   626
    _DPRINT( 4, "PhSrv.SendUssdL.End" );
hgs
parents:
diff changeset
   627
    }
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   630
// CPhSrvUssdManager::NetworkWaitingForAnAnswer
hgs
parents:
diff changeset
   631
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   632
//
hgs
parents:
diff changeset
   633
TBool CPhSrvUssdManager::NetworkWaitingForAnAnswer() 
hgs
parents:
diff changeset
   634
    {
hgs
parents:
diff changeset
   635
    return iUssdReplyTimer && iUssdReplyTimer->IsTimerActive();
hgs
parents:
diff changeset
   636
    }
hgs
parents:
diff changeset
   637
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   638
// CPhSrvUssdManager::SendUssdCancel
hgs
parents:
diff changeset
   639
//
hgs
parents:
diff changeset
   640
// Cancel the USSD sending.
hgs
parents:
diff changeset
   641
//
hgs
parents:
diff changeset
   642
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   643
//
hgs
parents:
diff changeset
   644
void CPhSrvUssdManager::SendUssdCancel()
hgs
parents:
diff changeset
   645
    {
hgs
parents:
diff changeset
   646
    _DPRINT( 4, "PhSrv.SendUssdCancel.Start #######" );
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
    // Ack sending should not be canceled unless it's about terminating
hgs
parents:
diff changeset
   649
    // the whole session
hgs
parents:
diff changeset
   650
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
   651
    if ( !iSendingAck || iSendRelease ) 
hgs
parents:
diff changeset
   652
        {
hgs
parents:
diff changeset
   653
        _DPRINT( 4, "PhSrv.SendUssdCancel.DoingCancel" );
hgs
parents:
diff changeset
   654
        iUssdSendHandler->SendUssdCancel();
hgs
parents:
diff changeset
   655
        }
hgs
parents:
diff changeset
   656
hgs
parents:
diff changeset
   657
    if ( iHavePendingSatMessagePointer )
hgs
parents:
diff changeset
   658
        {
hgs
parents:
diff changeset
   659
        _DPRINT( 4, "PhSrv.SendUssdCancel.SatCancel" );
hgs
parents:
diff changeset
   660
        iSatCanceled = ETrue;
hgs
parents:
diff changeset
   661
        }
hgs
parents:
diff changeset
   662
    iObserver = NULL;
hgs
parents:
diff changeset
   663
    
hgs
parents:
diff changeset
   664
    SetActiveIfPendingNotificationsExist();
hgs
parents:
diff changeset
   665
    _DPRINT( 4, "PhSrv.SendUssdCancel.End" );
hgs
parents:
diff changeset
   666
    }
hgs
parents:
diff changeset
   667
hgs
parents:
diff changeset
   668
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   669
// CPhSrvUssdManager::SetActiveIfPendingNotificationsExist
hgs
parents:
diff changeset
   670
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   671
//
hgs
parents:
diff changeset
   672
void CPhSrvUssdManager::SetActiveIfPendingNotificationsExist()
hgs
parents:
diff changeset
   673
    {
hgs
parents:
diff changeset
   674
    if ( !IsActive() && NotifyCount() > 0 )
hgs
parents:
diff changeset
   675
        {
hgs
parents:
diff changeset
   676
        _DPRINT( 4, "PhSrv.AcrtivateIf.NotActiveSelf" );
hgs
parents:
diff changeset
   677
        iLaunchGMQ = ETrue;
hgs
parents:
diff changeset
   678
        iNotifyMessage = ETrue;
hgs
parents:
diff changeset
   679
        _DPRINT( 4, "PhSrv.SendUssdCancel.iNotifyMessage.ETrue" );
hgs
parents:
diff changeset
   680
        iTimer.After( iStatus , KPhSrvUssdMessageQueryInterval );
hgs
parents:
diff changeset
   681
        SetActive();
hgs
parents:
diff changeset
   682
        _DPRINT_FLAGS();
hgs
parents:
diff changeset
   683
        _DDPRINT( 4, "PhSrv.AcrtivateIf.SetActive ", iStatus.Int() );
hgs
parents:
diff changeset
   684
        }
hgs
parents:
diff changeset
   685
    }
hgs
parents:
diff changeset
   686
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   687
// CPhSrvUssdManager::UssdNetworkObserverHandleSendEventL
hgs
parents:
diff changeset
   688
//
hgs
parents:
diff changeset
   689
//
hgs
parents:
diff changeset
   690
//
hgs
parents:
diff changeset
   691
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   692
//
hgs
parents:
diff changeset
   693
void CPhSrvUssdManager::UssdNetworkObserverHandleSendEventL( TInt aError )
hgs
parents:
diff changeset
   694
    {
hgs
parents:
diff changeset
   695
    // debug print
hgs
parents:
diff changeset
   696
    _DDPRINT(
hgs
parents:
diff changeset
   697
        4,
hgs
parents:
diff changeset
   698
        "PhSrv.UssdNetworkObserverHandleSendEventL.Start: ##### ",
hgs
parents:
diff changeset
   699
        aError );
hgs
parents:
diff changeset
   700
hgs
parents:
diff changeset
   701
    // complete SAT if needed
hgs
parents:
diff changeset
   702
    if ( aError < KErrNone )
hgs
parents:
diff changeset
   703
        {
hgs
parents:
diff changeset
   704
 
hgs
parents:
diff changeset
   705
        _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleSendEventL.CompleteSat" );
hgs
parents:
diff changeset
   706
        CompleteSatL( NULL, aError );
hgs
parents:
diff changeset
   707
        }
hgs
parents:
diff changeset
   708
hgs
parents:
diff changeset
   709
    if ( iObserver )
hgs
parents:
diff changeset
   710
        {
hgs
parents:
diff changeset
   711
 
hgs
parents:
diff changeset
   712
        _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleSendEventL.Observer" );
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
        iObserver->UssdMessageSentObserverHandleResult( aError );
hgs
parents:
diff changeset
   715
        iObserver = NULL;
hgs
parents:
diff changeset
   716
        }
hgs
parents:
diff changeset
   717
    
hgs
parents:
diff changeset
   718
    iSendingAck = EFalse;
hgs
parents:
diff changeset
   719
    
hgs
parents:
diff changeset
   720
    AsyncProcessMoAcks();
hgs
parents:
diff changeset
   721
    
hgs
parents:
diff changeset
   722
    // debug print
hgs
parents:
diff changeset
   723
    _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleSendEventL.End" );
hgs
parents:
diff changeset
   724
    }
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   728
// CPhSrvUssdManager::UssdAppTaskExists
hgs
parents:
diff changeset
   729
//
hgs
parents:
diff changeset
   730
//
hgs
parents:
diff changeset
   731
//
hgs
parents:
diff changeset
   732
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   733
//
hgs
parents:
diff changeset
   734
TBool CPhSrvUssdManager::UssdAppTaskExistsL()
hgs
parents:
diff changeset
   735
{   
hgs
parents:
diff changeset
   736
    TBool ret = EFalse;
hgs
parents:
diff changeset
   737
    RWsSession wsSession;
hgs
parents:
diff changeset
   738
    User::LeaveIfError(wsSession.Connect());
hgs
parents:
diff changeset
   739
    _DPRINT( 4, "PhSrv.UssdAppTaskExists.wsSession.Connect" );
hgs
parents:
diff changeset
   740
    CleanupClosePushL(wsSession);
hgs
parents:
diff changeset
   741
    TApaTaskList tasklist(wsSession);
hgs
parents:
diff changeset
   742
    TApaTask task = tasklist.FindApp( KUssdSecureId );
hgs
parents:
diff changeset
   743
    ret = task.Exists();
hgs
parents:
diff changeset
   744
hgs
parents:
diff changeset
   745
    CleanupStack::PopAndDestroy();
hgs
parents:
diff changeset
   746
    return ret;
hgs
parents:
diff changeset
   747
}
hgs
parents:
diff changeset
   748
hgs
parents:
diff changeset
   749
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   750
// CPhSrvUssdManager::UssdNetworkObserverHandleReceivedEventL
hgs
parents:
diff changeset
   751
//
hgs
parents:
diff changeset
   752
//
hgs
parents:
diff changeset
   753
//
hgs
parents:
diff changeset
   754
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   755
//
hgs
parents:
diff changeset
   756
void CPhSrvUssdManager::UssdNetworkObserverHandleReceivedEventL(
hgs
parents:
diff changeset
   757
    const TDes8& aMsgData,
hgs
parents:
diff changeset
   758
    const RMobileUssdMessaging::TMobileUssdAttributesV1& aMsgAttributes,
hgs
parents:
diff changeset
   759
    TInt aError )
hgs
parents:
diff changeset
   760
    {
hgs
parents:
diff changeset
   761
    _DDPRINT(
hgs
parents:
diff changeset
   762
        4,
hgs
parents:
diff changeset
   763
        "PhSrv.UssdNetworkObserverHandleReceivedEventL.Start: ### ",
hgs
parents:
diff changeset
   764
        aError );
hgs
parents:
diff changeset
   765
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
   766
    if ( aError != KErrNone )
hgs
parents:
diff changeset
   767
        {
hgs
parents:
diff changeset
   768
        TurnLightsOn(); //Ensure lights on
hgs
parents:
diff changeset
   769
 
hgs
parents:
diff changeset
   770
        _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleReceivedEventL.ShErNote" );
hgs
parents:
diff changeset
   771
        ShowErrorNoteL( aError );
hgs
parents:
diff changeset
   772
        }
hgs
parents:
diff changeset
   773
    else if ( iSendRelease )
hgs
parents:
diff changeset
   774
        {
hgs
parents:
diff changeset
   775
        // Ignore if sendrelease is to be done. If the message was
hgs
parents:
diff changeset
   776
        _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleReceivedEventL.SendRelease.Ignore" );
hgs
parents:
diff changeset
   777
        }
hgs
parents:
diff changeset
   778
    else
hgs
parents:
diff changeset
   779
        {
hgs
parents:
diff changeset
   780
        UssdHandleReceivedEventL( aMsgData, aMsgAttributes );
hgs
parents:
diff changeset
   781
        }
hgs
parents:
diff changeset
   782
    }
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   785
// CPhSrvUssdManager::UssdHandleReceivedEventL
hgs
parents:
diff changeset
   786
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   787
//
hgs
parents:
diff changeset
   788
void CPhSrvUssdManager::UssdHandleReceivedEventL(
hgs
parents:
diff changeset
   789
    const TDes8& aMsgData,
hgs
parents:
diff changeset
   790
    const RMobileUssdMessaging::TMobileUssdAttributesV1& aMsgAttributes )
hgs
parents:
diff changeset
   791
    {
hgs
parents:
diff changeset
   792
    // This always is either ongoing transaction or starting a new based
hgs
parents:
diff changeset
   793
    // on incoming message, mark transaction to be open.
hgs
parents:
diff changeset
   794
    iNetworkReleased = EFalse;
hgs
parents:
diff changeset
   795
        
hgs
parents:
diff changeset
   796
    // 2. Complete Send with some positive value.
hgs
parents:
diff changeset
   797
    if ( iObserver )
hgs
parents:
diff changeset
   798
        {
hgs
parents:
diff changeset
   799
 
hgs
parents:
diff changeset
   800
        _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Observer" );
hgs
parents:
diff changeset
   801
        UssdNetworkObserverHandleSendEventL( 1 ); // some positive value
hgs
parents:
diff changeset
   802
        }
hgs
parents:
diff changeset
   803
    
hgs
parents:
diff changeset
   804
    if ( aMsgAttributes.iFlags&RMobileUssdMessaging::KUssdMessageType &&
hgs
parents:
diff changeset
   805
         aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTRequest )
hgs
parents:
diff changeset
   806
        {
hgs
parents:
diff changeset
   807
        // 3. Stop old reply timer and start new one if needed.
hgs
parents:
diff changeset
   808
        RestartReplyTimerL();
hgs
parents:
diff changeset
   809
        _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleReceivedEventL.Timer.Stop" );
hgs
parents:
diff changeset
   810
        _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleReceivedEventL.Timer.New" );
hgs
parents:
diff changeset
   811
        }
hgs
parents:
diff changeset
   812
    _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Decode" );
hgs
parents:
diff changeset
   813
    TUint8 dcs = KPhSrvUssdDefaultDCS;
hgs
parents:
diff changeset
   814
    if(aMsgAttributes.iFlags & RMobileUssdMessaging::KUssdMessageDcs)
hgs
parents:
diff changeset
   815
        {
hgs
parents:
diff changeset
   816
        dcs = aMsgAttributes.iDcs;
hgs
parents:
diff changeset
   817
        }
hgs
parents:
diff changeset
   818
    iDecodedMessage.Zero();
hgs
parents:
diff changeset
   819
    iReceivedMessage.Zero();
hgs
parents:
diff changeset
   820
    DecodeL(aMsgData, iDecodedMessage, dcs);
hgs
parents:
diff changeset
   821
    if(iDecodedMessage.Length() > 0)
hgs
parents:
diff changeset
   822
        {
hgs
parents:
diff changeset
   823
        iReceivedMessage = iDecodedMessage;
hgs
parents:
diff changeset
   824
        }
hgs
parents:
diff changeset
   825
    // 5. Show note.
hgs
parents:
diff changeset
   826
    // debug print
hgs
parents:
diff changeset
   827
    _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Note" );
hgs
parents:
diff changeset
   828
    if ( !( aMsgAttributes.iFlags & RMobileUssdMessaging::KUssdMessageType ) ||
hgs
parents:
diff changeset
   829
            aMsgAttributes.iType != RMobileUssdMessaging::EUssdMTRequest )
hgs
parents:
diff changeset
   830
        {
hgs
parents:
diff changeset
   831
        if ( !ShowNotesL() )
hgs
parents:
diff changeset
   832
            {
hgs
parents:
diff changeset
   833
     
hgs
parents:
diff changeset
   834
            _DPRINT( 4,
hgs
parents:
diff changeset
   835
                "PhSrv.UssdHandleReceivedEventL.SAtReturn" );
hgs
parents:
diff changeset
   836
            return;
hgs
parents:
diff changeset
   837
            }
hgs
parents:
diff changeset
   838
        }
hgs
parents:
diff changeset
   839
hgs
parents:
diff changeset
   840
    // empty string is handled as ok message
hgs
parents:
diff changeset
   841
    if ( !iDecodedMessage.Length() )
hgs
parents:
diff changeset
   842
        {
hgs
parents:
diff changeset
   843
        TurnLightsOn(); //Ensure lights on
hgs
parents:
diff changeset
   844
 
hgs
parents:
diff changeset
   845
        _DPRINT( 4,
hgs
parents:
diff changeset
   846
            "PhSrv.UssdHandleReceivedEventL.EmptyString" );
hgs
parents:
diff changeset
   847
        
hgs
parents:
diff changeset
   848
        ShowDoneNoteL();
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
 
hgs
parents:
diff changeset
   851
        _DPRINT( 4,
hgs
parents:
diff changeset
   852
            "PhSrv.UssdHandleReceivedEventL.EmptyString.OK" );
hgs
parents:
diff changeset
   853
        }
hgs
parents:
diff changeset
   854
    else
hgs
parents:
diff changeset
   855
        {
hgs
parents:
diff changeset
   856
        _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.String" );
hgs
parents:
diff changeset
   857
        iNotifyMessage = ( aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTNotify );
hgs
parents:
diff changeset
   858
        _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage );
hgs
parents:
diff changeset
   859
        _DDPRINT( 4, "PhSrv.UssdNOHREventL.iNotifyMessage: ", iNotifyMessage );
hgs
parents:
diff changeset
   860
        iMsgTypeReply = ( aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTReply );
hgs
parents:
diff changeset
   861
        _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iMsgTypeReply: ", iMsgTypeReply );
hgs
parents:
diff changeset
   862
        
hgs
parents:
diff changeset
   863
        if ( iNotifyMessage ) 
hgs
parents:
diff changeset
   864
            {
hgs
parents:
diff changeset
   865
            // need to send an MO ack
hgs
parents:
diff changeset
   866
            iAcksToBeSent ++;
hgs
parents:
diff changeset
   867
            }
hgs
parents:
diff changeset
   868
        
hgs
parents:
diff changeset
   869
        if ( !iDeviceDialog  ){
hgs
parents:
diff changeset
   870
            iDeviceDialog = CHbDeviceMessageBoxSymbian::NewL(
hgs
parents:
diff changeset
   871
                CHbDeviceMessageBoxSymbian::EInformation );
hgs
parents:
diff changeset
   872
            iDeviceDialog->SetObserver( this );
hgs
parents:
diff changeset
   873
            iDeviceDialog->SetTimeout( KPhSrvUssdTimeout );
hgs
parents:
diff changeset
   874
            iDeviceDialog->SetDismissPolicy ( KPhSrvUssdPopupDismissPolicy );
36
hgs
parents: 33
diff changeset
   875
            iDeviceDialog->SetIconVisible(EFalse);
33
hgs
parents:
diff changeset
   876
            
hgs
parents:
diff changeset
   877
            // Show left key with empty string accoring to ui concept
hgs
parents:
diff changeset
   878
            iDeviceDialog->SetButton( 
hgs
parents:
diff changeset
   879
                CHbDeviceMessageBoxSymbian::EAcceptButton, EFalse );
hgs
parents:
diff changeset
   880
            // Show Exit Key always
hgs
parents:
diff changeset
   881
            iDeviceDialog->SetButton( 
hgs
parents:
diff changeset
   882
                CHbDeviceMessageBoxSymbian::ERejectButton, ETrue );
hgs
parents:
diff changeset
   883
            iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
   884
                CHbDeviceMessageBoxSymbian::ERejectButton, 
hgs
parents:
diff changeset
   885
                LoadDefaultString( KUssdExit ) );
hgs
parents:
diff changeset
   886
            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Exit" );             
48
hgs
parents: 36
diff changeset
   887
            iDialogType = EOnlyExit;
33
hgs
parents:
diff changeset
   888
        }
hgs
parents:
diff changeset
   889
      
hgs
parents:
diff changeset
   890
        if ( iNotifyMessage || iMsgTypeReply )
hgs
parents:
diff changeset
   891
            {
hgs
parents:
diff changeset
   892
            //This is for reply message in notifyarray
hgs
parents:
diff changeset
   893
            iNotifyMessage = ETrue;
hgs
parents:
diff changeset
   894
            _DDPRINT( 4, "PhSrv.UssdHandleReceivedEventL.iNotifyMessage: ", iNotifyMessage );
hgs
parents:
diff changeset
   895
hgs
parents:
diff changeset
   896
            //Notify added to array
hgs
parents:
diff changeset
   897
            iNotifyArray->AppendL( iReceivedMessage );
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.AppendL" );
hgs
parents:
diff changeset
   900
            UpdateNotifyMessageL();
hgs
parents:
diff changeset
   901
hgs
parents:
diff changeset
   902
            if ( !iSendRelease && NotifyCount() <= 1 )
hgs
parents:
diff changeset
   903
                {
hgs
parents:
diff changeset
   904
                _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.!SendRelease.Cancel" );
hgs
parents:
diff changeset
   905
                Cancel();
hgs
parents:
diff changeset
   906
                }
hgs
parents:
diff changeset
   907
            }
hgs
parents:
diff changeset
   908
        else
hgs
parents:
diff changeset
   909
            {
hgs
parents:
diff changeset
   910
            // New message deletes old message, i.e. Cancel existing query.
hgs
parents:
diff changeset
   911
            Cancel();
hgs
parents:
diff changeset
   912
            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.NewAnswerable" );
hgs
parents:
diff changeset
   913
            }
hgs
parents:
diff changeset
   914
hgs
parents:
diff changeset
   915
        // Remove Reply key
hgs
parents:
diff changeset
   916
        if( !( aMsgAttributes.iFlags & RMobileUssdMessaging::KUssdMessageType )
hgs
parents:
diff changeset
   917
             || aMsgAttributes.iType != RMobileUssdMessaging::EUssdMTRequest )
hgs
parents:
diff changeset
   918
            {
hgs
parents:
diff changeset
   919
            // Remove Answer key
hgs
parents:
diff changeset
   920
            iDeviceDialog->SetButton( 
hgs
parents:
diff changeset
   921
                CHbDeviceMessageBoxSymbian::EAcceptButton, EFalse );
hgs
parents:
diff changeset
   922
            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.NoAnswer" ); 
48
hgs
parents: 36
diff changeset
   923
            iDialogType = EOnlyExit;
33
hgs
parents:
diff changeset
   924
            }
hgs
parents:
diff changeset
   925
        // Show Reply key
hgs
parents:
diff changeset
   926
        else
hgs
parents:
diff changeset
   927
            {
hgs
parents:
diff changeset
   928
            iDeviceDialog->SetButton( 
hgs
parents:
diff changeset
   929
                CHbDeviceMessageBoxSymbian::EAcceptButton, ETrue );              
hgs
parents:
diff changeset
   930
            iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
   931
                CHbDeviceMessageBoxSymbian::EAcceptButton, 
hgs
parents:
diff changeset
   932
                LoadDefaultString( KUssdReply ) ); 
48
hgs
parents: 36
diff changeset
   933
            iDeviceDialog->SetButton( 
hgs
parents: 36
diff changeset
   934
                CHbDeviceMessageBoxSymbian::ERejectButton, ETrue );              
hgs
parents: 36
diff changeset
   935
            iDeviceDialog->SetButtonTextL(
hgs
parents: 36
diff changeset
   936
                CHbDeviceMessageBoxSymbian::ERejectButton, 
hgs
parents: 36
diff changeset
   937
                LoadDefaultString( KUssdExit ) );
33
hgs
parents:
diff changeset
   938
            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.WithAnswer" ); 
48
hgs
parents: 36
diff changeset
   939
            iDialogType = EReplyExit;
33
hgs
parents:
diff changeset
   940
            }
hgs
parents:
diff changeset
   941
hgs
parents:
diff changeset
   942
 
hgs
parents:
diff changeset
   943
        _DPRINT( 4,
hgs
parents:
diff changeset
   944
            "PhSrv.UssdHandleReceivedEventL.String.Middle" );
hgs
parents:
diff changeset
   945
hgs
parents:
diff changeset
   946
        // Play the USSD tone if needed. Logically should be in RunL, but here
hgs
parents:
diff changeset
   947
        // to give better balancing with voice and visible message.
hgs
parents:
diff changeset
   948
        // <-- QT PHONE START-->
hgs
parents:
diff changeset
   949
        /*
hgs
parents:
diff changeset
   950
        if ( IsTelephonyFeatureSupported( KTelephonyLVFlagUssdTone ) )
hgs
parents:
diff changeset
   951
            {
hgs
parents:
diff changeset
   952
            _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.PlayTone" );
hgs
parents:
diff changeset
   953
            PlayUssdTone();
hgs
parents:
diff changeset
   954
            }
hgs
parents:
diff changeset
   955
        */
hgs
parents:
diff changeset
   956
            // <-- QT PHONE END-->
hgs
parents:
diff changeset
   957
        // Launch the new message query
hgs
parents:
diff changeset
   958
        if ( !IsActive() )
hgs
parents:
diff changeset
   959
            {
hgs
parents:
diff changeset
   960
            iLaunchGMQ = ETrue;
hgs
parents:
diff changeset
   961
            iTimer.After( iStatus , KPhSrvUssdMessageQueryInterval );
hgs
parents:
diff changeset
   962
            SetActive();
hgs
parents:
diff changeset
   963
            }
hgs
parents:
diff changeset
   964
        AsyncProcessMoAcks();
hgs
parents:
diff changeset
   965
        }
hgs
parents:
diff changeset
   966
    _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.Editor" );
hgs
parents:
diff changeset
   967
    if( aMsgAttributes.iType == RMobileUssdMessaging::EUssdMTRequest && UssdAppTaskExistsL() )
hgs
parents:
diff changeset
   968
        {
hgs
parents:
diff changeset
   969
        iEmptyEditor = ETrue;
hgs
parents:
diff changeset
   970
        }
hgs
parents:
diff changeset
   971
    _DPRINT( 4, "PhSrv.UssdHandleReceivedEventL.End" );
hgs
parents:
diff changeset
   972
    }
hgs
parents:
diff changeset
   973
hgs
parents:
diff changeset
   974
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   975
// CPhSrvUssdManager::RestartReplyTimerL
hgs
parents:
diff changeset
   976
//
hgs
parents:
diff changeset
   977
//
hgs
parents:
diff changeset
   978
//
hgs
parents:
diff changeset
   979
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   980
//
hgs
parents:
diff changeset
   981
void CPhSrvUssdManager::RestartReplyTimerL()
hgs
parents:
diff changeset
   982
    {
hgs
parents:
diff changeset
   983
    if ( iUssdReplyTimer )
hgs
parents:
diff changeset
   984
        {
hgs
parents:
diff changeset
   985
        _DPRINT( 4, "PhSrv.RestartReplyTimerL.Stop" );
hgs
parents:
diff changeset
   986
        iUssdReplyTimer->Stop();
hgs
parents:
diff changeset
   987
        }
hgs
parents:
diff changeset
   988
hgs
parents:
diff changeset
   989
    if ( !iUssdReplyTimer )
hgs
parents:
diff changeset
   990
        {
hgs
parents:
diff changeset
   991
        _DPRINT( 4, "PhSrv.RestartReplyTimerL.New" );
hgs
parents:
diff changeset
   992
        iUssdReplyTimer = CPhSrvUssdReplyTimer::NewL( *this );
hgs
parents:
diff changeset
   993
        }
hgs
parents:
diff changeset
   994
    
hgs
parents:
diff changeset
   995
    _DPRINT( 4, "PhSrv.RestartReplyTimerL.Start" );
hgs
parents:
diff changeset
   996
    iUssdReplyTimer->Start();
hgs
parents:
diff changeset
   997
    }
hgs
parents:
diff changeset
   998
hgs
parents:
diff changeset
   999
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1000
// CPhSrvUssdManager::UssdNetworkObserverHandleNotifyNWReleaseL
hgs
parents:
diff changeset
  1001
//
hgs
parents:
diff changeset
  1002
//
hgs
parents:
diff changeset
  1003
//
hgs
parents:
diff changeset
  1004
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1005
//
hgs
parents:
diff changeset
  1006
void CPhSrvUssdManager::UssdNetworkObserverHandleNotifyNWReleaseL(
hgs
parents:
diff changeset
  1007
const RMobilePhone::TMobilePhoneSendSSRequestV3 & aReturnResult,
hgs
parents:
diff changeset
  1008
TInt aError )
hgs
parents:
diff changeset
  1009
    {
hgs
parents:
diff changeset
  1010
    _DDPRINT( 4, "PhSrv.UssdNotifyNWRelease ##### ", aError ); // debug print
hgs
parents:
diff changeset
  1011
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
  1012
    TBool showNotes = ShowNotesL();
hgs
parents:
diff changeset
  1013
    iNetworkReleased = ETrue;
hgs
parents:
diff changeset
  1014
    iSendingAck = EFalse;
hgs
parents:
diff changeset
  1015
    iSendRelease = EFalse;
hgs
parents:
diff changeset
  1016
    iAcksToBeSent = 0;
hgs
parents:
diff changeset
  1017
    
hgs
parents:
diff changeset
  1018
    if ( iHavePendingSatMessagePointer )
hgs
parents:
diff changeset
  1019
        {
hgs
parents:
diff changeset
  1020
        iReturnResult = aReturnResult;
hgs
parents:
diff changeset
  1021
        if ( !iSatCanceled )
hgs
parents:
diff changeset
  1022
            {
hgs
parents:
diff changeset
  1023
            CompleteSatL(&iReceivedMessage, aError );
hgs
parents:
diff changeset
  1024
            _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleNotifyNWReleaseL.CompleteSat" );
hgs
parents:
diff changeset
  1025
            }
hgs
parents:
diff changeset
  1026
        }
hgs
parents:
diff changeset
  1027
    if ( iUssdReplyTimer && iUssdReplyTimer->IsTimerActive() )
hgs
parents:
diff changeset
  1028
        {
hgs
parents:
diff changeset
  1029
        _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleNotifyNWReleaseL.Timer.Stop" );
hgs
parents:
diff changeset
  1030
        iUssdReplyTimer->Stop();
hgs
parents:
diff changeset
  1031
        Cancel();
hgs
parents:
diff changeset
  1032
        CheckArray();
hgs
parents:
diff changeset
  1033
        }
hgs
parents:
diff changeset
  1034
    if ( showNotes && iShowDone )
hgs
parents:
diff changeset
  1035
        {
hgs
parents:
diff changeset
  1036
        ShowDoneNoteL();
hgs
parents:
diff changeset
  1037
        }
hgs
parents:
diff changeset
  1038
    if ( iUssdSendHandler && iSendingAck ) 
hgs
parents:
diff changeset
  1039
        {
hgs
parents:
diff changeset
  1040
        // if we are sending ack, it can be canceled.
hgs
parents:
diff changeset
  1041
        iUssdSendHandler->Cancel();
hgs
parents:
diff changeset
  1042
        }
hgs
parents:
diff changeset
  1043
    
hgs
parents:
diff changeset
  1044
    iSatCanceled = EFalse;
hgs
parents:
diff changeset
  1045
    _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleNotifyNWReleaseL.iSatCanceled.EFalse" );
hgs
parents:
diff changeset
  1046
    iShowDone = EFalse;
hgs
parents:
diff changeset
  1047
    _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleNotifyNWReleaseL.Ending" );
hgs
parents:
diff changeset
  1048
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
  1049
    _DPRINT( 4, "PhSrv.UssdNetworkObserverHandleNotifyNWReleaseL.End" );
hgs
parents:
diff changeset
  1050
    }
hgs
parents:
diff changeset
  1051
hgs
parents:
diff changeset
  1052
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1053
// CPhSrvUssdManager::ShowDoneNoteL
hgs
parents:
diff changeset
  1054
//
hgs
parents:
diff changeset
  1055
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1056
//
hgs
parents:
diff changeset
  1057
void CPhSrvUssdManager::ShowDoneNoteL()
hgs
parents:
diff changeset
  1058
    {
hgs
parents:
diff changeset
  1059
    _DDPRINT( 4, "PhSrv.ShowDoneNoteL.iShowDone", iShowDone );
hgs
parents:
diff changeset
  1060
    // Show global confirmation note "Done"
hgs
parents:
diff changeset
  1061
    CHbDeviceMessageBoxSymbian::InformationL(
hgs
parents:
diff changeset
  1062
        LoadDefaultString( KUssdDone ) );
hgs
parents:
diff changeset
  1063
    iShowDone = EFalse;
hgs
parents:
diff changeset
  1064
    }
hgs
parents:
diff changeset
  1065
hgs
parents:
diff changeset
  1066
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1067
// CPhSrvUssdManager::ShowErrorNoteL
hgs
parents:
diff changeset
  1068
//
hgs
parents:
diff changeset
  1069
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1070
//
hgs
parents:
diff changeset
  1071
void CPhSrvUssdManager::ShowErrorNoteL( TInt aError )
hgs
parents:
diff changeset
  1072
    {
hgs
parents:
diff changeset
  1073
    _DDPRINT( 4, "PhSrv.ShowErrorNoteL.Start ", aError );
hgs
parents:
diff changeset
  1074
    if ( aError == KErrCancel )
hgs
parents:
diff changeset
  1075
        {
hgs
parents:
diff changeset
  1076
        _DPRINT( 4, "PhSrv.ShowErrorNoteL.Return" );
hgs
parents:
diff changeset
  1077
        return;
hgs
parents:
diff changeset
  1078
        }
hgs
parents:
diff changeset
  1079
hgs
parents:
diff changeset
  1080
    // Show specific error message
hgs
parents:
diff changeset
  1081
    CTextResolver* textResolver = CTextResolver::NewLC();
hgs
parents:
diff changeset
  1082
    HBufC* buffer = textResolver->ResolveErrorString( aError ).AllocLC();
hgs
parents:
diff changeset
  1083
hgs
parents:
diff changeset
  1084
    CHbDeviceMessageBoxSymbian::InformationL( buffer ->Des() );
hgs
parents:
diff changeset
  1085
hgs
parents:
diff changeset
  1086
    CleanupStack::PopAndDestroy( buffer ); 
hgs
parents:
diff changeset
  1087
    CleanupStack::PopAndDestroy( textResolver ); 
hgs
parents:
diff changeset
  1088
    
hgs
parents:
diff changeset
  1089
    
hgs
parents:
diff changeset
  1090
    _DPRINT( 4, "PhSrv.ShowErrorNoteL.End" );
hgs
parents:
diff changeset
  1091
    return;
hgs
parents:
diff changeset
  1092
    }
hgs
parents:
diff changeset
  1093
hgs
parents:
diff changeset
  1094
hgs
parents:
diff changeset
  1095
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1096
// CPhSrvUssdManager::DecodeL
hgs
parents:
diff changeset
  1097
//
hgs
parents:
diff changeset
  1098
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1099
//
hgs
parents:
diff changeset
  1100
void CPhSrvUssdManager::DecodeL(
hgs
parents:
diff changeset
  1101
    const TDesC8& aSrc,
hgs
parents:
diff changeset
  1102
    TDes& aDes ,
hgs
parents:
diff changeset
  1103
    TUint8 aDcs )
hgs
parents:
diff changeset
  1104
    {
hgs
parents:
diff changeset
  1105
    _DPRINT( 4, "PhSrv.DecodeL.Start" );
hgs
parents:
diff changeset
  1106
    aDes.Zero();
hgs
parents:
diff changeset
  1107
    CCnvCharacterSetConverter* charConv = CCnvCharacterSetConverter::NewLC();
hgs
parents:
diff changeset
  1108
hgs
parents:
diff changeset
  1109
    iDCS = KPhCltDcsUnknown; // default
hgs
parents:
diff changeset
  1110
hgs
parents:
diff changeset
  1111
    // Check DCS
hgs
parents:
diff changeset
  1112
    TSmsDataCodingScheme::TSmsAlphabet alphabet =
hgs
parents:
diff changeset
  1113
        TSmsDataCodingScheme::ESmsAlphabet7Bit; // default
hgs
parents:
diff changeset
  1114
    TUint cutChars = 0;
hgs
parents:
diff changeset
  1115
    TUint startBit = 0;
hgs
parents:
diff changeset
  1116
hgs
parents:
diff changeset
  1117
    // Codes from GSM 03.38
hgs
parents:
diff changeset
  1118
    if ( aDcs == KPhSrvUssdDcsAlphabetDefaultPrecededLanguage )
hgs
parents:
diff changeset
  1119
        {
hgs
parents:
diff changeset
  1120
        FindFirstCarriageReturnL( aSrc , cutChars , startBit );
hgs
parents:
diff changeset
  1121
        }
hgs
parents:
diff changeset
  1122
    else if ( aDcs == KPhSrvUssdDcsAlphabetUCS2PrecededLanguage )
hgs
parents:
diff changeset
  1123
        {
hgs
parents:
diff changeset
  1124
        alphabet = TSmsDataCodingScheme::ESmsAlphabetUCS2;
hgs
parents:
diff changeset
  1125
        cutChars = KPhSrvUssdDcsAlphabetUCS2PrecededLanguageSkipChars;
hgs
parents:
diff changeset
  1126
        }
hgs
parents:
diff changeset
  1127
    else if ( (aDcs&KPhSrvUssdDcsGeneralInformationMask)  ==
hgs
parents:
diff changeset
  1128
            KPhSrvUssdDcsGeneralInformation ) // General data coding information
hgs
parents:
diff changeset
  1129
        {
hgs
parents:
diff changeset
  1130
        //Is text compressed?
hgs
parents:
diff changeset
  1131
        if ( aDcs & KPhSrvUssdDcsGeneralInformationCompressed )
hgs
parents:
diff changeset
  1132
            {
hgs
parents:
diff changeset
  1133
            _DPRINT( 4, "PhSrv.DecodeL.KErrNotSupported" );
hgs
parents:
diff changeset
  1134
            User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
  1135
            }
hgs
parents:
diff changeset
  1136
        // Is SIM specific message
hgs
parents:
diff changeset
  1137
        else if ( ( aDcs & KPhSrvUssdDcsGeneralInformationSimMask )
hgs
parents:
diff changeset
  1138
                   == KPhSrvUssdDcsGeneralInformationSim )
hgs
parents:
diff changeset
  1139
            {
hgs
parents:
diff changeset
  1140
            _DPRINT( 4, "PhSrv.DecodeL.KErrAbort" );
hgs
parents:
diff changeset
  1141
            User::Leave( KErrAbort ); // Do not show any messages
hgs
parents:
diff changeset
  1142
            }
hgs
parents:
diff changeset
  1143
        // 8 bit data?
hgs
parents:
diff changeset
  1144
        else if ( ( aDcs&KPhSrvUssdDcsGeneralInformationAlphabetMask ) ==
hgs
parents:
diff changeset
  1145
                   KPhSrvUssdDcsGeneralInformationAlphabet8Bit )
hgs
parents:
diff changeset
  1146
            {
hgs
parents:
diff changeset
  1147
            alphabet = TSmsDataCodingScheme::ESmsAlphabet8Bit;
hgs
parents:
diff changeset
  1148
            }
hgs
parents:
diff changeset
  1149
        // UCS2 bit data?
hgs
parents:
diff changeset
  1150
        else if ( ( aDcs&KPhSrvUssdDcsGeneralInformationAlphabetMask ) ==
hgs
parents:
diff changeset
  1151
                   KPhSrvUssdDcsGeneralInformationAlphabetUCS2 )
hgs
parents:
diff changeset
  1152
            {
hgs
parents:
diff changeset
  1153
            alphabet = TSmsDataCodingScheme::ESmsAlphabetUCS2;
hgs
parents:
diff changeset
  1154
            }
hgs
parents:
diff changeset
  1155
        }
hgs
parents:
diff changeset
  1156
    // Data coding/message handling
hgs
parents:
diff changeset
  1157
    else if ( ( aDcs & KPhSrvUssdDcsMessageHandlingAlphabetMask )
hgs
parents:
diff changeset
  1158
               == KPhSrvUssdDcsMessageHandlingAlphabet8Bit )
hgs
parents:
diff changeset
  1159
        {
hgs
parents:
diff changeset
  1160
        alphabet = TSmsDataCodingScheme::ESmsAlphabet8Bit;
hgs
parents:
diff changeset
  1161
        }
hgs
parents:
diff changeset
  1162
hgs
parents:
diff changeset
  1163
    TPhSrvUssdAlphabetPacker* packer =
hgs
parents:
diff changeset
  1164
        new ( ELeave ) TPhSrvUssdAlphabetPacker( alphabet , EFalse, startBit );
hgs
parents:
diff changeset
  1165
    CleanupStack::PushL( packer );
hgs
parents:
diff changeset
  1166
hgs
parents:
diff changeset
  1167
    if ( alphabet == TSmsDataCodingScheme::ESmsAlphabet7Bit )
hgs
parents:
diff changeset
  1168
        {
hgs
parents:
diff changeset
  1169
        TInt numberOfElem = ( ( aSrc.Length() - cutChars ) * 8 - startBit ) / 7;
hgs
parents:
diff changeset
  1170
        packer->UnpackAndConvertL(
hgs
parents:
diff changeset
  1171
            *charConv ,
hgs
parents:
diff changeset
  1172
            iFsSession ,
hgs
parents:
diff changeset
  1173
            aSrc.Right( aSrc.Length() - cutChars ),
hgs
parents:
diff changeset
  1174
            aDes ,
hgs
parents:
diff changeset
  1175
            numberOfElem );
hgs
parents:
diff changeset
  1176
hgs
parents:
diff changeset
  1177
        // DCS was 7-bit data.
hgs
parents:
diff changeset
  1178
        iDCS = KPhCltDcs7Bit;
hgs
parents:
diff changeset
  1179
        }
hgs
parents:
diff changeset
  1180
    else // ESmsAlphabet8Bit || ESmsAlphabetUCS2
hgs
parents:
diff changeset
  1181
        {
hgs
parents:
diff changeset
  1182
        CSmsAlphabetConverter* converter =
hgs
parents:
diff changeset
  1183
            CSmsAlphabetConverter::NewLC(
hgs
parents:
diff changeset
  1184
                *charConv , iFsSession,alphabet,EFalse );
hgs
parents:
diff changeset
  1185
hgs
parents:
diff changeset
  1186
        aDes = converter->ConvertToNativeL(
hgs
parents:
diff changeset
  1187
            aSrc.Right( aSrc.Length() - cutChars ) );
hgs
parents:
diff changeset
  1188
        CleanupStack::PopAndDestroy( converter );
hgs
parents:
diff changeset
  1189
hgs
parents:
diff changeset
  1190
        if( alphabet == TSmsDataCodingScheme::ESmsAlphabet8Bit )
hgs
parents:
diff changeset
  1191
            {
hgs
parents:
diff changeset
  1192
            // DCS was 8-bit data.
hgs
parents:
diff changeset
  1193
            iDCS = KPhCltDcs8Bit;
hgs
parents:
diff changeset
  1194
            }
hgs
parents:
diff changeset
  1195
        else if( alphabet == TSmsDataCodingScheme::ESmsAlphabetUCS2 )
hgs
parents:
diff changeset
  1196
            {
hgs
parents:
diff changeset
  1197
            // DCS was UCS2 data.
hgs
parents:
diff changeset
  1198
            iDCS = KPhCltDcsUcs2;
hgs
parents:
diff changeset
  1199
            }
hgs
parents:
diff changeset
  1200
        // If DCS not 8-bit or UCS2, then EPhCltDcsUnknown is returned.
hgs
parents:
diff changeset
  1201
        }
hgs
parents:
diff changeset
  1202
hgs
parents:
diff changeset
  1203
    //
hgs
parents:
diff changeset
  1204
    CleanupStack::PopAndDestroy(2); // packer, charConv
hgs
parents:
diff changeset
  1205
    _DPRINT( 4, "PhSrv.DecodeL.End" );
hgs
parents:
diff changeset
  1206
    }
hgs
parents:
diff changeset
  1207
hgs
parents:
diff changeset
  1208
hgs
parents:
diff changeset
  1209
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1210
// CPhSrvUssdManager::FindFirstCarriageReturnL
hgs
parents:
diff changeset
  1211
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1212
//
hgs
parents:
diff changeset
  1213
void CPhSrvUssdManager::FindFirstCarriageReturnL(
hgs
parents:
diff changeset
  1214
    const TDesC8& aBuffer ,
hgs
parents:
diff changeset
  1215
    TUint& aSkipChars ,
hgs
parents:
diff changeset
  1216
    TUint& aStartBit )
hgs
parents:
diff changeset
  1217
    {
hgs
parents:
diff changeset
  1218
    _DPRINT( 4, "PhSrv.FindFirstCarriageReturnL.Start" );
hgs
parents:
diff changeset
  1219
    if ( aBuffer.Length() < 3 )
hgs
parents:
diff changeset
  1220
        {
hgs
parents:
diff changeset
  1221
        _DPRINT( 4, "PhSrv.FindFirstCarriageReturnL.KErrUnderflow" );
hgs
parents:
diff changeset
  1222
        User::Leave( KErrUnderflow );
hgs
parents:
diff changeset
  1223
        }
hgs
parents:
diff changeset
  1224
hgs
parents:
diff changeset
  1225
    aSkipChars = 0;
hgs
parents:
diff changeset
  1226
    aStartBit = 0;
hgs
parents:
diff changeset
  1227
hgs
parents:
diff changeset
  1228
    // Try out two different cases:
hgs
parents:
diff changeset
  1229
    // 1. Find CR from thrid byte
hgs
parents:
diff changeset
  1230
    // 2. Find CR from second byte, starting from bit 6
hgs
parents:
diff changeset
  1231
hgs
parents:
diff changeset
  1232
    // 1.:
hgs
parents:
diff changeset
  1233
    if ( aBuffer[2] == KPhSrvUssdCarriageReturn )
hgs
parents:
diff changeset
  1234
        {
hgs
parents:
diff changeset
  1235
        aSkipChars = KPhSrvUssdDcsAlphabetDefaultPrecededLanguageSkipChars3;
hgs
parents:
diff changeset
  1236
        aStartBit = 0;
hgs
parents:
diff changeset
  1237
        _DPRINT( 4, "PhSrv.FindFirstCarriageReturnL.ThirdByte.Return" );
hgs
parents:
diff changeset
  1238
        return;
hgs
parents:
diff changeset
  1239
        }
hgs
parents:
diff changeset
  1240
hgs
parents:
diff changeset
  1241
    // 2.:
hgs
parents:
diff changeset
  1242
    // First put the pieces together and then compare
hgs
parents:
diff changeset
  1243
    // Take last 2 bits from the second byte:
hgs
parents:
diff changeset
  1244
    TUint result1 = aBuffer[1];
hgs
parents:
diff changeset
  1245
    result1 = result1 >> 6;
hgs
parents:
diff changeset
  1246
hgs
parents:
diff changeset
  1247
    // Take first 5 bits from the third byte:
hgs
parents:
diff changeset
  1248
    TUint result2 = aBuffer[2];
hgs
parents:
diff changeset
  1249
    result2 = result2 & 0x1f; // bits 0-4.
hgs
parents:
diff changeset
  1250
    result2 = result2 << 2; // move to bits 2-6.
hgs
parents:
diff changeset
  1251
hgs
parents:
diff changeset
  1252
    TUint result = result1 + result2; // 0000 00xx + 0xxx xx00
hgs
parents:
diff changeset
  1253
    if ( result == KPhSrvUssdCarriageReturn )
hgs
parents:
diff changeset
  1254
        {
hgs
parents:
diff changeset
  1255
        aSkipChars = KPhSrvUssdDcsAlphabetDefaultPrecededLanguageSkipChars2;
hgs
parents:
diff changeset
  1256
        aStartBit = KPhSrvUssdDcsAlphabetDefaultPrecededLanguageStartBit;
hgs
parents:
diff changeset
  1257
        _DPRINT( 4, "PhSrv.FindFirstCarriageReturnL.SecondByte.Return" );
hgs
parents:
diff changeset
  1258
        return;
hgs
parents:
diff changeset
  1259
        }
hgs
parents:
diff changeset
  1260
hgs
parents:
diff changeset
  1261
    // Is was not case 1. or 2. so we are not supporting sort of string.
hgs
parents:
diff changeset
  1262
    User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
  1263
    _DPRINT( 4, "PhSrv.FindFirstCarriageReturnL.KErrNotSupported" );
hgs
parents:
diff changeset
  1264
    }
hgs
parents:
diff changeset
  1265
hgs
parents:
diff changeset
  1266
hgs
parents:
diff changeset
  1267
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1268
// CPhSrvUssdManager::UssdReplyTimerObserverHandleExpired
hgs
parents:
diff changeset
  1269
//
hgs
parents:
diff changeset
  1270
//
hgs
parents:
diff changeset
  1271
//
hgs
parents:
diff changeset
  1272
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1273
//
hgs
parents:
diff changeset
  1274
void CPhSrvUssdManager::UssdReplyTimerObserverHandleExpiredL( TInt aError )
hgs
parents:
diff changeset
  1275
    {
hgs
parents:
diff changeset
  1276
    _DDPRINT( 4, "PhSrv.ReplyTimer.Start.aError ", aError );     // debug print
hgs
parents:
diff changeset
  1277
    delete iUssdReplyTimer;
hgs
parents:
diff changeset
  1278
    iUssdReplyTimer = NULL;
hgs
parents:
diff changeset
  1279
hgs
parents:
diff changeset
  1280
    if ( aError == KErrNone &&
hgs
parents:
diff changeset
  1281
         IsActive() &&
hgs
parents:
diff changeset
  1282
         iDeviceDialog ) 
hgs
parents:
diff changeset
  1283
        {
hgs
parents:
diff changeset
  1284
        Cancel();
hgs
parents:
diff changeset
  1285
        // Terminates USSD session.
hgs
parents:
diff changeset
  1286
        _DPRINT( 4, "PhSrv.ReplyTimer.SendRelease" );     // debug print
hgs
parents:
diff changeset
  1287
        if ( iNotifyArray ) 
hgs
parents:
diff changeset
  1288
            {
hgs
parents:
diff changeset
  1289
            iNotifyArray->Reset();
hgs
parents:
diff changeset
  1290
            }
hgs
parents:
diff changeset
  1291
        TryCloseSession();
hgs
parents:
diff changeset
  1292
        }
hgs
parents:
diff changeset
  1293
    _DPRINT( 4, "PhSrv.ReplyTimer.End" );     // debug print
hgs
parents:
diff changeset
  1294
    }
hgs
parents:
diff changeset
  1295
hgs
parents:
diff changeset
  1296
hgs
parents:
diff changeset
  1297
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1298
// CPhSrvUssdManager::MessageBoxClosed
hgs
parents:
diff changeset
  1299
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1300
//       
hgs
parents:
diff changeset
  1301
void CPhSrvUssdManager::MessageBoxClosed(
51
hgs
parents: 48
diff changeset
  1302
    const CHbDeviceMessageBoxSymbian* /*aMessageBox*/,
33
hgs
parents:
diff changeset
  1303
    CHbDeviceMessageBoxSymbian::TButtonId aButton)
hgs
parents:
diff changeset
  1304
    {
hgs
parents:
diff changeset
  1305
    _DPRINT( 4, "PhSrv.MsgClose.Start" );
hgs
parents:
diff changeset
  1306
    // ussd device dialog observer callback function
hgs
parents:
diff changeset
  1307
48
hgs
parents: 36
diff changeset
  1308
    _DDPRINT( 4, "PhSrv.MsgClose.iDialogType=", iDialogType );
hgs
parents: 36
diff changeset
  1309
    _DDPRINT( 4, "PhSrv.MsgClose.aBtn=", aButton );
hgs
parents: 36
diff changeset
  1310
    
33
hgs
parents:
diff changeset
  1311
    TInt err = KErrNone;
hgs
parents:
diff changeset
  1312
    // Click Yes on Confirmation note (Yes, No) 
48
hgs
parents: 36
diff changeset
  1313
    if ( EYesNo == iDialogType && 
33
hgs
parents:
diff changeset
  1314
          ( CHbDeviceMessageBoxSymbian::EAcceptButton == aButton ) )
hgs
parents:
diff changeset
  1315
        {
hgs
parents:
diff changeset
  1316
        _DPRINT( 4, "PhSrv.MsgClose.SK.Yes" );
hgs
parents:
diff changeset
  1317
        iClearArray = EFalse;
hgs
parents:
diff changeset
  1318
        iNotifyArray->Reset();
hgs
parents:
diff changeset
  1319
        TryCloseSession();
hgs
parents:
diff changeset
  1320
        }
hgs
parents:
diff changeset
  1321
    // Click "No" on Confirmation note (Yes, No) 
48
hgs
parents: 36
diff changeset
  1322
    else if ( EYesNo == iDialogType && 
33
hgs
parents:
diff changeset
  1323
              ( CHbDeviceMessageBoxSymbian::ERejectButton == aButton ) )
hgs
parents:
diff changeset
  1324
        {
hgs
parents:
diff changeset
  1325
        _DPRINT( 4, "PhSrv.MsgClose.SK.No" );
hgs
parents:
diff changeset
  1326
        iClearArray = EFalse;
hgs
parents:
diff changeset
  1327
        iNotifyMessage = ETrue; // for removing the yes/no query
hgs
parents:
diff changeset
  1328
        CheckArray();
hgs
parents:
diff changeset
  1329
        TryCloseSession();
hgs
parents:
diff changeset
  1330
        }
hgs
parents:
diff changeset
  1331
    // Click "Next" on Notification note (Next, Exit) 
48
hgs
parents: 36
diff changeset
  1332
    else if ( ENextExit == iDialogType && 
33
hgs
parents:
diff changeset
  1333
               ( CHbDeviceMessageBoxSymbian::EAcceptButton == aButton ) )
hgs
parents:
diff changeset
  1334
        {
hgs
parents:
diff changeset
  1335
        _DPRINT( 4, "PhSrv.MsgClose.SK.Next" ); 
hgs
parents:
diff changeset
  1336
        CheckArray();
hgs
parents:
diff changeset
  1337
        TryCloseSession();
hgs
parents:
diff changeset
  1338
        }
hgs
parents:
diff changeset
  1339
    // Click "Exit" on Notification note (Next, Exit or only Exit) 
48
hgs
parents: 36
diff changeset
  1340
    else if ( (EOnlyExit == iDialogType 
hgs
parents: 36
diff changeset
  1341
            || ENextExit == iDialogType 
hgs
parents: 36
diff changeset
  1342
            || EReplyExit == iDialogType ) && 
33
hgs
parents:
diff changeset
  1343
               ( CHbDeviceMessageBoxSymbian::ERejectButton == aButton ) )
hgs
parents:
diff changeset
  1344
        {
hgs
parents:
diff changeset
  1345
        TRAP( err, ClearArrayL() );
hgs
parents:
diff changeset
  1346
        _DDPRINT( 4, "PhSrv.MsgClose.SK.Clear.%d", err );
hgs
parents:
diff changeset
  1347
        TryCloseSession();
hgs
parents:
diff changeset
  1348
        _DPRINT( 4, "PhSrv.MsgClose.SK.Exit" ); 
hgs
parents:
diff changeset
  1349
        }
hgs
parents:
diff changeset
  1350
    // Click "Reply" on Message note (Reply, Exit) 
48
hgs
parents: 36
diff changeset
  1351
    else if ( EReplyExit == iDialogType && 
33
hgs
parents:
diff changeset
  1352
               ( CHbDeviceMessageBoxSymbian::EAcceptButton == aButton ) )
hgs
parents:
diff changeset
  1353
        {
hgs
parents:
diff changeset
  1354
        // Answer
hgs
parents:
diff changeset
  1355
        iStartEditor = ETrue;
hgs
parents:
diff changeset
  1356
        iShowDone = EFalse;
hgs
parents:
diff changeset
  1357
        // Start the USSD editor now.
hgs
parents:
diff changeset
  1358
        TRAP( err, RequestStartEditingL() );
hgs
parents:
diff changeset
  1359
        _DDPRINT( 4, "PhSrv.MsgClose.RequestStartEditingL.%d", err );
hgs
parents:
diff changeset
  1360
        }    
hgs
parents:
diff changeset
  1361
    else 
hgs
parents:
diff changeset
  1362
        {
hgs
parents:
diff changeset
  1363
        _DPRINT( 4, "PhSrv.MsgClose.SK.Default" ); 
hgs
parents:
diff changeset
  1364
        }
hgs
parents:
diff changeset
  1365
  
hgs
parents:
diff changeset
  1366
    _DPRINT( 4, "PhSrv.MsgClose.End" ); 
hgs
parents:
diff changeset
  1367
    }
hgs
parents:
diff changeset
  1368
hgs
parents:
diff changeset
  1369
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1370
// CPhSrvUssdManager::RunL
hgs
parents:
diff changeset
  1371
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1372
//
hgs
parents:
diff changeset
  1373
void CPhSrvUssdManager::RunL()
hgs
parents:
diff changeset
  1374
    {
hgs
parents:
diff changeset
  1375
    _DPRINT( 4, "PhSrv.RunL.Start" );    
hgs
parents:
diff changeset
  1376
hgs
parents:
diff changeset
  1377
    ProcessMoAcksL();
hgs
parents:
diff changeset
  1378
    
hgs
parents:
diff changeset
  1379
    if ( iLaunchGMQ )
hgs
parents:
diff changeset
  1380
        {
hgs
parents:
diff changeset
  1381
        LaunchGlobalMessageQueryL();
hgs
parents:
diff changeset
  1382
        // Do not launch Global Message Query next time.
hgs
parents:
diff changeset
  1383
        iLaunchGMQ = EFalse;
hgs
parents:
diff changeset
  1384
        _DPRINT( 4, "PhSrv.iLaunchGMQ.EFalse" );
hgs
parents:
diff changeset
  1385
        }
hgs
parents:
diff changeset
  1386
    else
hgs
parents:
diff changeset
  1387
        {
hgs
parents:
diff changeset
  1388
        iStartEditor = EFalse;
hgs
parents:
diff changeset
  1389
        // update device dialog
hgs
parents:
diff changeset
  1390
        _DPRINT( 4, "PhSrv.RunL.End" );     // debug print
hgs
parents:
diff changeset
  1391
        }
hgs
parents:
diff changeset
  1392
    }
hgs
parents:
diff changeset
  1393
hgs
parents:
diff changeset
  1394
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1395
// CPhSrvUssdManager::LaunchGlobalMessageQueryL
hgs
parents:
diff changeset
  1396
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1397
//
hgs
parents:
diff changeset
  1398
void CPhSrvUssdManager::LaunchGlobalMessageQueryL()
hgs
parents:
diff changeset
  1399
    {
hgs
parents:
diff changeset
  1400
    _DPRINT( 4, "PhSrv.LGMQ.start" );
hgs
parents:
diff changeset
  1401
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
  1402
hgs
parents:
diff changeset
  1403
    if ( iNotifyMessage )
hgs
parents:
diff changeset
  1404
        {
hgs
parents:
diff changeset
  1405
        _DDPRINT( 4, "PhSrv.LGMQ.NotifyMessage", iNotifyMessage );
hgs
parents:
diff changeset
  1406
        iNotifyMessage = ETrue;
hgs
parents:
diff changeset
  1407
        TInt count = NotifyCount();
hgs
parents:
diff changeset
  1408
        //check softkey in avkon.rss 
hgs
parents:
diff changeset
  1409
        if ( count > 1 )
hgs
parents:
diff changeset
  1410
            {
hgs
parents:
diff changeset
  1411
            // Next, Exit
hgs
parents:
diff changeset
  1412
            iDeviceDialog->SetButton(
hgs
parents:
diff changeset
  1413
                CHbDeviceMessageBoxSymbian::EAcceptButton, ETrue );            
hgs
parents:
diff changeset
  1414
            iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
  1415
                CHbDeviceMessageBoxSymbian::EAcceptButton, 
hgs
parents:
diff changeset
  1416
                LoadDefaultString( KUssdNext ) );
hgs
parents:
diff changeset
  1417
            iDeviceDialog->SetButton(
hgs
parents:
diff changeset
  1418
                CHbDeviceMessageBoxSymbian::ERejectButton, ETrue );    
hgs
parents:
diff changeset
  1419
            iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
  1420
                CHbDeviceMessageBoxSymbian::ERejectButton, 
hgs
parents:
diff changeset
  1421
                LoadDefaultString( KUssdExit ) );  
hgs
parents:
diff changeset
  1422
            _DPRINT( 4, "PhSrv.LGMQ.Next&Exit" );
48
hgs
parents: 36
diff changeset
  1423
            iDialogType = ENextExit;
33
hgs
parents:
diff changeset
  1424
            }
hgs
parents:
diff changeset
  1425
        else
hgs
parents:
diff changeset
  1426
            {
hgs
parents:
diff changeset
  1427
            // Only Exit
hgs
parents:
diff changeset
  1428
            iDeviceDialog->SetButton(
hgs
parents:
diff changeset
  1429
                CHbDeviceMessageBoxSymbian::EAcceptButton, EFalse ); 
hgs
parents:
diff changeset
  1430
            iDeviceDialog->SetButton(
hgs
parents:
diff changeset
  1431
                CHbDeviceMessageBoxSymbian::ERejectButton, ETrue );               
hgs
parents:
diff changeset
  1432
            iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
  1433
                CHbDeviceMessageBoxSymbian::ERejectButton, 
hgs
parents:
diff changeset
  1434
                LoadDefaultString( KUssdExit ) );   
hgs
parents:
diff changeset
  1435
            _DPRINT( 4, "PhSrv.LGMQ.onlyExit" );
48
hgs
parents: 36
diff changeset
  1436
            iDialogType = EOnlyExit;
33
hgs
parents:
diff changeset
  1437
            }
hgs
parents:
diff changeset
  1438
        if ( iClearArray )
hgs
parents:
diff changeset
  1439
            {
hgs
parents:
diff changeset
  1440
            HbTextResolverSymbian::Init( KCommonLocFilename, KLocPath );
hgs
parents:
diff changeset
  1441
            _DPRINT( 4, "PhSrv.LGMQ.use common loc file" );
hgs
parents:
diff changeset
  1442
            // Yes, No
48
hgs
parents: 36
diff changeset
  1443
            iDeviceDialog->SetStandardButtons(KHbMsgBoxBtnYes
hgs
parents: 36
diff changeset
  1444
                |KHbMsgBoxBtnNo);
33
hgs
parents:
diff changeset
  1445
            iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
  1446
                CHbDeviceMessageBoxSymbian::EAcceptButton, 
hgs
parents:
diff changeset
  1447
                LoadDefaultString( KUssdYes ) );
hgs
parents:
diff changeset
  1448
            iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
  1449
                CHbDeviceMessageBoxSymbian::ERejectButton, 
hgs
parents:
diff changeset
  1450
                LoadDefaultString( KUssdNo ) );  
hgs
parents:
diff changeset
  1451
            _DPRINT( 4, "PhSrv.LGMQ.Yes&No" );
hgs
parents:
diff changeset
  1452
            HbTextResolverSymbian::Init( KUssdLocFilename, KLocPath );
hgs
parents:
diff changeset
  1453
            _DPRINT( 4, "PhSrv.LGMQ.back up to use ussd loc file" );
48
hgs
parents: 36
diff changeset
  1454
            iDialogType = EYesNo;
33
hgs
parents:
diff changeset
  1455
            }
hgs
parents:
diff changeset
  1456
        iReceivedMessage.Zero();
hgs
parents:
diff changeset
  1457
        iReceivedMessage = (*iNotifyArray)[0];
hgs
parents:
diff changeset
  1458
        }
hgs
parents:
diff changeset
  1459
    TurnLightsOn(); //Ensure lights on
hgs
parents:
diff changeset
  1460
hgs
parents:
diff changeset
  1461
    _DPRINT( 4, "PhSrv.LGMQ.ShMsgQuery" ); // debug print
hgs
parents:
diff changeset
  1462
    // Launch Global MessageQuery as requested.
hgs
parents:
diff changeset
  1463
    // Dialog not support header text, this code is only 
hgs
parents:
diff changeset
  1464
    // for testing, not final solution.
hgs
parents:
diff changeset
  1465
    TInt receiveLength = iReceivedMessage.Length();
hgs
parents:
diff changeset
  1466
    _DDPRINT( 4, "PhSrv.LGMQ.ShMsgQuery.MsgLength", receiveLength ); 
hgs
parents:
diff changeset
  1467
    
hgs
parents:
diff changeset
  1468
    TInt titleLength = LoadDefaultString( KUssdTitle ).Length();
hgs
parents:
diff changeset
  1469
    _DDPRINT( 4, "PhSrv.LGMQ.ShMsgQuery.TilteLength", titleLength );
hgs
parents:
diff changeset
  1470
    
hgs
parents:
diff changeset
  1471
    TInt length = receiveLength + titleLength;
hgs
parents:
diff changeset
  1472
    _DDPRINT( 4, "PhSrv.LGMQ.ShMsgQuery.TotalLength", length );    
hgs
parents:
diff changeset
  1473
        
hgs
parents:
diff changeset
  1474
    HBufC* titleAndText = HBufC::NewLC( length );
hgs
parents:
diff changeset
  1475
    titleAndText->Des().Append( LoadDefaultString( KUssdTitle ) );
hgs
parents:
diff changeset
  1476
    titleAndText->Des().Append( iReceivedMessage );
hgs
parents:
diff changeset
  1477
    iDeviceDialog->SetTextL( titleAndText->Des() );
hgs
parents:
diff changeset
  1478
    CleanupStack::Pop( titleAndText );
hgs
parents:
diff changeset
  1479
    
hgs
parents:
diff changeset
  1480
    iDeviceDialog->Close();
hgs
parents:
diff changeset
  1481
    iDeviceDialog->ShowL();
hgs
parents:
diff changeset
  1482
    iShowDone = EFalse;
hgs
parents:
diff changeset
  1483
   
hgs
parents:
diff changeset
  1484
    // Do nothing else in RunL this time.
hgs
parents:
diff changeset
  1485
    _DPRINT( 4, "PhSrv.LGMQ.ShMsgQuery.ret" ); // debug print
hgs
parents:
diff changeset
  1486
    }
hgs
parents:
diff changeset
  1487
hgs
parents:
diff changeset
  1488
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1489
// CPhSrvUssdManager::ProcessMoAcksL()
hgs
parents:
diff changeset
  1490
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1491
//
hgs
parents:
diff changeset
  1492
void CPhSrvUssdManager::ProcessMoAcksL()
hgs
parents:
diff changeset
  1493
    {
hgs
parents:
diff changeset
  1494
    //Acknowledgment is sent if notify message
hgs
parents:
diff changeset
  1495
    if ( iNotifyMessage && iAcksToBeSent )
hgs
parents:
diff changeset
  1496
        {
hgs
parents:
diff changeset
  1497
        _DPRINT( 4, "PhSrv.LGMQ.SendMoAcknowledgementL, start" );
hgs
parents:
diff changeset
  1498
        _DPRINT_FLAGS();
hgs
parents:
diff changeset
  1499
        if ( iUssdSendHandler && !iUssdSendHandler->IsActive() &&
hgs
parents:
diff changeset
  1500
             !iNetworkReleased && !iSendRelease && !iSendingAck )
hgs
parents:
diff changeset
  1501
            {
hgs
parents:
diff changeset
  1502
            _DPRINT( 4, "PhSrv.LGMQ.MoAckNeededToBeSent" );
hgs
parents:
diff changeset
  1503
            SendMoAcknowledgementL();
hgs
parents:
diff changeset
  1504
            iAcksToBeSent--;
hgs
parents:
diff changeset
  1505
            iSendingAck = ETrue;
hgs
parents:
diff changeset
  1506
            }
hgs
parents:
diff changeset
  1507
        _DPRINT( 4, "PhSrv.LGMQ.SendMoAcknowledgementL, end" );
hgs
parents:
diff changeset
  1508
        }
hgs
parents:
diff changeset
  1509
    }
hgs
parents:
diff changeset
  1510
 
hgs
parents:
diff changeset
  1511
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1512
// CPhSrvUssdManager::AsyncProcessMoAcks()
hgs
parents:
diff changeset
  1513
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1514
//
hgs
parents:
diff changeset
  1515
void CPhSrvUssdManager::AsyncProcessMoAcks()
hgs
parents:
diff changeset
  1516
    {
hgs
parents:
diff changeset
  1517
    if ( iMoAckCallback ) 
hgs
parents:
diff changeset
  1518
        {
hgs
parents:
diff changeset
  1519
        iMoAckCallback->CallBack();
hgs
parents:
diff changeset
  1520
        _DPRINT( 4, "PhSrv.LGMQ.AsyncProcessMoAcksL, queued" );
hgs
parents:
diff changeset
  1521
        }
hgs
parents:
diff changeset
  1522
    }
hgs
parents:
diff changeset
  1523
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1524
// CPhSrvUssdManager::MoAckCallback()
hgs
parents:
diff changeset
  1525
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1526
//
hgs
parents:
diff changeset
  1527
TInt CPhSrvUssdManager::MoAckCallback( TAny *aUssdManager )
hgs
parents:
diff changeset
  1528
    {
hgs
parents:
diff changeset
  1529
    _DPRINT( 4, "PhSrv.MoAckCallback.start" );
hgs
parents:
diff changeset
  1530
    if ( aUssdManager )
hgs
parents:
diff changeset
  1531
        {
hgs
parents:
diff changeset
  1532
        CPhSrvUssdManager* manager = static_cast<CPhSrvUssdManager*>( aUssdManager );
hgs
parents:
diff changeset
  1533
        TRAP_IGNORE( manager->ProcessMoAcksL() );
hgs
parents:
diff changeset
  1534
        }
hgs
parents:
diff changeset
  1535
    _DPRINT( 4, "PhSrv.MoAckCallback.end" );
hgs
parents:
diff changeset
  1536
    return ETrue;
hgs
parents:
diff changeset
  1537
    }
hgs
parents:
diff changeset
  1538
hgs
parents:
diff changeset
  1539
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1540
// CPhSrvUssdManager::TryCloseSession()
hgs
parents:
diff changeset
  1541
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1542
//
hgs
parents:
diff changeset
  1543
void CPhSrvUssdManager::TryCloseSession() 
hgs
parents:
diff changeset
  1544
    {
hgs
parents:
diff changeset
  1545
    // Dismiss, cancel the session.
hgs
parents:
diff changeset
  1546
    _DPRINT( 4, "PhSrv.CheckAndCloseSession.close" );  // debug print
hgs
parents:
diff changeset
  1547
       
hgs
parents:
diff changeset
  1548
    iShowDone = EFalse;
hgs
parents:
diff changeset
  1549
    iEmptyEditor = EFalse;
hgs
parents:
diff changeset
  1550
    
hgs
parents:
diff changeset
  1551
    // If the notification array is empty, close the session.
hgs
parents:
diff changeset
  1552
    if ( NotifyCount() == 0 && !iNetworkReleased )
hgs
parents:
diff changeset
  1553
        {
hgs
parents:
diff changeset
  1554
        CloseSession();
hgs
parents:
diff changeset
  1555
        }
hgs
parents:
diff changeset
  1556
    }
hgs
parents:
diff changeset
  1557
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1558
// CPhSrvUssdManager::CloseSession()
hgs
parents:
diff changeset
  1559
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1560
//
hgs
parents:
diff changeset
  1561
void CPhSrvUssdManager::CloseSession()
hgs
parents:
diff changeset
  1562
    {
hgs
parents:
diff changeset
  1563
    iSendRelease = ETrue;
hgs
parents:
diff changeset
  1564
    iClearArray = EFalse;
hgs
parents:
diff changeset
  1565
    iAcksToBeSent = 0;
hgs
parents:
diff changeset
  1566
    _DPRINT( 4, "PhSrv.CheckAndCloseSession.canceling" ); 
hgs
parents:
diff changeset
  1567
    SendUssdCancel();
hgs
parents:
diff changeset
  1568
    Cancel();
hgs
parents:
diff changeset
  1569
        
hgs
parents:
diff changeset
  1570
    // Terminates USSD session.
hgs
parents:
diff changeset
  1571
    if ( !iNetworkReleased ) 
hgs
parents:
diff changeset
  1572
        {
hgs
parents:
diff changeset
  1573
        iUssdSendHandler->SendReleaseSession();
hgs
parents:
diff changeset
  1574
        }
hgs
parents:
diff changeset
  1575
    if ( iUssdReplyTimer )
hgs
parents:
diff changeset
  1576
        {
hgs
parents:
diff changeset
  1577
        _DPRINT( 4, "PhSrv.CheckAndCloseSession.Timer.Stop" );
hgs
parents:
diff changeset
  1578
        iUssdReplyTimer->Stop();
hgs
parents:
diff changeset
  1579
        }
hgs
parents:
diff changeset
  1580
    }
hgs
parents:
diff changeset
  1581
 
hgs
parents:
diff changeset
  1582
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1583
// CPhSrvUssdManager::CheckArray()
hgs
parents:
diff changeset
  1584
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1585
//
hgs
parents:
diff changeset
  1586
void CPhSrvUssdManager::CheckArray()
hgs
parents:
diff changeset
  1587
    {
hgs
parents:
diff changeset
  1588
    _DPRINT( 4, "PhSrv.CheckArray.Start" );     // debug print
hgs
parents:
diff changeset
  1589
    if (iNotifyArray  && NotifyCount() > 0)
hgs
parents:
diff changeset
  1590
        {
hgs
parents:
diff changeset
  1591
        if  ( !iNotifyMessage && !iClearArray )
hgs
parents:
diff changeset
  1592
            {
hgs
parents:
diff changeset
  1593
            iLaunchGMQ = ETrue;
hgs
parents:
diff changeset
  1594
            iNotifyMessage = ETrue;
hgs
parents:
diff changeset
  1595
            _DPRINT( 4, "PhSrv.CheckArray.iNotifyMessage.ETrue" );
hgs
parents:
diff changeset
  1596
            iTimer.After( iStatus , KPhSrvUssdMessageQueryInterval );
hgs
parents:
diff changeset
  1597
            _DDPRINT( 4, "PhSrv.CheckArray.SetActive.NoNotifyMessage ", iStatus.Int() );
hgs
parents:
diff changeset
  1598
            SetActive();
hgs
parents:
diff changeset
  1599
            }
hgs
parents:
diff changeset
  1600
        else if( NotifyCount() > 1 )
hgs
parents:
diff changeset
  1601
            {
hgs
parents:
diff changeset
  1602
            ( iNotifyArray )->Delete( 0 );
hgs
parents:
diff changeset
  1603
            ( iNotifyArray )->Compress();
hgs
parents:
diff changeset
  1604
            iLaunchGMQ = ETrue;
hgs
parents:
diff changeset
  1605
            iNotifyMessage = ETrue;
hgs
parents:
diff changeset
  1606
            _DPRINT( 4, "PhSrv.CheckArray.iNotifyMessage.ETrue" );
hgs
parents:
diff changeset
  1607
            iTimer.After( iStatus , KPhSrvUssdMessageQueryInterval );
hgs
parents:
diff changeset
  1608
            _DDPRINT( 4, "PhSrv.CheckArray.SetActive.NotifyCount>1 ", iStatus.Int() );
hgs
parents:
diff changeset
  1609
            SetActive();
hgs
parents:
diff changeset
  1610
            }
hgs
parents:
diff changeset
  1611
        else
hgs
parents:
diff changeset
  1612
            {
hgs
parents:
diff changeset
  1613
            iNotifyArray->Reset();
hgs
parents:
diff changeset
  1614
            iNotifyMessage = EFalse;
hgs
parents:
diff changeset
  1615
            _DPRINT( 4, "PhSrv.CheckArray.iNotifyMessage.EFalse" );
hgs
parents:
diff changeset
  1616
            }
hgs
parents:
diff changeset
  1617
        }
hgs
parents:
diff changeset
  1618
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
  1619
    _DPRINT( 4, "PhSrv.CheckArray.End" );     // debug print
hgs
parents:
diff changeset
  1620
    }
hgs
parents:
diff changeset
  1621
hgs
parents:
diff changeset
  1622
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1623
// CPhSrvUssdManager::ClearArray()
hgs
parents:
diff changeset
  1624
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1625
//
hgs
parents:
diff changeset
  1626
  void CPhSrvUssdManager::ClearArrayL()
hgs
parents:
diff changeset
  1627
    {
hgs
parents:
diff changeset
  1628
    _DPRINT( 4, "PhSrv.ClearArrayL.Start" );     // debug print
hgs
parents:
diff changeset
  1629
    if (iNotifyArray && NotifyCount() > 0)
hgs
parents:
diff changeset
  1630
        {
hgs
parents:
diff changeset
  1631
        if (iNotifyMessage && NotifyCount()== 1 )
hgs
parents:
diff changeset
  1632
            {
hgs
parents:
diff changeset
  1633
            iNotifyArray->Reset();
hgs
parents:
diff changeset
  1634
            }
hgs
parents:
diff changeset
  1635
        else
hgs
parents:
diff changeset
  1636
            {
hgs
parents:
diff changeset
  1637
            iReceivedMessage.Zero();
hgs
parents:
diff changeset
  1638
            iReceivedMessage.Append( 
hgs
parents:
diff changeset
  1639
                LoadDefaultString( KUssdConfirm ) );
hgs
parents:
diff changeset
  1640
            iNotifyArray->InsertL( 0, iReceivedMessage );
hgs
parents:
diff changeset
  1641
            iLaunchGMQ = ETrue;
hgs
parents:
diff changeset
  1642
            iNotifyMessage = ETrue;
hgs
parents:
diff changeset
  1643
            _DPRINT( 4, "PhSrv.ClearArrayL.iNotifyMessage.ETrue" );
hgs
parents:
diff changeset
  1644
            iClearArray = ETrue;
hgs
parents:
diff changeset
  1645
            iTimer.After( iStatus , KPhSrvUssdMessageQueryInterval );
hgs
parents:
diff changeset
  1646
            _DDPRINT( 4, "PhSrv.ClearArrayL.iTimer ", iStatus.Int() );
hgs
parents:
diff changeset
  1647
            SetActive();
hgs
parents:
diff changeset
  1648
            }
hgs
parents:
diff changeset
  1649
        }
hgs
parents:
diff changeset
  1650
    _DPRINT_FLAGS();
hgs
parents:
diff changeset
  1651
    _DPRINT( 4, "PhSrv.ClearArrayL.End" );     // debug print
hgs
parents:
diff changeset
  1652
    }
hgs
parents:
diff changeset
  1653
hgs
parents:
diff changeset
  1654
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1655
// CPhSrvUssdManager::NotifyCount()
hgs
parents:
diff changeset
  1656
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1657
//
hgs
parents:
diff changeset
  1658
TInt CPhSrvUssdManager:: NotifyCount()
hgs
parents:
diff changeset
  1659
{
hgs
parents:
diff changeset
  1660
    TInt count = iNotifyArray->Count();
hgs
parents:
diff changeset
  1661
    _DDPRINT( 4, "PhSrv.NotifyCount:", count );     // debug print
hgs
parents:
diff changeset
  1662
    return count;
hgs
parents:
diff changeset
  1663
}
hgs
parents:
diff changeset
  1664
hgs
parents:
diff changeset
  1665
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1666
// CPhSrvUssdManager::UpdateNotifyMessageL()
hgs
parents:
diff changeset
  1667
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1668
//
hgs
parents:
diff changeset
  1669
  void CPhSrvUssdManager:: UpdateNotifyMessageL()
hgs
parents:
diff changeset
  1670
    {
hgs
parents:
diff changeset
  1671
    _DDPRINT( 4, "PhSrv.UpdateNotifyMessageL.Start, clear: ", iClearArray );     // debug print
hgs
parents:
diff changeset
  1672
hgs
parents:
diff changeset
  1673
    // Show left softkey - "Next"
hgs
parents:
diff changeset
  1674
    if (NotifyCount() > 1 && !iClearArray )
hgs
parents:
diff changeset
  1675
        {
hgs
parents:
diff changeset
  1676
        _DPRINT( 4, "PhSrv.UpdateNotifyMessageL" );     // debug print
hgs
parents:
diff changeset
  1677
        iDeviceDialog->SetButton( 
hgs
parents:
diff changeset
  1678
            CHbDeviceMessageBoxSymbian::EAcceptButton, ETrue ); 
hgs
parents:
diff changeset
  1679
        iDeviceDialog->SetButtonTextL(
hgs
parents:
diff changeset
  1680
            CHbDeviceMessageBoxSymbian::EAcceptButton, 
hgs
parents:
diff changeset
  1681
            LoadDefaultString( KUssdNext ) );
48
hgs
parents: 36
diff changeset
  1682
        iDialogType = ENextExit;
33
hgs
parents:
diff changeset
  1683
        }
hgs
parents:
diff changeset
  1684
    // Remove left softkey
hgs
parents:
diff changeset
  1685
    else
hgs
parents:
diff changeset
  1686
        {
hgs
parents:
diff changeset
  1687
        iDeviceDialog->SetButton( 
hgs
parents:
diff changeset
  1688
                    CHbDeviceMessageBoxSymbian::EAcceptButton, EFalse );         
hgs
parents:
diff changeset
  1689
        }
hgs
parents:
diff changeset
  1690
    iDeviceDialog->UpdateL();        
hgs
parents:
diff changeset
  1691
    
hgs
parents:
diff changeset
  1692
    _DPRINT( 4, "PhSrv.UpdateNotifyMessageL.End" );     // debug print
hgs
parents:
diff changeset
  1693
    }
hgs
parents:
diff changeset
  1694
hgs
parents:
diff changeset
  1695
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1696
// CPhSrvUssdManager::DoCancel
hgs
parents:
diff changeset
  1697
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1698
//
hgs
parents:
diff changeset
  1699
void CPhSrvUssdManager::DoCancel()
hgs
parents:
diff changeset
  1700
    {
hgs
parents:
diff changeset
  1701
    _DPRINT( 4, "PhSrv.DoCancel.Start" ); // debug print
hgs
parents:
diff changeset
  1702
    iTimer.Cancel();
hgs
parents:
diff changeset
  1703
    iLaunchGMQ = EFalse;
hgs
parents:
diff changeset
  1704
    if ( iDeviceDialog )
hgs
parents:
diff changeset
  1705
        {
hgs
parents:
diff changeset
  1706
        _DPRINT( 4, "PhSrv.DoCancel" ); // debug print
hgs
parents:
diff changeset
  1707
        iDeviceDialog->Close();
hgs
parents:
diff changeset
  1708
        delete iDeviceDialog;
hgs
parents:
diff changeset
  1709
        iDeviceDialog = NULL;
hgs
parents:
diff changeset
  1710
        }
hgs
parents:
diff changeset
  1711
    _DPRINT( 4, "PhSrv.DoCancel.End" ); // debug print
hgs
parents:
diff changeset
  1712
    }
hgs
parents:
diff changeset
  1713
hgs
parents:
diff changeset
  1714
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1715
// CPhSrvUssdManager::RunError
hgs
parents:
diff changeset
  1716
//
hgs
parents:
diff changeset
  1717
// Because the RunL can leave, this function exists.
hgs
parents:
diff changeset
  1718
// In case of error, just returning KErrNone is OK.
hgs
parents:
diff changeset
  1719
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1720
//
hgs
parents:
diff changeset
  1721
TInt CPhSrvUssdManager::RunError( TInt /*aError*/ )
hgs
parents:
diff changeset
  1722
    {
hgs
parents:
diff changeset
  1723
    _DPRINT( 4, "PhSrv.RunError.Start" );     // debug print
hgs
parents:
diff changeset
  1724
    return KErrNone;
hgs
parents:
diff changeset
  1725
    }
hgs
parents:
diff changeset
  1726
hgs
parents:
diff changeset
  1727
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1728
// CPhSrvUssdManager::RequestStartEditingL
hgs
parents:
diff changeset
  1729
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1730
//
hgs
parents:
diff changeset
  1731
void CPhSrvUssdManager::RequestStartEditingL()
hgs
parents:
diff changeset
  1732
    {
hgs
parents:
diff changeset
  1733
    _DPRINT( 4, "PhSrv.UssdM.RequestStartEditingL.start" ); // debug print
hgs
parents:
diff changeset
  1734
hgs
parents:
diff changeset
  1735
    RWsSession wsSession;
hgs
parents:
diff changeset
  1736
    User::LeaveIfError( wsSession.Connect() );
hgs
parents:
diff changeset
  1737
    _DPRINT( 4, "PhSrv.RequestStartEditingL.wsSession.connect" );     // debug print
hgs
parents:
diff changeset
  1738
    CleanupClosePushL( wsSession );
hgs
parents:
diff changeset
  1739
hgs
parents:
diff changeset
  1740
    // Find the task with name
hgs
parents:
diff changeset
  1741
    TApaTaskList tasklist( wsSession );
hgs
parents:
diff changeset
  1742
    TApaTask task = tasklist.FindApp( KUssdSecureId );
hgs
parents:
diff changeset
  1743
hgs
parents:
diff changeset
  1744
    // If task exists, bring it to foreground
hgs
parents:
diff changeset
  1745
    if ( task.Exists() )
hgs
parents:
diff changeset
  1746
        {
hgs
parents:
diff changeset
  1747
        _DPRINT( 4, "PhSrv.UssdM.RequestStartEditingL.task.BringToForeground" );
hgs
parents:
diff changeset
  1748
        task.BringToForeground();
hgs
parents:
diff changeset
  1749
        }
hgs
parents:
diff changeset
  1750
    else
hgs
parents:
diff changeset
  1751
        {
hgs
parents:
diff changeset
  1752
        // Start new app
hgs
parents:
diff changeset
  1753
        RApaLsSession apaLsSession;
hgs
parents:
diff changeset
  1754
        User::LeaveIfError( apaLsSession.Connect() );
hgs
parents:
diff changeset
  1755
        _DPRINT( 4, "PhSrv.RequestStartEditingL.apaLsSession.connect" );     // debug print
hgs
parents:
diff changeset
  1756
        CleanupClosePushL( apaLsSession );
hgs
parents:
diff changeset
  1757
hgs
parents:
diff changeset
  1758
        TApaAppInfo appInfo;
hgs
parents:
diff changeset
  1759
        
hgs
parents:
diff changeset
  1760
        TInt err = apaLsSession.GetAppInfo( appInfo, KUssdSecureId );
hgs
parents:
diff changeset
  1761
        _DDPRINT( 4, "PhSrv.RequestStartEditingL.GetAppInfo ", err );     // debug print
hgs
parents:
diff changeset
  1762
        
hgs
parents:
diff changeset
  1763
        if ( err == KErrNone )
hgs
parents:
diff changeset
  1764
            {
hgs
parents:
diff changeset
  1765
        #ifndef SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1
hgs
parents:
diff changeset
  1766
            CApaCommandLine* apaCommandLine = CApaCommandLine::NewLC();
hgs
parents:
diff changeset
  1767
            apaCommandLine->SetExecutableNameL( appInfo.iFullName );
hgs
parents:
diff changeset
  1768
        #else // SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1
hgs
parents:
diff changeset
  1769
            CApaCommandLine* apaCommandLine =
hgs
parents:
diff changeset
  1770
                CApaCommandLine::NewLC( appInfo.iFullName );
hgs
parents:
diff changeset
  1771
        #endif // SYMBIAN_SUPPORT_UI_FRAMEWORKS_V1
hgs
parents:
diff changeset
  1772
hgs
parents:
diff changeset
  1773
            TThreadId id( static_cast<TInt64>( 0 ) );
hgs
parents:
diff changeset
  1774
            err = apaLsSession.StartApp( *apaCommandLine, id );
hgs
parents:
diff changeset
  1775
            _DDPRINT( 4, "PhSrv.RequestStartEditingL.ThreadId ", id ); 
hgs
parents:
diff changeset
  1776
            CleanupStack::PopAndDestroy( apaCommandLine );
hgs
parents:
diff changeset
  1777
            }
hgs
parents:
diff changeset
  1778
        CleanupStack::PopAndDestroy( &apaLsSession ); // apaLsSession
hgs
parents:
diff changeset
  1779
        
hgs
parents:
diff changeset
  1780
        // bring the ussd editor to foreground, only for testing
hgs
parents:
diff changeset
  1781
        TApaTaskList tasklist( wsSession );
hgs
parents:
diff changeset
  1782
        TApaTask task = tasklist.FindApp( KUssdSecureId );
hgs
parents:
diff changeset
  1783
        if ( task.Exists() )
hgs
parents:
diff changeset
  1784
            {
hgs
parents:
diff changeset
  1785
            _DPRINT( 4, "PhSrv.UssdM.RequestStartEditingL.task.BringToForeground" );
hgs
parents:
diff changeset
  1786
            task.BringToForeground();
hgs
parents:
diff changeset
  1787
            }
hgs
parents:
diff changeset
  1788
        // bring the ussd editor to foreground, only for testing
hgs
parents:
diff changeset
  1789
        }
hgs
parents:
diff changeset
  1790
    CleanupStack::PopAndDestroy(); // wsSession
hgs
parents:
diff changeset
  1791
hgs
parents:
diff changeset
  1792
    _DPRINT( 4, "PhSrv.UssdM.RequestStartEditingL.end" ); // debug print
hgs
parents:
diff changeset
  1793
    }
hgs
parents:
diff changeset
  1794
hgs
parents:
diff changeset
  1795
hgs
parents:
diff changeset
  1796
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1797
// CPhSrvUssdManager::InformUssdApplicationStarting
hgs
parents:
diff changeset
  1798
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1799
//
hgs
parents:
diff changeset
  1800
void CPhSrvUssdManager::InformUssdApplicationStarting()
hgs
parents:
diff changeset
  1801
    {
hgs
parents:
diff changeset
  1802
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppStarting.start" ); // debug print
hgs
parents:
diff changeset
  1803
    if ( iUssdReplyTimer )
hgs
parents:
diff changeset
  1804
        {
hgs
parents:
diff changeset
  1805
        _DPRINT( 4, "PhSrv.InformUssdApplicationStarting.iUssdReplyTimer" );
hgs
parents:
diff changeset
  1806
        if ( iUssdReplyTimer->IsTimerActive() )
hgs
parents:
diff changeset
  1807
            {
hgs
parents:
diff changeset
  1808
            _DPRINT( 4, "PhSrv.InformUssdApplicationStarting.iUssdReplyTimer.active" );
hgs
parents:
diff changeset
  1809
            iUssdReplyTimer->Pause();
hgs
parents:
diff changeset
  1810
            }
hgs
parents:
diff changeset
  1811
        }
hgs
parents:
diff changeset
  1812
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppStarting.end" ); // debug print
hgs
parents:
diff changeset
  1813
    }
hgs
parents:
diff changeset
  1814
hgs
parents:
diff changeset
  1815
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1816
// CPhSrvUssdManager::InformUssdApplicationTerminatingL
hgs
parents:
diff changeset
  1817
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1818
//
hgs
parents:
diff changeset
  1819
void CPhSrvUssdManager::InformUssdApplicationTerminatingL(
hgs
parents:
diff changeset
  1820
    const RMessage2& aMessage )
hgs
parents:
diff changeset
  1821
    {
hgs
parents:
diff changeset
  1822
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppTerminatingL.start" ); // debug print
hgs
parents:
diff changeset
  1823
    if ( iUssdReplyTimer )
hgs
parents:
diff changeset
  1824
        {
hgs
parents:
diff changeset
  1825
        if ( iUssdReplyTimer->IsTimerActive() )
hgs
parents:
diff changeset
  1826
            {
hgs
parents:
diff changeset
  1827
     
hgs
parents:
diff changeset
  1828
            _DPRINT( 4, "PhSrv.UssdM.InfUssdAppTerminatingL.timer" );
hgs
parents:
diff changeset
  1829
hgs
parents:
diff changeset
  1830
            // Read the information what is the reason
hgs
parents:
diff changeset
  1831
            // for application termination.
hgs
parents:
diff changeset
  1832
            TPhCltUssdAppExitReason exitReason = EPhCltExitReasonUnknown;
hgs
parents:
diff changeset
  1833
            TPckg< TPhCltUssdAppExitReason > exitReasonPckg( exitReason );
hgs
parents:
diff changeset
  1834
            aMessage.ReadL(
hgs
parents:
diff changeset
  1835
                0,
hgs
parents:
diff changeset
  1836
                exitReasonPckg );
hgs
parents:
diff changeset
  1837
hgs
parents:
diff changeset
  1838
     
hgs
parents:
diff changeset
  1839
            _DPRINT( 4, "PhSrv.UssdM.InfUssdAppTerminatingL.timer2" );
hgs
parents:
diff changeset
  1840
hgs
parents:
diff changeset
  1841
            // If reason was the completion of send operation, the USSD
hgs
parents:
diff changeset
  1842
            // session is not canceled, otherwise it is canceled.
hgs
parents:
diff changeset
  1843
            if ( exitReason != EPhCltSendCompleted )
hgs
parents:
diff changeset
  1844
                {
hgs
parents:
diff changeset
  1845
         
hgs
parents:
diff changeset
  1846
                _DPRINT( 4, "PhSrv.UssdM.InfUssdAppTerminatingL.SendRelease" );
hgs
parents:
diff changeset
  1847
                CloseSession();
hgs
parents:
diff changeset
  1848
                }
hgs
parents:
diff changeset
  1849
            }
hgs
parents:
diff changeset
  1850
        }
hgs
parents:
diff changeset
  1851
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppTerminatingL.end" ); // debug print
hgs
parents:
diff changeset
  1852
    }
hgs
parents:
diff changeset
  1853
hgs
parents:
diff changeset
  1854
hgs
parents:
diff changeset
  1855
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1856
// CPhSrvUssdManager::InformUssdApplicationToForeground
hgs
parents:
diff changeset
  1857
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1858
//
hgs
parents:
diff changeset
  1859
TInt CPhSrvUssdManager::InformUssdApplicationToForeground()
hgs
parents:
diff changeset
  1860
    {
hgs
parents:
diff changeset
  1861
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppToForeground.start" ); // debug print
hgs
parents:
diff changeset
  1862
hgs
parents:
diff changeset
  1863
    // Do the same actions as in InformUssdApplicationStarting,
hgs
parents:
diff changeset
  1864
    // that is why it is called.
hgs
parents:
diff changeset
  1865
    InformUssdApplicationStarting();
hgs
parents:
diff changeset
  1866
hgs
parents:
diff changeset
  1867
    if ( iEmptyEditor )
hgs
parents:
diff changeset
  1868
        {
hgs
parents:
diff changeset
  1869
        _DPRINT( 4, "PhSrv.UssdM.InfUssdAppToForeground.empty" ); // debug print
hgs
parents:
diff changeset
  1870
        iEmptyEditor = EFalse;
hgs
parents:
diff changeset
  1871
        return 1; // some positive number
hgs
parents:
diff changeset
  1872
        }
hgs
parents:
diff changeset
  1873
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppToForeground.end" ); // debug print
hgs
parents:
diff changeset
  1874
    return KErrNone;
hgs
parents:
diff changeset
  1875
    }
hgs
parents:
diff changeset
  1876
hgs
parents:
diff changeset
  1877
hgs
parents:
diff changeset
  1878
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1879
// CPhSrvUssdManager::InformUssdApplicationToBackground
hgs
parents:
diff changeset
  1880
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1881
//
hgs
parents:
diff changeset
  1882
void CPhSrvUssdManager::InformUssdApplicationToBackground()
hgs
parents:
diff changeset
  1883
    {
hgs
parents:
diff changeset
  1884
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppToBackground.start" ); // debug print
hgs
parents:
diff changeset
  1885
    if ( iUssdReplyTimer )
hgs
parents:
diff changeset
  1886
        {
hgs
parents:
diff changeset
  1887
        _DPRINT( 4, "PhSrv.UssdM.InfUssdAppToBackground.timer" ); // debug print
hgs
parents:
diff changeset
  1888
        if ( iUssdReplyTimer->IsTimerActive() )
hgs
parents:
diff changeset
  1889
            {
hgs
parents:
diff changeset
  1890
            _DPRINT( 4, "PhSrv.UssdM.InfUssdAppToBackground.timer.Active" ); // debug print
hgs
parents:
diff changeset
  1891
            iUssdReplyTimer->Continue();
hgs
parents:
diff changeset
  1892
            }
hgs
parents:
diff changeset
  1893
        }
hgs
parents:
diff changeset
  1894
    _DPRINT( 4, "PhSrv.UssdM.InfUssdAppToBackground.end" ); // debug print
hgs
parents:
diff changeset
  1895
    }
hgs
parents:
diff changeset
  1896
hgs
parents:
diff changeset
  1897
hgs
parents:
diff changeset
  1898
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1899
// CPhSrvUssdManager::InformStartSAT
hgs
parents:
diff changeset
  1900
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1901
//
hgs
parents:
diff changeset
  1902
void CPhSrvUssdManager::InformStartSAT( const RMessage2& aSatMessage )
hgs
parents:
diff changeset
  1903
    {
hgs
parents:
diff changeset
  1904
    _DPRINT( 4, "PhSrv.InformStartSAT.Start" );    // debug print
hgs
parents:
diff changeset
  1905
hgs
parents:
diff changeset
  1906
    if ( iHavePendingSatMessagePointer )
hgs
parents:
diff changeset
  1907
        {
hgs
parents:
diff changeset
  1908
        _DPRINT( 4, "PhSrv.InformStartSAT.Complete.InUse" ); // debug print
hgs
parents:
diff changeset
  1909
        aSatMessage.Complete( KErrInUse );
hgs
parents:
diff changeset
  1910
        }
hgs
parents:
diff changeset
  1911
    else
hgs
parents:
diff changeset
  1912
        {
hgs
parents:
diff changeset
  1913
        _DPRINT( 4, "PhSrv.InformStartSAT.Set" );    
hgs
parents:
diff changeset
  1914
hgs
parents:
diff changeset
  1915
        // There was not pending SAT message
hgs
parents:
diff changeset
  1916
        iHavePendingSatMessagePointer = ETrue;
hgs
parents:
diff changeset
  1917
        _DDPRINT( 4, "PhSrv.UssdM.InformStartSAT.PendingSatPointer ", iHavePendingSatMessagePointer );
hgs
parents:
diff changeset
  1918
        iPendingSatMessagePointer = aSatMessage;
hgs
parents:
diff changeset
  1919
        }
hgs
parents:
diff changeset
  1920
hgs
parents:
diff changeset
  1921
    _DPRINT( 4, "PhSrv.InformStartSAT.End" );   // debug print
hgs
parents:
diff changeset
  1922
    }
hgs
parents:
diff changeset
  1923
hgs
parents:
diff changeset
  1924
hgs
parents:
diff changeset
  1925
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1926
// CPhSrvUssdManager::InformStopSAT
hgs
parents:
diff changeset
  1927
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1928
//
hgs
parents:
diff changeset
  1929
void CPhSrvUssdManager::InformStopSAT()
hgs
parents:
diff changeset
  1930
    {
hgs
parents:
diff changeset
  1931
    _DPRINT( 4, "PhSrv.InformStopSAT.Start" );        
hgs
parents:
diff changeset
  1932
hgs
parents:
diff changeset
  1933
    // Do the actions only if there is pending SAT message.
hgs
parents:
diff changeset
  1934
    if ( iHavePendingSatMessagePointer )
hgs
parents:
diff changeset
  1935
        {
hgs
parents:
diff changeset
  1936
        _DPRINT( 4, "PhSrv.InformStopSAT.Complete.Cancel" ); // debug print
hgs
parents:
diff changeset
  1937
        if ( !iPendingSatMessagePointer.IsNull() )
hgs
parents:
diff changeset
  1938
            {
hgs
parents:
diff changeset
  1939
            iPendingSatMessagePointer.Complete( KErrCancel );
hgs
parents:
diff changeset
  1940
            _DPRINT( 4, "PhSrv.InformStopSAT.Complete.KErrCancel" );
hgs
parents:
diff changeset
  1941
            }
hgs
parents:
diff changeset
  1942
        iHavePendingSatMessagePointer = EFalse;
hgs
parents:
diff changeset
  1943
        }
hgs
parents:
diff changeset
  1944
    _DPRINT( 4, "PhSrv.InformStopSAT.End" );          
hgs
parents:
diff changeset
  1945
    }
hgs
parents:
diff changeset
  1946
hgs
parents:
diff changeset
  1947
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1948
// CPhSrvUssdManager::ShowNotes
hgs
parents:
diff changeset
  1949
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1950
//
hgs
parents:
diff changeset
  1951
hgs
parents:
diff changeset
  1952
hgs
parents:
diff changeset
  1953
TBool CPhSrvUssdManager::ShowNotesL()
hgs
parents:
diff changeset
  1954
{
hgs
parents:
diff changeset
  1955
_DPRINT( 4, "PhSrv.ShowNotesL.Start" );
hgs
parents:
diff changeset
  1956
hgs
parents:
diff changeset
  1957
if ( !iHavePendingSatMessagePointer )
hgs
parents:
diff changeset
  1958
    {
hgs
parents:
diff changeset
  1959
    if ( iSatCanceled )
hgs
parents:
diff changeset
  1960
        {
hgs
parents:
diff changeset
  1961
        _DPRINT( 4, "PhSrv.ShowNotesL, EFalse" );  // debug print
hgs
parents:
diff changeset
  1962
        return EFalse;
hgs
parents:
diff changeset
  1963
        }
hgs
parents:
diff changeset
  1964
    else
hgs
parents:
diff changeset
  1965
        {
hgs
parents:
diff changeset
  1966
        _DPRINT( 4, "PhSrv.ShowNotesL, ETrue" );  // debug print
hgs
parents:
diff changeset
  1967
        return ETrue;
hgs
parents:
diff changeset
  1968
        }
hgs
parents:
diff changeset
  1969
    }
hgs
parents:
diff changeset
  1970
// Read the information whether the notes are shown or not.
hgs
parents:
diff changeset
  1971
    TUint notesShown = 0;
hgs
parents:
diff changeset
  1972
    TPckg< TUint > noShPckg( notesShown );
hgs
parents:
diff changeset
  1973
    iPendingSatMessagePointer.ReadL(
hgs
parents:
diff changeset
  1974
        0,
hgs
parents:
diff changeset
  1975
        noShPckg );
hgs
parents:
diff changeset
  1976
hgs
parents:
diff changeset
  1977
    TBool showNotes = EFalse;
hgs
parents:
diff changeset
  1978
    _DPRINT( 4, "PhSrv.ShowNotes Sat= EFalse" );    // debug print
hgs
parents:
diff changeset
  1979
    if ( notesShown == KPhCltShowNotes )
hgs
parents:
diff changeset
  1980
        {
hgs
parents:
diff changeset
  1981
        _DPRINT( 4, "PhSrv.ShowNotes Sat= ETrue" ); // debug print
hgs
parents:
diff changeset
  1982
        showNotes = ETrue;
hgs
parents:
diff changeset
  1983
        }
hgs
parents:
diff changeset
  1984
    _DPRINT( 4, "PhSrv.ShowNotesL.End" );
hgs
parents:
diff changeset
  1985
    return showNotes;
hgs
parents:
diff changeset
  1986
}
hgs
parents:
diff changeset
  1987
hgs
parents:
diff changeset
  1988
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1989
// CPhSrvUssdManager::CompleteSatL
hgs
parents:
diff changeset
  1990
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1991
//
hgs
parents:
diff changeset
  1992
void CPhSrvUssdManager::CompleteSatL(
hgs
parents:
diff changeset
  1993
    TDesC* aReceiveString,
hgs
parents:
diff changeset
  1994
    TInt aError )
hgs
parents:
diff changeset
  1995
    {
hgs
parents:
diff changeset
  1996
    _DPRINT( 4, "PhSrv.CompleteSatL.Start" );         
hgs
parents:
diff changeset
  1997
    if ( aReceiveString )
hgs
parents:
diff changeset
  1998
        {
hgs
parents:
diff changeset
  1999
        if ( aReceiveString->Length() )
hgs
parents:
diff changeset
  2000
            {
hgs
parents:
diff changeset
  2001
            _DPRINT( 4, "PhSrv.CompleteSatL.recString.>0" ); // debug print
hgs
parents:
diff changeset
  2002
            // copy the received string to client side.
hgs
parents:
diff changeset
  2003
            if ( iPendingSatMessagePointer.Int1() < aReceiveString->Length() )
hgs
parents:
diff changeset
  2004
                {
hgs
parents:
diff changeset
  2005
         
hgs
parents:
diff changeset
  2006
                _DPRINT( 4, "PhSrv.CompleteSatL.recString.LengthError" );
hgs
parents:
diff changeset
  2007
                if ( !iPendingSatMessagePointer.IsNull() )
hgs
parents:
diff changeset
  2008
                    {
hgs
parents:
diff changeset
  2009
                    iPendingSatMessagePointer.Complete( KErrOverflow );
hgs
parents:
diff changeset
  2010
                    _DPRINT( 4, "PhSrv.CompleteSatLComplete.KErrOverFlow" );
hgs
parents:
diff changeset
  2011
                    }
hgs
parents:
diff changeset
  2012
                iHavePendingSatMessagePointer = EFalse;
hgs
parents:
diff changeset
  2013
                }
hgs
parents:
diff changeset
  2014
            else
hgs
parents:
diff changeset
  2015
                {
hgs
parents:
diff changeset
  2016
            _DPRINT( 4, "PhSrv.CompleteSatL.recString.Write" );  // debug print
hgs
parents:
diff changeset
  2017
            iPendingSatMessagePointer.WriteL(
hgs
parents:
diff changeset
  2018
                2,
hgs
parents:
diff changeset
  2019
                *aReceiveString );
hgs
parents:
diff changeset
  2020
hgs
parents:
diff changeset
  2021
            _DPRINT( 4, "PhSrv.CompleteSatL.recString.Write2" ); // debug print
hgs
parents:
diff changeset
  2022
            TPckg< TUint > dcsPackage( iDCS );
hgs
parents:
diff changeset
  2023
            iPendingSatMessagePointer.WriteL(
hgs
parents:
diff changeset
  2024
                0,
hgs
parents:
diff changeset
  2025
                dcsPackage );
hgs
parents:
diff changeset
  2026
            }
hgs
parents:
diff changeset
  2027
        }
hgs
parents:
diff changeset
  2028
        }
hgs
parents:
diff changeset
  2029
    _DPRINT( 4, "PhSrv.CompleteSatL.Middle" );    
hgs
parents:
diff changeset
  2030
    if ( !iPendingSatMessagePointer.IsNull() )
hgs
parents:
diff changeset
  2031
        {
hgs
parents:
diff changeset
  2032
        if ( aReceiveString && !iSatCanceled )
hgs
parents:
diff changeset
  2033
            {
hgs
parents:
diff changeset
  2034
            _DDPRINT( 4, "PhSrv.CompleteSatL.Complete.", iReturnResult.iOpCode  );   // debug print
hgs
parents:
diff changeset
  2035
            iPendingSatMessagePointer.Complete( iReturnResult.iOpCode ); // Some positive value
hgs
parents:
diff changeset
  2036
            }
hgs
parents:
diff changeset
  2037
        else
hgs
parents:
diff changeset
  2038
            {
hgs
parents:
diff changeset
  2039
            _DPRINT( 4, "PhSrv.CompleteSatL.Complete.aError" ); // debug print
hgs
parents:
diff changeset
  2040
            iPendingSatMessagePointer.Complete( aError );
hgs
parents:
diff changeset
  2041
            }
hgs
parents:
diff changeset
  2042
        }
hgs
parents:
diff changeset
  2043
hgs
parents:
diff changeset
  2044
    iHavePendingSatMessagePointer = EFalse;
hgs
parents:
diff changeset
  2045
hgs
parents:
diff changeset
  2046
    _DPRINT( 4, "PhSrv.CompleteSatL.End" );    
hgs
parents:
diff changeset
  2047
    }
hgs
parents:
diff changeset
  2048
hgs
parents:
diff changeset
  2049
hgs
parents:
diff changeset
  2050
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2051
// CPhSrvUssdManager::IsTelephonyFeatureSupported
hgs
parents:
diff changeset
  2052
//
hgs
parents:
diff changeset
  2053
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2054
//
hgs
parents:
diff changeset
  2055
TBool CPhSrvUssdManager::IsTelephonyFeatureSupported(
hgs
parents:
diff changeset
  2056
    const TInt aFeatureId )
hgs
parents:
diff changeset
  2057
    {
hgs
parents:
diff changeset
  2058
    return ( aFeatureId & iVariantReadOnlyValues );
hgs
parents:
diff changeset
  2059
    }
hgs
parents:
diff changeset
  2060
hgs
parents:
diff changeset
  2061
hgs
parents:
diff changeset
  2062
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2063
// CPhSrvUssdManager::PlayUssdTone
hgs
parents:
diff changeset
  2064
//
hgs
parents:
diff changeset
  2065
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2066
//
hgs
parents:
diff changeset
  2067
TInt CPhSrvUssdManager::PlayUssdTone()
hgs
parents:
diff changeset
  2068
    {
hgs
parents:
diff changeset
  2069
    _DPRINT( 4, "PhSrv.UssdM.PlayTone.start" );    
hgs
parents:
diff changeset
  2070
hgs
parents:
diff changeset
  2071
    TInt err = KErrNone;
hgs
parents:
diff changeset
  2072
// <-- QT PHONE  START-->
hgs
parents:
diff changeset
  2073
//    RProperty::Define( KPSUidNcnList, KNcnPlayAlertTone, RProperty::EInt, ECapability_None , ECapabilityWriteDeviceData );
hgs
parents:
diff changeset
  2074
//    RProperty::Set( KPSUidNcnList, KNcnPlayAlertTone, KPhSrvUssdTone );
hgs
parents:
diff changeset
  2075
// <-- QT PHONE END-->
hgs
parents:
diff changeset
  2076
hgs
parents:
diff changeset
  2077
    // debug print
hgs
parents:
diff changeset
  2078
    _DDPRINT(
hgs
parents:
diff changeset
  2079
        4,
hgs
parents:
diff changeset
  2080
        "PhSrv.UssdM.PlayTone.end",
hgs
parents:
diff changeset
  2081
        err );
hgs
parents:
diff changeset
  2082
    return err;
hgs
parents:
diff changeset
  2083
    }
hgs
parents:
diff changeset
  2084
hgs
parents:
diff changeset
  2085
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2086
// CPhSrvUssdManager::GetTelephonyVariantData
hgs
parents:
diff changeset
  2087
//
hgs
parents:
diff changeset
  2088
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2089
//
hgs
parents:
diff changeset
  2090
TInt CPhSrvUssdManager::GetTelephonyVariantData()
hgs
parents:
diff changeset
  2091
    {
hgs
parents:
diff changeset
  2092
    _DPRINT( 4, "PhSrv.UssdM.GetTelephonyVariantData.Start" );
hgs
parents:
diff changeset
  2093
    TInt err = KErrNone;
hgs
parents:
diff changeset
  2094
// <-- QT PHONE START-->
hgs
parents:
diff changeset
  2095
/*
hgs
parents:
diff changeset
  2096
    // Variation data should be unchangable during run-time,
hgs
parents:
diff changeset
  2097
    // therefore, if once succesfully read, later reads are
hgs
parents:
diff changeset
  2098
    // not allowed.
hgs
parents:
diff changeset
  2099
    if ( iVariantReadOnlyValues == KPhSrvDefaultValue )
hgs
parents:
diff changeset
  2100
        {
hgs
parents:
diff changeset
  2101
        CRepository* cenRepSession = NULL;
hgs
parents:
diff changeset
  2102
        TRAP ( err ,
hgs
parents:
diff changeset
  2103
               cenRepSession = CRepository::NewL( KCRUidTelVariation ) );
hgs
parents:
diff changeset
  2104
        if ( err == KErrNone )
hgs
parents:
diff changeset
  2105
            {
hgs
parents:
diff changeset
  2106
            err = cenRepSession->Get( KTelVariationFlags,
hgs
parents:
diff changeset
  2107
                                   iVariantReadOnlyValues );
hgs
parents:
diff changeset
  2108
            }
hgs
parents:
diff changeset
  2109
        delete cenRepSession;
hgs
parents:
diff changeset
  2110
        }
hgs
parents:
diff changeset
  2111
hgs
parents:
diff changeset
  2112
    _DDPRINT( 4, "PhSrv.UssdM.variant", iVariantReadOnlyValues ); // debug print
hgs
parents:
diff changeset
  2113
    _DPRINT( 4, "PhSrv.UssdM.GetTelephonyVariantData.End" );
hgs
parents:
diff changeset
  2114
    */
hgs
parents:
diff changeset
  2115
// <-- QT PHONE END-->
hgs
parents:
diff changeset
  2116
    return err;
hgs
parents:
diff changeset
  2117
    }
hgs
parents:
diff changeset
  2118
hgs
parents:
diff changeset
  2119
hgs
parents:
diff changeset
  2120
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2121
// CPhSrvUssdManager::SendMoAcknowledgementL
hgs
parents:
diff changeset
  2122
//
hgs
parents:
diff changeset
  2123
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2124
//
hgs
parents:
diff changeset
  2125
void CPhSrvUssdManager::SendMoAcknowledgementL()
hgs
parents:
diff changeset
  2126
    {
hgs
parents:
diff changeset
  2127
    _DPRINT( 4, "PhSrv.SendMoAckL.Start" );    
hgs
parents:
diff changeset
  2128
hgs
parents:
diff changeset
  2129
    // Acknowledge MT USSD message.
hgs
parents:
diff changeset
  2130
    RMobileUssdMessaging::TMobileUssdAttributesV1 msgAttribs;
hgs
parents:
diff changeset
  2131
    msgAttribs.iFlags =
hgs
parents:
diff changeset
  2132
        RMobileUssdMessaging::KUssdMessageType +
hgs
parents:
diff changeset
  2133
        RMobileUssdMessaging::KUssdDataFormat  +
hgs
parents:
diff changeset
  2134
        RMobileUssdMessaging::KUssdMessageDcs;
hgs
parents:
diff changeset
  2135
hgs
parents:
diff changeset
  2136
    msgAttribs.iType   = RMobileUssdMessaging::EUssdMOAcknowledgement;
hgs
parents:
diff changeset
  2137
    _DDPRINT( 4, "PhSrv.SendMoAckL.msgAttribs.iType ", msgAttribs.iType );
hgs
parents:
diff changeset
  2138
    msgAttribs.iFormat = RMobileUssdMessaging::EFormatUnspecified;
hgs
parents:
diff changeset
  2139
    _DDPRINT( 4, "PhSrv.SendMoAckL.msgAttribs.iFormat ", msgAttribs.iFormat );
hgs
parents:
diff changeset
  2140
    msgAttribs.iDcs    = KPhSrvUssdDefaultDCS;
hgs
parents:
diff changeset
  2141
hgs
parents:
diff changeset
  2142
    RMobileUssdMessaging::TMobileUssdAttributesV1Pckg attribs = msgAttribs;
hgs
parents:
diff changeset
  2143
    SendHandlerL().SendUssdL( KNullDesC8() , attribs );
hgs
parents:
diff changeset
  2144
hgs
parents:
diff changeset
  2145
    _DPRINT( 4, "PhSrv.SendMoAckL.End" );    
hgs
parents:
diff changeset
  2146
    }
hgs
parents:
diff changeset
  2147
hgs
parents:
diff changeset
  2148
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2149
// CPhSrvUssdManager::TurnLightsOn
hgs
parents:
diff changeset
  2150
//
hgs
parents:
diff changeset
  2151
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2152
//
hgs
parents:
diff changeset
  2153
void CPhSrvUssdManager::TurnLightsOn()
hgs
parents:
diff changeset
  2154
    {
hgs
parents:
diff changeset
  2155
    _DPRINT( 4, "PhSrv.TurnLightsOn.Start" );    
hgs
parents:
diff changeset
  2156
hgs
parents:
diff changeset
  2157
hgs
parents:
diff changeset
  2158
     // Change the bit on and off. SysAp will detect that
hgs
parents:
diff changeset
  2159
     // the lights should be switched on for the specified time.
hgs
parents:
diff changeset
  2160
     //
hgs
parents:
diff changeset
  2161
     RProperty::Set(KPSUidCoreApplicationUIs, KLightsControl, ELightsOn);
hgs
parents:
diff changeset
  2162
     TInt err = RProperty::Set(KPSUidCoreApplicationUIs, KLightsControl, ELightsOff);
hgs
parents:
diff changeset
  2163
hgs
parents:
diff changeset
  2164
     if ( err != KErrNone )
hgs
parents:
diff changeset
  2165
         {
hgs
parents:
diff changeset
  2166
         _DDPRINT( 4,"PhSrv.TurnLightsOn.Error: ",err );// debug print
hgs
parents:
diff changeset
  2167
         }
hgs
parents:
diff changeset
  2168
hgs
parents:
diff changeset
  2169
    _DPRINT( 4, "PhSrv.TurnLightsOn.End" );    
hgs
parents:
diff changeset
  2170
    }
hgs
parents:
diff changeset
  2171
hgs
parents:
diff changeset
  2172
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2173
// CPhSrvUssdManager::LoadDefaultString
hgs
parents:
diff changeset
  2174
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
  2175
//
hgs
parents:
diff changeset
  2176
const TPtrC CPhSrvUssdManager::LoadDefaultString( const TDesC& aText )
hgs
parents:
diff changeset
  2177
    {
hgs
parents:
diff changeset
  2178
    _DPRINT( 4, "PhSrv.LoadDefaultString.Start" );
hgs
parents:
diff changeset
  2179
    
hgs
parents:
diff changeset
  2180
    if ( iTextBuffer )
hgs
parents:
diff changeset
  2181
        {
hgs
parents:
diff changeset
  2182
        delete iTextBuffer;
hgs
parents:
diff changeset
  2183
        iTextBuffer = NULL;
hgs
parents:
diff changeset
  2184
        _DPRINT( 4, "PhSrv.LoadDefaultString.Clear" );
hgs
parents:
diff changeset
  2185
        }
hgs
parents:
diff changeset
  2186
    TInt err = KErrNone;
hgs
parents:
diff changeset
  2187
    TPtrC ptr( aText );
hgs
parents:
diff changeset
  2188
    if ( ptr.Length() )
hgs
parents:
diff changeset
  2189
        {
hgs
parents:
diff changeset
  2190
        TRAP( err, iTextBuffer = HbTextResolverSymbian::LoadL( ptr ) );
hgs
parents:
diff changeset
  2191
        _DDPRINT( 4, "PhSrv.LoadDefaultString.LoadL.%d", err );
hgs
parents:
diff changeset
  2192
        if ( iTextBuffer )
hgs
parents:
diff changeset
  2193
            {
hgs
parents:
diff changeset
  2194
            ptr.Set( iTextBuffer->Des() );   
hgs
parents:
diff changeset
  2195
            _DPRINT( 4, "PhSrv.LoadDefaultString.Set" );
hgs
parents:
diff changeset
  2196
            }
hgs
parents:
diff changeset
  2197
        }    
hgs
parents:
diff changeset
  2198
    _DPRINT( 4, "PhSrv.LoadDefaultString.End" );
hgs
parents:
diff changeset
  2199
    return ptr;
hgs
parents:
diff changeset
  2200
    }
hgs
parents:
diff changeset
  2201
hgs
parents:
diff changeset
  2202
// End of File