satengine/satserver/Commands/SetUpCallCmd/src/CSetUpCallHandler.cpp
author hgs
Fri, 03 Sep 2010 13:59:20 +0300
changeset 46 2fa1fa551b0b
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201035
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:  Handles SetUpCall command
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
#include    <e32base.h>
hgs
parents:
diff changeset
    18
#include    <etelmm.h>
hgs
parents:
diff changeset
    19
#include    <exterror.h>
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
#include    "MSatApi.h"
hgs
parents:
diff changeset
    22
#include    "MSatUtils.h"
hgs
parents:
diff changeset
    23
#include    "MSatSystemState.h"
hgs
parents:
diff changeset
    24
#include    "MSatUiSession.h"
hgs
parents:
diff changeset
    25
#include    "SatSOpcodes.h"
hgs
parents:
diff changeset
    26
#include    "MSatSUiClientHandler.h"
hgs
parents:
diff changeset
    27
#include    "csetupcallrequesthandler.h"
hgs
parents:
diff changeset
    28
#include    "CSetUpCallHandler.h"
hgs
parents:
diff changeset
    29
#include    "TSatExtErrorUtils.h"
hgs
parents:
diff changeset
    30
#include    "SatLog.h"
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
const TUint8 KBCDAsterisk( 0x0A );
hgs
parents:
diff changeset
    33
const TUint8 KBCDDash( 0x0B );
hgs
parents:
diff changeset
    34
const TUint8 KBCDDTMF( 0x0C );
hgs
parents:
diff changeset
    35
const TUint8 KBCDWild( 0x0D );
hgs
parents:
diff changeset
    36
const TUint8 KBCDExpansion( 0x0E );
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
const TUint8 KAsteriskChar( 0x2A );
hgs
parents:
diff changeset
    39
const TUint8 KDashChar( 0x23 );
hgs
parents:
diff changeset
    40
const TUint8 KDTMFChar( 0x70 );
hgs
parents:
diff changeset
    41
const TUint8 KWildChar( 0x77 );
hgs
parents:
diff changeset
    42
const TUint8 KExpansionChar( 0x2E );
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
/** Maximum name length. */ 
hgs
parents:
diff changeset
    45
const TInt KSatMaximumNameLength = 50;
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
/** Maximum phone number length same as  used by phone. */ 
hgs
parents:
diff changeset
    48
const TInt KSatMaximumPhoneNumberLength = 100;
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
/** The subaddress length, see ITU-T I.330 and 3GPP TS 11.14. */ 
hgs
parents:
diff changeset
    51
const TInt KSatSubAddressLength = 21;
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
/** The maximum bearer length. The bearer capabilities as 
hgs
parents:
diff changeset
    54
defined in GSM 04.08. */ 
hgs
parents:
diff changeset
    55
const TInt KSatBearerLength = 14;
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
_LIT( KFixedSimEmergencyNumber, "112" );
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    63
// Two-phased constructor.
hgs
parents:
diff changeset
    64
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    65
//
hgs
parents:
diff changeset
    66
CSetUpCallHandler* CSetUpCallHandler::NewL( MSatUtils* aUtils )
hgs
parents:
diff changeset
    67
    {
hgs
parents:
diff changeset
    68
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::NewL calling" )
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    CSetUpCallHandler* self = new( ELeave ) CSetUpCallHandler;
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    73
    self->BaseConstructL( aUtils );
hgs
parents:
diff changeset
    74
    self->ConstructL();
hgs
parents:
diff changeset
    75
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::NewL exiting" )
hgs
parents:
diff changeset
    78
    return self;
hgs
parents:
diff changeset
    79
    }
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    82
// Destructor.
hgs
parents:
diff changeset
    83
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    84
//
hgs
parents:
diff changeset
    85
CSetUpCallHandler::~CSetUpCallHandler()
hgs
parents:
diff changeset
    86
    {
hgs
parents:
diff changeset
    87
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::~CSetUpCallHandler calling" )
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
    Cancel();
hgs
parents:
diff changeset
    90
    
hgs
parents:
diff changeset
    91
    delete iRequestHandler;
hgs
parents:
diff changeset
    92
    iRequestHandler = NULL;
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::~CSetUpCallHandler exiting" )
hgs
parents:
diff changeset
    95
    }
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
// From class MSatEventObserver.
hgs
parents:
diff changeset
    99
// Event notification.
hgs
parents:
diff changeset
   100
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   101
//
hgs
parents:
diff changeset
   102
void CSetUpCallHandler::Event( TInt aEvent )
hgs
parents:
diff changeset
   103
    {
hgs
parents:
diff changeset
   104
    LOG2( SIMPLE, "SETUPCALL: CSetUpCallHandler::Event calling,aEvent: %i",
hgs
parents:
diff changeset
   105
          aEvent )
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
    if ( MSatUtils::ECallControlExecuting == aEvent )
hgs
parents:
diff changeset
   108
        {
hgs
parents:
diff changeset
   109
        LOG( SIMPLE,
hgs
parents:
diff changeset
   110
            "SETUPCALL: CSetUpCallHandler::Event: ECallControlExecuting" )
hgs
parents:
diff changeset
   111
        iCallControlActive = ETrue;
hgs
parents:
diff changeset
   112
        }
hgs
parents:
diff changeset
   113
    else if ( MSatUtils::ECallControlDone == aEvent )
hgs
parents:
diff changeset
   114
        {
hgs
parents:
diff changeset
   115
        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::Event: ECallControlDone" )
hgs
parents:
diff changeset
   116
        iCallControlActive = EFalse;
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
        // Check if SetUpCall command has arrived from SIM during CC execution
hgs
parents:
diff changeset
   119
        // Emergency call is made immediate regardless of call control.
hgs
parents:
diff changeset
   120
        if ( !IsActive() && iPCmdPending && !iEmergencyCall )
hgs
parents:
diff changeset
   121
            {
hgs
parents:
diff changeset
   122
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   123
            "SETUPCALL: CSetUpCallHandler::Event: setupcall" )
hgs
parents:
diff changeset
   124
            iPCmdPending = EFalse;
hgs
parents:
diff changeset
   125
            // Execute the setupcall.
hgs
parents:
diff changeset
   126
            DoHandleCommand();
hgs
parents:
diff changeset
   127
            }
hgs
parents:
diff changeset
   128
        }
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
    CSatCommandHandler::Event( aEvent );
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::Event exiting" )
hgs
parents:
diff changeset
   133
    }
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   136
// From class MSatCommand.
hgs
parents:
diff changeset
   137
// Response from the client.
hgs
parents:
diff changeset
   138
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   139
//
hgs
parents:
diff changeset
   140
void CSetUpCallHandler::ClientResponse()
hgs
parents:
diff changeset
   141
    {
hgs
parents:
diff changeset
   142
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::ClientResponse calling" )
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
    if ( iQueryRsp.iAccepted )
hgs
parents:
diff changeset
   145
        {
hgs
parents:
diff changeset
   146
        // User accepted the call, make the call
hgs
parents:
diff changeset
   147
        if( iRequestHandler )
hgs
parents:
diff changeset
   148
            {
hgs
parents:
diff changeset
   149
            DoSetupCall( *iRequestHandler );
hgs
parents:
diff changeset
   150
            }
hgs
parents:
diff changeset
   151
        else
hgs
parents:
diff changeset
   152
            {
hgs
parents:
diff changeset
   153
            CompleteSetupCall(
hgs
parents:
diff changeset
   154
                RSat::KMeUnableToProcessCmd,
hgs
parents:
diff changeset
   155
                RSat::KNoSpecificMeProblem );
hgs
parents:
diff changeset
   156
            }
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
    else
hgs
parents:
diff changeset
   159
        {
hgs
parents:
diff changeset
   160
        LOG( NORMAL, 
hgs
parents:
diff changeset
   161
        "SETUPCALL: CSetUpCallHandler::ClientResponse User Cancel" )
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
        if ( iQueryRsp.iSessionTerminatedByUser )
hgs
parents:
diff changeset
   164
            {
hgs
parents:
diff changeset
   165
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   166
            "SETUPCALL: CSetUpCallHandler::ClientResponse TerminatedByUser" )
hgs
parents:
diff changeset
   167
            // Notify sim session end command that next sim session end
hgs
parents:
diff changeset
   168
            // should close the ui session.
hgs
parents:
diff changeset
   169
            iUtils->NotifyEvent( MSatUtils::ESessionTerminatedByUser );
hgs
parents:
diff changeset
   170
            }
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
        // End key is pressed during confirmation or user denied call setup,
hgs
parents:
diff changeset
   173
        // KPCmdNotAcceptedByUser is an expected response,
hgs
parents:
diff changeset
   174
        CompleteSetupCall( RSat::KPCmdNotAcceptedByUser );
hgs
parents:
diff changeset
   175
        }
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::ClientResponse exiting" )
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   181
// From class CActive.
hgs
parents:
diff changeset
   182
// Cancels the sat request.
hgs
parents:
diff changeset
   183
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   184
//
hgs
parents:
diff changeset
   185
void CSetUpCallHandler::DoCancel()
hgs
parents:
diff changeset
   186
    {
hgs
parents:
diff changeset
   187
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::DoCancel calling" )
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
    iUtils->USatAPI().NotifySetUpCallCancel();
hgs
parents:
diff changeset
   190
    if( iRequestHandler )
hgs
parents:
diff changeset
   191
        {
hgs
parents:
diff changeset
   192
        iRequestHandler->Cancel();
hgs
parents:
diff changeset
   193
        }
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::DoCancel exiting" )
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   199
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   200
// Requests the command notification.
hgs
parents:
diff changeset
   201
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   202
//
hgs
parents:
diff changeset
   203
void CSetUpCallHandler::IssueUSATRequest( TRequestStatus& aStatus )
hgs
parents:
diff changeset
   204
    {
hgs
parents:
diff changeset
   205
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::IssueUSATRequest calling" )
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
    // Clear the IPC package.
hgs
parents:
diff changeset
   208
    new (&iSetUpCallData) RSat::TSetUpCallV1();
hgs
parents:
diff changeset
   209
    iPCmdPending = EFalse;
hgs
parents:
diff changeset
   210
    iQueryRsp.iAccepted = EFalse;
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    iUtils->USatAPI().NotifySetUpCall( aStatus, iSetUpCallPckg );
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::IssueUSATRequest exiting" )
hgs
parents:
diff changeset
   215
    }
hgs
parents:
diff changeset
   216
hgs
parents:
diff changeset
   217
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   218
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   219
// SetUpCall command is not allowed in following situations:
hgs
parents:
diff changeset
   220
//      - Phone is not registered to homenetwork and roaming.
hgs
parents:
diff changeset
   221
//      - phone is ringing, alerting or call is on and SetUpCall command
hgs
parents:
diff changeset
   222
//        is "make call only if not busy", "make call only if not busy wiht
hgs
parents:
diff changeset
   223
//        redial" or "Call type not set".
hgs
parents:
diff changeset
   224
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   225
//
hgs
parents:
diff changeset
   226
TBool CSetUpCallHandler::CommandAllowed()
hgs
parents:
diff changeset
   227
    {
hgs
parents:
diff changeset
   228
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CommandAllowed calling" )
hgs
parents:
diff changeset
   229
    TBool commandAllowed( ETrue );
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
    // Emergency call can newer be denied.
hgs
parents:
diff changeset
   232
    // The usage of constant emergency number is according to ETSI TS 31.111.
hgs
parents:
diff changeset
   233
    iEmergencyCall =
hgs
parents:
diff changeset
   234
        ( 0 == iSetUpCallData.iAddress.iTelNumber.Compare(
hgs
parents:
diff changeset
   235
            KFixedSimEmergencyNumber ) );
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
    if ( !iEmergencyCall )
hgs
parents:
diff changeset
   238
        {
hgs
parents:
diff changeset
   239
        RMobilePhone::TMobilePhoneRegistrationStatus networkStatus(
hgs
parents:
diff changeset
   240
            iUtils->SystemState().GetNetworkRegistrationStatus() );
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
        if ( ( ( RSat::EAlphaIdProvided !=
hgs
parents:
diff changeset
   243
                     iSetUpCallData.iAlphaIdConfirmationPhase.iStatus ) &&
hgs
parents:
diff changeset
   244
               ( ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   245
                       iSetUpCallData.iIconIdConfirmationPhase.iQualifier ) ||
hgs
parents:
diff changeset
   246
                 ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   247
                       iSetUpCallData.iIconIdConfirmationPhase.iQualifier ) ) )
hgs
parents:
diff changeset
   248
                 ||
hgs
parents:
diff changeset
   249
             ( ( RSat::EAlphaIdProvided !=
hgs
parents:
diff changeset
   250
                     iSetUpCallData.iAlphaIdCallSetUpPhase.iStatus ) &&
hgs
parents:
diff changeset
   251
               ( ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   252
                       iSetUpCallData.iIconIdCallSetUpPhase.iQualifier ) ||
hgs
parents:
diff changeset
   253
                 ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   254
                       iSetUpCallData.iIconIdCallSetUpPhase.iQualifier ) ) ) )
hgs
parents:
diff changeset
   255
            {
hgs
parents:
diff changeset
   256
            // Icon data is received without alpha id.
hgs
parents:
diff changeset
   257
            CompleteSetupCall( RSat::KCmdDataNotUnderstood );
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
            commandAllowed = EFalse;
hgs
parents:
diff changeset
   260
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   261
            "SETUPCALL: CSetUpCallHandler::CommandAllowed Icon received \
hgs
parents:
diff changeset
   262
            without alpha id" )
hgs
parents:
diff changeset
   263
            }
hgs
parents:
diff changeset
   264
        else if ( ( RMobilePhone::ERegisteredOnHomeNetwork != networkStatus ) &&
hgs
parents:
diff changeset
   265
                  ( RMobilePhone::ERegisteredRoaming != networkStatus ) )
hgs
parents:
diff changeset
   266
            {
hgs
parents:
diff changeset
   267
            // Not registered to network.
hgs
parents:
diff changeset
   268
            CompleteSetupCall( RSat::KMeUnableToProcessCmd, RSat::KNoService );
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
            commandAllowed = EFalse;
hgs
parents:
diff changeset
   271
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   272
            "SETUPCALL: CSetUpCallHandler::CommandAllowed Registration not \
hgs
parents:
diff changeset
   273
            valid" )
hgs
parents:
diff changeset
   274
            }
hgs
parents:
diff changeset
   275
        else
hgs
parents:
diff changeset
   276
            {
hgs
parents:
diff changeset
   277
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   278
            "SETUPCALL: CSetUpCallHandler::CommandAllowed others" )
hgs
parents:
diff changeset
   279
            // Call type
hgs
parents:
diff changeset
   280
            const RSat::TSetUpCallType callType( iSetUpCallData.iType );
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
            // Command does not allow to make a call if busy
hgs
parents:
diff changeset
   283
            const TBool dontMakeCallIfBusy(
hgs
parents:
diff changeset
   284
                ( RSat::EOnlyIfNotBusy == callType ) ||
hgs
parents:
diff changeset
   285
                ( RSat::EOnlyIfNotBusyWithRedial == callType ) ||
hgs
parents:
diff changeset
   286
                ( RSat::ESetUpCallTypeNotSet == callType ) );
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
            if ( dontMakeCallIfBusy )
hgs
parents:
diff changeset
   289
                {
hgs
parents:
diff changeset
   290
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   291
                "SETUPCALL: CSetUpCallHandler::CommandAllowed \
hgs
parents:
diff changeset
   292
                dontMakeCallIfBusy true" )
hgs
parents:
diff changeset
   293
                // Is the call ongoing
hgs
parents:
diff changeset
   294
                const TBool callIsOngoing(
hgs
parents:
diff changeset
   295
                    iUtils->SystemState().IsCallActive() );
hgs
parents:
diff changeset
   296
hgs
parents:
diff changeset
   297
                // Is the call incoming
hgs
parents:
diff changeset
   298
                const TBool callIsIncoming(
hgs
parents:
diff changeset
   299
                    iUtils->SystemState().IsCallIncoming() );
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
                if ( callIsOngoing || callIsIncoming )
hgs
parents:
diff changeset
   302
                    {
hgs
parents:
diff changeset
   303
                    // Set the terminal response info.
hgs
parents:
diff changeset
   304
                    CompleteSetupCall(
hgs
parents:
diff changeset
   305
                        RSat::KMeUnableToProcessCmd,
hgs
parents:
diff changeset
   306
                        RSat::KMeBusyOnCall );
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
                    commandAllowed = EFalse;
hgs
parents:
diff changeset
   309
                    LOG( SIMPLE, 
hgs
parents:
diff changeset
   310
                    "SETUPCALL: CSetUpCallHandler::CommandAllowed Busy" )
hgs
parents:
diff changeset
   311
                    }
hgs
parents:
diff changeset
   312
                }
hgs
parents:
diff changeset
   313
            }
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
        if ( commandAllowed )
hgs
parents:
diff changeset
   316
            {
hgs
parents:
diff changeset
   317
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   318
            "SETUPCALL: CSetUpCallHandler::CommandAllowed Allowed to call" )
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
            // Set icon command flag whether icon data was received and
hgs
parents:
diff changeset
   321
            // set qualifier to no icon id
hgs
parents:
diff changeset
   322
            // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
   323
            if ( ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   324
                     iSetUpCallData.iIconIdConfirmationPhase.iQualifier ) ||
hgs
parents:
diff changeset
   325
                 ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   326
                     iSetUpCallData.iIconIdConfirmationPhase.iQualifier ) ||
hgs
parents:
diff changeset
   327
                 ( RSat::ESelfExplanatory ==
hgs
parents:
diff changeset
   328
                     iSetUpCallData.iIconIdCallSetUpPhase.iQualifier ) ||
hgs
parents:
diff changeset
   329
                 ( RSat::ENotSelfExplanatory ==
hgs
parents:
diff changeset
   330
                     iSetUpCallData.iIconIdCallSetUpPhase.iQualifier ) )
hgs
parents:
diff changeset
   331
                {
hgs
parents:
diff changeset
   332
                LOG( SIMPLE, "SETUPCALL:   ENoIconId" )
hgs
parents:
diff changeset
   333
                iIconCommand = ETrue;
hgs
parents:
diff changeset
   334
                iSetUpCallData.iIconIdConfirmationPhase.iQualifier =
hgs
parents:
diff changeset
   335
                    RSat::ENoIconId;
hgs
parents:
diff changeset
   336
                iSetUpCallData.iIconIdCallSetUpPhase.iQualifier =
hgs
parents:
diff changeset
   337
                    RSat::ENoIconId;
hgs
parents:
diff changeset
   338
                }
hgs
parents:
diff changeset
   339
            else
hgs
parents:
diff changeset
   340
                {
hgs
parents:
diff changeset
   341
                iIconCommand = EFalse;
hgs
parents:
diff changeset
   342
                }
hgs
parents:
diff changeset
   343
            }
hgs
parents:
diff changeset
   344
        }
hgs
parents:
diff changeset
   345
    else
hgs
parents:
diff changeset
   346
        {
hgs
parents:
diff changeset
   347
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   348
        "SETUPCALL: CSetUpCallHandler::CommandAllowed Emergency call" )
hgs
parents:
diff changeset
   349
        }
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CommandAllowed exiting" )
hgs
parents:
diff changeset
   352
    
hgs
parents:
diff changeset
   353
    return commandAllowed;
hgs
parents:
diff changeset
   354
    }
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   357
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   358
// Need for ui session.
hgs
parents:
diff changeset
   359
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   360
//
hgs
parents:
diff changeset
   361
TBool CSetUpCallHandler::NeedUiSession()
hgs
parents:
diff changeset
   362
    {
hgs
parents:
diff changeset
   363
    LOG( NORMAL, "SETUPCALL: CSetUpCallHandler::NeedUiSession calling" )
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
    // Notify Cover UI if it's supported
hgs
parents:
diff changeset
   366
    if ( iUtils->CoverUiSupported() )
hgs
parents:
diff changeset
   367
        {
hgs
parents:
diff changeset
   368
        LOG( NORMAL, 
hgs
parents:
diff changeset
   369
        "SETUPCALL: CSetUpCallHandler::NeedUiSession CoverUiSupported" )
hgs
parents:
diff changeset
   370
        TSatCommandData medEventData;
hgs
parents:
diff changeset
   371
        medEventData.iPCmdNumber = RSat::ESetUpCall;
hgs
parents:
diff changeset
   372
        medEventData.iAlphaId = iSetUpCallData.iAlphaIdCallSetUpPhase;
hgs
parents:
diff changeset
   373
        medEventData.iDuration.iTimeUnit = RSat::ESeconds;
hgs
parents:
diff changeset
   374
        medEventData.iDuration.iNumOfUnits = KSatDefaultDuration;
hgs
parents:
diff changeset
   375
        medEventData.iIconID = iSetUpCallData.iIconIdCallSetUpPhase;
hgs
parents:
diff changeset
   376
        TSatCommandPckg tPckg( medEventData );
hgs
parents:
diff changeset
   377
        iUtils->RaiseSatEvent( tPckg );
hgs
parents:
diff changeset
   378
        }
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
    LOG( NORMAL, "SETUPCALL: CSetUpCallHandler::NeedUiSession exiting" )
hgs
parents:
diff changeset
   381
    return ETrue;
hgs
parents:
diff changeset
   382
    }
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   385
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   386
// Called when USAT API notifies that command.
hgs
parents:
diff changeset
   387
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   388
//
hgs
parents:
diff changeset
   389
void CSetUpCallHandler::HandleCommand()
hgs
parents:
diff changeset
   390
    {
hgs
parents:
diff changeset
   391
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::HandleCommand calling" )
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
    if ( iEmergencyCall )
hgs
parents:
diff changeset
   394
        {
hgs
parents:
diff changeset
   395
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   396
        "SETUPCALL: CSetUpCallHandler::HandleCommand iEmergencyCall true" )
hgs
parents:
diff changeset
   397
        if ( iRequestHandler )
hgs
parents:
diff changeset
   398
            {
hgs
parents:
diff changeset
   399
            CreateEmergencyCall( *iRequestHandler );
hgs
parents:
diff changeset
   400
            }
hgs
parents:
diff changeset
   401
        else
hgs
parents:
diff changeset
   402
            {
hgs
parents:
diff changeset
   403
            iEmergencyCall = EFalse;
hgs
parents:
diff changeset
   404
            // Set the terminal response info.
hgs
parents:
diff changeset
   405
            CompleteSetupCall(
hgs
parents:
diff changeset
   406
                RSat::KMeUnableToProcessCmd,
hgs
parents:
diff changeset
   407
                RSat::KNoSpecificMeProblem );
hgs
parents:
diff changeset
   408
            }
hgs
parents:
diff changeset
   409
        }
hgs
parents:
diff changeset
   410
    else
hgs
parents:
diff changeset
   411
        {
hgs
parents:
diff changeset
   412
        const RSat::TAlphaIdStatus alphaIdStatus(
hgs
parents:
diff changeset
   413
            iSetUpCallData.iAlphaIdCallSetUpPhase.iStatus );
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
        // If the alpha id is null, then use SAT name as a alpha identifier.
hgs
parents:
diff changeset
   416
        if ( ( RSat::EAlphaIdNull == alphaIdStatus )  ||
hgs
parents:
diff changeset
   417
             ( RSat::EAlphaIdNotPresent == alphaIdStatus ) )
hgs
parents:
diff changeset
   418
            {
hgs
parents:
diff changeset
   419
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   420
            "SETUPCALL: CSetUpCallHandler::HandleCommand set AlphaId" )
hgs
parents:
diff changeset
   421
            iSetUpCallData.iAlphaIdCallSetUpPhase.iAlphaId =
hgs
parents:
diff changeset
   422
                iUtils->SatAppName();
hgs
parents:
diff changeset
   423
            iSetUpCallData.iAlphaIdCallSetUpPhase.iStatus =
hgs
parents:
diff changeset
   424
                RSat::EAlphaIdProvided;
hgs
parents:
diff changeset
   425
            }
hgs
parents:
diff changeset
   426
hgs
parents:
diff changeset
   427
        // Copy the data to package, which is sent to client.
hgs
parents:
diff changeset
   428
        iQueryData.iCommand = ESatSSetUpCallQuery;
hgs
parents:
diff changeset
   429
        iQueryData.iQueryText.Copy(
hgs
parents:
diff changeset
   430
            iSetUpCallData.iAlphaIdConfirmationPhase.iAlphaId );
hgs
parents:
diff changeset
   431
        iQueryData.iSimApplicationName.Copy( iUtils->SatAppName() );
hgs
parents:
diff changeset
   432
        iQueryData.iAlphaIdStatus = ESatAlphaIdNotNull; // Always
hgs
parents:
diff changeset
   433
        iQueryData.iIconId.iIdentifier =
hgs
parents:
diff changeset
   434
            iSetUpCallData.iIconIdConfirmationPhase.iIdentifier;
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   437
        "SETUPCALL: iSetUpCallData.iIconIdConfirmationPhase.iQualifier: %d",
hgs
parents:
diff changeset
   438
        iSetUpCallData.iIconIdConfirmationPhase.iQualifier )
hgs
parents:
diff changeset
   439
        switch ( iSetUpCallData.iIconIdConfirmationPhase.iQualifier )
hgs
parents:
diff changeset
   440
            {
hgs
parents:
diff changeset
   441
            case RSat::ESelfExplanatory:
hgs
parents:
diff changeset
   442
                {
hgs
parents:
diff changeset
   443
                // Icon qualifier is self explanatory (to display instead
hgs
parents:
diff changeset
   444
                // of the alpha id or text string).
hgs
parents:
diff changeset
   445
                iQueryData.iIconId.iIconQualifier = ESatSelfExplanatory;
hgs
parents:
diff changeset
   446
                break;
hgs
parents:
diff changeset
   447
                }
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
            case RSat::ENotSelfExplanatory:
hgs
parents:
diff changeset
   450
                {
hgs
parents:
diff changeset
   451
                // Icon qualifier is not self explanatory.
hgs
parents:
diff changeset
   452
                iQueryData.iIconId.iIconQualifier = ESatNotSelfExplanatory;
hgs
parents:
diff changeset
   453
                break;
hgs
parents:
diff changeset
   454
                }
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
            default:
hgs
parents:
diff changeset
   457
                {
hgs
parents:
diff changeset
   458
                // Icon qualifier not present
hgs
parents:
diff changeset
   459
                iQueryData.iIconId.iIconQualifier = ESatENoIconId;
hgs
parents:
diff changeset
   460
                break;
hgs
parents:
diff changeset
   461
                }
hgs
parents:
diff changeset
   462
            }
hgs
parents:
diff changeset
   463
hgs
parents:
diff changeset
   464
        // If call control is active, set up call is made
hgs
parents:
diff changeset
   465
        // after the call control note is showed in ui ie
hgs
parents:
diff changeset
   466
        // ECallControlDone event is notified.
hgs
parents:
diff changeset
   467
        if ( !iCallControlActive )
hgs
parents:
diff changeset
   468
            {
hgs
parents:
diff changeset
   469
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   470
            "SETUPCALL: CSetUpCallHandler::HandleCommand iCallControlActive \
hgs
parents:
diff changeset
   471
            false" )
hgs
parents:
diff changeset
   472
            iUtils->NotifyEvent( MSatUtils::ESetUpCallExecuting );
hgs
parents:
diff changeset
   473
hgs
parents:
diff changeset
   474
            TRAPD( regErr, iUtils->RegisterServiceRequestL(
hgs
parents:
diff changeset
   475
                ESatSProactiveQuery,
hgs
parents:
diff changeset
   476
                ESatSProactiveQueryResponse,
hgs
parents:
diff changeset
   477
                this ) );
hgs
parents:
diff changeset
   478
            LOG2( SIMPLE, 
hgs
parents:
diff changeset
   479
            "SETUPCALL: CSetUpCallHandler::HandleCommand regErr: %d", regErr )
hgs
parents:
diff changeset
   480
            if ( KErrNone != regErr )
hgs
parents:
diff changeset
   481
                {
hgs
parents:
diff changeset
   482
                // Possible memory allocation error. Send error terminal
hgs
parents:
diff changeset
   483
                // response
hgs
parents:
diff changeset
   484
                UiLaunchFailed();
hgs
parents:
diff changeset
   485
                }
hgs
parents:
diff changeset
   486
            else
hgs
parents:
diff changeset
   487
                {
hgs
parents:
diff changeset
   488
                // Send query to UI
hgs
parents:
diff changeset
   489
                iUtils->SatUiHandler().UiSession()->SendCommand(
hgs
parents:
diff changeset
   490
                    &iQueryPckg,
hgs
parents:
diff changeset
   491
                    &iQueryRspPckg,
hgs
parents:
diff changeset
   492
                    ESatSProactiveQuery );
hgs
parents:
diff changeset
   493
                }
hgs
parents:
diff changeset
   494
            }
hgs
parents:
diff changeset
   495
        else
hgs
parents:
diff changeset
   496
            {
hgs
parents:
diff changeset
   497
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   498
            "SETUPCALL: CSetUpCallHandler::HandleCommand iCallControlActive \
hgs
parents:
diff changeset
   499
            true" )
hgs
parents:
diff changeset
   500
            // Set pending flag on
hgs
parents:
diff changeset
   501
            iPCmdPending = ETrue;
hgs
parents:
diff changeset
   502
            }
hgs
parents:
diff changeset
   503
        }
hgs
parents:
diff changeset
   504
hgs
parents:
diff changeset
   505
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::HandleCommand exiting" )
hgs
parents:
diff changeset
   506
    }
hgs
parents:
diff changeset
   507
hgs
parents:
diff changeset
   508
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   509
// From class CSatCommandHandler.
hgs
parents:
diff changeset
   510
// Indication that UI lanching failed.
hgs
parents:
diff changeset
   511
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   512
//
hgs
parents:
diff changeset
   513
void CSetUpCallHandler::UiLaunchFailed()
hgs
parents:
diff changeset
   514
    {
hgs
parents:
diff changeset
   515
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::UiLaunchFailed calling" )
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
    CompleteSetupCall( RSat::KMeUnableToProcessCmd, 
hgs
parents:
diff changeset
   518
                       RSat::KNoSpecificMeProblem );
hgs
parents:
diff changeset
   519
hgs
parents:
diff changeset
   520
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::UiLaunchFailed exiting" )
hgs
parents:
diff changeset
   521
    }
hgs
parents:
diff changeset
   522
hgs
parents:
diff changeset
   523
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   524
// CSetUpCallHandler::SetupCallRequestComplete
hgs
parents:
diff changeset
   525
// (other items were commented in a header).
hgs
parents:
diff changeset
   526
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   527
//
hgs
parents:
diff changeset
   528
void CSetUpCallHandler::SetupCallRequestComplete( TInt aErrCode )
hgs
parents:
diff changeset
   529
    {
hgs
parents:
diff changeset
   530
    LOG( SIMPLE,
hgs
parents:
diff changeset
   531
    "SETUPCALL: CSetUpCallHandler::SetupCallRequestComplete calling" )
hgs
parents:
diff changeset
   532
hgs
parents:
diff changeset
   533
    LOG2( NORMAL,
hgs
parents:
diff changeset
   534
    "SETUPCALL: CSetUpCallHandler::SetupCallRequestComplete aErrCode %d",
hgs
parents:
diff changeset
   535
    aErrCode )
hgs
parents:
diff changeset
   536
    
hgs
parents:
diff changeset
   537
    if( !iEmergencyCall )
hgs
parents:
diff changeset
   538
        {
hgs
parents:
diff changeset
   539
        CompleteSetupCallWithStatus( aErrCode );
hgs
parents:
diff changeset
   540
        }
hgs
parents:
diff changeset
   541
    else
hgs
parents:
diff changeset
   542
        {
hgs
parents:
diff changeset
   543
        iEmergencyCall = EFalse;
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
        if ( KErrNone == aErrCode )
hgs
parents:
diff changeset
   546
            {
hgs
parents:
diff changeset
   547
            // Set result
hgs
parents:
diff changeset
   548
            CompleteSetupCall( RSat::KSuccess );
hgs
parents:
diff changeset
   549
            }
hgs
parents:
diff changeset
   550
        else
hgs
parents:
diff changeset
   551
            {
hgs
parents:
diff changeset
   552
            // The emergency call implementation 
hgs
parents:
diff changeset
   553
            // before S60 SAT migration from AIW to EtelMM
hgs
parents:
diff changeset
   554
            // According current information, no requirement for this.
hgs
parents:
diff changeset
   555
            // We don't return extended network error.
hgs
parents:
diff changeset
   556
            CompleteSetupCall(
hgs
parents:
diff changeset
   557
                RSat::KNetworkUnableToProcessCmd,
hgs
parents:
diff changeset
   558
                RSat::KNoSpecificMeProblem );
hgs
parents:
diff changeset
   559
hgs
parents:
diff changeset
   560
            LOG( SIMPLE,
hgs
parents:
diff changeset
   561
            "SETUPCALL: CSetUpCallHandler::HandleEmergencyDialL Network unable \
hgs
parents:
diff changeset
   562
            to process this" )
hgs
parents:
diff changeset
   563
            }
hgs
parents:
diff changeset
   564
        }
hgs
parents:
diff changeset
   565
    LOG2( NORMAL,
hgs
parents:
diff changeset
   566
        "SETUPCALL: CSetUpCallHandler::SetupCallRequestComplete exiting %d", aErrCode )
hgs
parents:
diff changeset
   567
    }
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   570
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
   571
// might leave.
hgs
parents:
diff changeset
   572
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   573
//
hgs
parents:
diff changeset
   574
//lint -e{1403, 1769} Can not be initialized, harmless.
hgs
parents:
diff changeset
   575
CSetUpCallHandler::CSetUpCallHandler() :
hgs
parents:
diff changeset
   576
    CSatCommandHandler(),
hgs
parents:
diff changeset
   577
    iSetUpCallData(),
hgs
parents:
diff changeset
   578
    iSetUpCallPckg( iSetUpCallData ),
hgs
parents:
diff changeset
   579
    iSetUpCallRsp(),
hgs
parents:
diff changeset
   580
    iSetUpCallRspPckg( iSetUpCallRsp ),
hgs
parents:
diff changeset
   581
    iQueryData(),
hgs
parents:
diff changeset
   582
    iQueryPckg( iQueryData ),
hgs
parents:
diff changeset
   583
    iQueryRsp(),
hgs
parents:
diff changeset
   584
    iQueryRspPckg( iQueryRsp ),
hgs
parents:
diff changeset
   585
    // To be removed when icons are allowed in this command
hgs
parents:
diff changeset
   586
    iIconCommand( EFalse )
hgs
parents:
diff changeset
   587
    {
hgs
parents:
diff changeset
   588
    LOG( SIMPLE,
hgs
parents:
diff changeset
   589
        "SETUPCALL: CSetUpCallHandler::CSetUpCallHandler calling - exiting" )
hgs
parents:
diff changeset
   590
    }
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   593
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
   594
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   595
//
hgs
parents:
diff changeset
   596
void CSetUpCallHandler::ConstructL()
hgs
parents:
diff changeset
   597
    {
hgs
parents:
diff changeset
   598
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::ConstructL calling" )
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
    
hgs
parents:
diff changeset
   601
    iRequestHandler = CSetupCallRequestHandler::NewL( iUtils->MultiModeApi(),
hgs
parents:
diff changeset
   602
            this ); 
hgs
parents:
diff changeset
   603
    // Create request handler. This is same that LaunchBrowser uses, so this
hgs
parents:
diff changeset
   604
    // is needed also in HandleCommand - function.
hgs
parents:
diff changeset
   605
    iUtils->RegisterServiceRequestL(
hgs
parents:
diff changeset
   606
        ESatSProactiveQuery,
hgs
parents:
diff changeset
   607
        ESatSProactiveQueryResponse,
hgs
parents:
diff changeset
   608
        this );
hgs
parents:
diff changeset
   609
hgs
parents:
diff changeset
   610
    iUtils->RegisterL( this, MSatUtils::ECallControlExecuting );
hgs
parents:
diff changeset
   611
    iUtils->RegisterL( this, MSatUtils::ECallControlDone );
hgs
parents:
diff changeset
   612
hgs
parents:
diff changeset
   613
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::ConstructL exiting" )
hgs
parents:
diff changeset
   614
    }
hgs
parents:
diff changeset
   615
hgs
parents:
diff changeset
   616
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   617
// Performs the request to dial
hgs
parents:
diff changeset
   618
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   619
//
hgs
parents:
diff changeset
   620
void CSetUpCallHandler::DoSetupCall( CSetupCallRequestHandler& aHandler )
hgs
parents:
diff changeset
   621
    {
hgs
parents:
diff changeset
   622
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::DoSetupCallL calling" )
hgs
parents:
diff changeset
   623
    
hgs
parents:
diff changeset
   624
    if( CheckSetupCallParam() )
hgs
parents:
diff changeset
   625
        {
hgs
parents:
diff changeset
   626
hgs
parents:
diff changeset
   627
        RSat::TSetUpCallType callType( iSetUpCallData.iType );
hgs
parents:
diff changeset
   628
    
hgs
parents:
diff changeset
   629
        TDes& telNumber( iSetUpCallData.iAddress.iTelNumber );
hgs
parents:
diff changeset
   630
        CheckNumber( telNumber );
hgs
parents:
diff changeset
   631
hgs
parents:
diff changeset
   632
        RMobileCall::TMobileCallParamsV7 dialParams;
hgs
parents:
diff changeset
   633
        RMobileCall::TMobileCallParamsV7Pckg package( dialParams );
hgs
parents:
diff changeset
   634
    
hgs
parents:
diff changeset
   635
        //Redail has been removed from MCL, no redail support.
hgs
parents:
diff changeset
   636
        dialParams.iAutoRedial = EFalse;
hgs
parents:
diff changeset
   637
        dialParams.iBearerMode = RMobileCall::EMulticallNewBearer;
hgs
parents:
diff changeset
   638
        dialParams.iCallParamOrigin = RMobileCall::EOriginatorSIM;
hgs
parents:
diff changeset
   639
        dialParams.iSubAddress = iSetUpCallData.iSubAddress;
hgs
parents:
diff changeset
   640
        dialParams.iBearerCap1 = iSetUpCallData.iCapabilityConfigParams;
hgs
parents:
diff changeset
   641
        
hgs
parents:
diff changeset
   642
        dialParams.iBCRepeatIndicator = RMobileCall::EBCAlternateMode;
hgs
parents:
diff changeset
   643
        
hgs
parents:
diff changeset
   644
        dialParams.iIconId.iQualifier = RMobileCall::ENoIconId;
hgs
parents:
diff changeset
   645
        
hgs
parents:
diff changeset
   646
        
hgs
parents:
diff changeset
   647
        dialParams.iAlphaId = iSetUpCallData.iAlphaIdCallSetUpPhase.iAlphaId;
hgs
parents:
diff changeset
   648
        LOG2( NORMAL, 
hgs
parents:
diff changeset
   649
            "SETUPCALL: CSetUpCallHandler::DoSetupCallL id:%S",
hgs
parents:
diff changeset
   650
            &dialParams.iAlphaId )
hgs
parents:
diff changeset
   651
        
hgs
parents:
diff changeset
   652
        LOG2( NORMAL, 
hgs
parents:
diff changeset
   653
            "SETUPCALL: CSetUpCallHandler::DoSetupCallL number:%S",
hgs
parents:
diff changeset
   654
            &iSetUpCallData.iAddress.iTelNumber )
hgs
parents:
diff changeset
   655
        
hgs
parents:
diff changeset
   656
        TBool terminateOtherCall( EFalse );
hgs
parents:
diff changeset
   657
        // check if we need to disconnect other calls
hgs
parents:
diff changeset
   658
        if ( ( RSat::EDisconnectOtherCalls == callType ) ||
hgs
parents:
diff changeset
   659
             ( RSat::EDisconnectOtherCallsWithRedial == callType ) )
hgs
parents:
diff changeset
   660
            {
hgs
parents:
diff changeset
   661
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   662
            "SETUPCALL: CSetUpCallHandler::DoSetupCallL end other call" )
hgs
parents:
diff changeset
   663
            terminateOtherCall = ETrue ;
hgs
parents:
diff changeset
   664
            }
hgs
parents:
diff changeset
   665
        
hgs
parents:
diff changeset
   666
        aHandler.DialNumber( package, iSetUpCallData.iAddress.iTelNumber,
hgs
parents:
diff changeset
   667
                terminateOtherCall, iUtils->CreateAsyncToSyncHelper() );
hgs
parents:
diff changeset
   668
        }
hgs
parents:
diff changeset
   669
    else
hgs
parents:
diff changeset
   670
        {
hgs
parents:
diff changeset
   671
        CompleteSetupCallWithStatus( KErrArgument );
hgs
parents:
diff changeset
   672
        }
hgs
parents:
diff changeset
   673
    
hgs
parents:
diff changeset
   674
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::DoSetupCallL exiting" )
hgs
parents:
diff changeset
   675
    }
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   678
// Return terminal response filled according to dial result.
hgs
parents:
diff changeset
   679
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   680
//
hgs
parents:
diff changeset
   681
void CSetUpCallHandler::CompleteSetupCallWithStatus(
hgs
parents:
diff changeset
   682
    const TInt32 aStatus )
hgs
parents:
diff changeset
   683
    {
hgs
parents:
diff changeset
   684
    LOG2( SIMPLE,
hgs
parents:
diff changeset
   685
        "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus calling: \
hgs
parents:
diff changeset
   686
        %i", aStatus )
hgs
parents:
diff changeset
   687
hgs
parents:
diff changeset
   688
    // Form Terminal Response
hgs
parents:
diff changeset
   689
    if ( KErrNone != aStatus )
hgs
parents:
diff changeset
   690
        {
hgs
parents:
diff changeset
   691
        switch ( aStatus )
hgs
parents:
diff changeset
   692
            {
hgs
parents:
diff changeset
   693
            case KErrGsmCCCallRejected:
hgs
parents:
diff changeset
   694
                {
hgs
parents:
diff changeset
   695
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   696
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus Call \
hgs
parents:
diff changeset
   697
                Control not allowed" )
hgs
parents:
diff changeset
   698
                // If SetUpCall is not allowed by SIM in Call Control, then
hgs
parents:
diff changeset
   699
                // give a correct response.
hgs
parents:
diff changeset
   700
                CompleteSetupCall(
hgs
parents:
diff changeset
   701
                    RSat::KInteractionWithCCPermanentError,
hgs
parents:
diff changeset
   702
                    RSat::KActionNotAllowed );
hgs
parents:
diff changeset
   703
                break;
hgs
parents:
diff changeset
   704
                }
hgs
parents:
diff changeset
   705
hgs
parents:
diff changeset
   706
            case KErrGsmCCBearerCapabilityNotAuthorised:
hgs
parents:
diff changeset
   707
                {
hgs
parents:
diff changeset
   708
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   709
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   710
                Beyond ME Capabilities" )
hgs
parents:
diff changeset
   711
                // If bearer capability is not authorized, return correct value
hgs
parents:
diff changeset
   712
                CompleteSetupCall( RSat::KCmdBeyondMeCapabilities );
hgs
parents:
diff changeset
   713
                break;
hgs
parents:
diff changeset
   714
                }
hgs
parents:
diff changeset
   715
hgs
parents:
diff changeset
   716
            case KErrAbort:
hgs
parents:
diff changeset
   717
                {
hgs
parents:
diff changeset
   718
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   719
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus User \
hgs
parents:
diff changeset
   720
                abort" )
hgs
parents:
diff changeset
   721
                if ( iQueryRsp.iSessionTerminatedByUser )
hgs
parents:
diff changeset
   722
                    {
hgs
parents:
diff changeset
   723
                    LOG( SIMPLE, 
hgs
parents:
diff changeset
   724
                    "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   725
                    TerminatedByUser" )
hgs
parents:
diff changeset
   726
                    // Notify sim session end command that next sim session end
hgs
parents:
diff changeset
   727
                    // should close the ui session.
hgs
parents:
diff changeset
   728
                    iUtils->NotifyEvent( MSatUtils::ESessionTerminatedByUser );
hgs
parents:
diff changeset
   729
                    }
hgs
parents:
diff changeset
   730
hgs
parents:
diff changeset
   731
                // User has ended redial mechanism.
hgs
parents:
diff changeset
   732
                CompleteSetupCall( RSat::KCallClearedBeforeConnectionOrReleased );
hgs
parents:
diff changeset
   733
                break;
hgs
parents:
diff changeset
   734
                }
hgs
parents:
diff changeset
   735
hgs
parents:
diff changeset
   736
            case KErrGeneral:
hgs
parents:
diff changeset
   737
            case KErrArgument:
hgs
parents:
diff changeset
   738
                {
hgs
parents:
diff changeset
   739
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   740
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus Data \
hgs
parents:
diff changeset
   741
                not understood" )
hgs
parents:
diff changeset
   742
                CompleteSetupCall( RSat::KCmdDataNotUnderstood );
hgs
parents:
diff changeset
   743
                break;
hgs
parents:
diff changeset
   744
                }
hgs
parents:
diff changeset
   745
hgs
parents:
diff changeset
   746
            case KErrAccessDenied:
hgs
parents:
diff changeset
   747
                {
hgs
parents:
diff changeset
   748
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   749
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   750
                Network unable to process this" )
hgs
parents:
diff changeset
   751
                CompleteSetupCall(
hgs
parents:
diff changeset
   752
                    RSat::KNetworkUnableToProcessCmd,
hgs
parents:
diff changeset
   753
                    RSat::KNoSpecificMeProblem );
hgs
parents:
diff changeset
   754
                break;
hgs
parents:
diff changeset
   755
                }
hgs
parents:
diff changeset
   756
                
hgs
parents:
diff changeset
   757
            case KErrSatControl:
hgs
parents:
diff changeset
   758
                {
hgs
parents:
diff changeset
   759
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   760
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   761
                Call Command performed, but modified by Call Control" )
hgs
parents:
diff changeset
   762
                // Call control modified the type of request indicated in
hgs
parents:
diff changeset
   763
                // the proactive command, and the action requested by 
hgs
parents:
diff changeset
   764
                // call control was performed successfully.
hgs
parents:
diff changeset
   765
                CompleteSetupCall( RSat::KModifiedByCallControl );
hgs
parents:
diff changeset
   766
                break;
hgs
parents:
diff changeset
   767
                }
46
hgs
parents: 33
diff changeset
   768
            case KErrSatBusy:
hgs
parents: 33
diff changeset
   769
                {
hgs
parents: 33
diff changeset
   770
                LOG( SIMPLE, 
hgs
parents: 33
diff changeset
   771
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents: 33
diff changeset
   772
                KInteractionWithCCTemporaryError" )
hgs
parents: 33
diff changeset
   773
                // Call control some time can case this error.
hgs
parents: 33
diff changeset
   774
                CompleteSetupCall( RSat::KInteractionWithCCTemporaryError );
hgs
parents: 33
diff changeset
   775
                break;
hgs
parents: 33
diff changeset
   776
                }
33
hgs
parents:
diff changeset
   777
                
hgs
parents:
diff changeset
   778
            default:
hgs
parents:
diff changeset
   779
                {
hgs
parents:
diff changeset
   780
                LOG( SIMPLE,
hgs
parents:
diff changeset
   781
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   782
                Network unable to process with error info" )
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
                iSetUpCallRsp.iGeneralResult = RSat::KNetworkUnableToProcessCmd;
hgs
parents:
diff changeset
   785
                iSetUpCallRsp.iInfoType = RSat::KSatNetworkErrorInfo;
hgs
parents:
diff changeset
   786
hgs
parents:
diff changeset
   787
                // Lower byte contains the error cause.
hgs
parents:
diff changeset
   788
                iSetUpCallRsp.iAdditionalInfo.SetLength( 1 );
hgs
parents:
diff changeset
   789
hgs
parents:
diff changeset
   790
                // Get mapped additional info
hgs
parents:
diff changeset
   791
                TUint8 addInfo( TSatExtErrorUtils::MapError( aStatus ) );
hgs
parents:
diff changeset
   792
                iSetUpCallRsp.iAdditionalInfo[0] =
hgs
parents:
diff changeset
   793
                    static_cast<TUint16>( addInfo );
hgs
parents:
diff changeset
   794
hgs
parents:
diff changeset
   795
                // Send terminal response
hgs
parents:
diff changeset
   796
                TerminalRsp( RSat::ESetUpCall, iSetUpCallRspPckg );
hgs
parents:
diff changeset
   797
                break;
hgs
parents:
diff changeset
   798
                }
hgs
parents:
diff changeset
   799
            }
hgs
parents:
diff changeset
   800
        }
hgs
parents:
diff changeset
   801
    else
hgs
parents:
diff changeset
   802
        {
hgs
parents:
diff changeset
   803
        // Convert terminal rsp if icon used
hgs
parents:
diff changeset
   804
        RSat::TIconQualifier qualifier1(
hgs
parents:
diff changeset
   805
            iSetUpCallData.iIconIdConfirmationPhase.iQualifier );
hgs
parents:
diff changeset
   806
        RSat::TIconQualifier qualifier2(
hgs
parents:
diff changeset
   807
            iSetUpCallData.iIconIdCallSetUpPhase.iQualifier );
hgs
parents:
diff changeset
   808
hgs
parents:
diff changeset
   809
        RSat::TPCmdResult result( RSat::KSuccess );
hgs
parents:
diff changeset
   810
hgs
parents:
diff changeset
   811
        // Icon support for call confirmtion phase not done.
hgs
parents:
diff changeset
   812
        if ( !iQueryRsp.iRequestedIconDisplayed &&
hgs
parents:
diff changeset
   813
           ( ( RSat::ESelfExplanatory == qualifier1 ) ||
hgs
parents:
diff changeset
   814
             ( RSat::ENotSelfExplanatory == qualifier1 ) ) )
hgs
parents:
diff changeset
   815
            {
hgs
parents:
diff changeset
   816
            result = RSat::KSuccessRequestedIconNotDisplayed;
hgs
parents:
diff changeset
   817
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   818
            "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   819
            Confirmation icon not shown" )
hgs
parents:
diff changeset
   820
            }
hgs
parents:
diff changeset
   821
        // Icon support for call setup phase not done.
hgs
parents:
diff changeset
   822
        else if ( ( RSat::ESelfExplanatory == qualifier2 ) ||
hgs
parents:
diff changeset
   823
                  ( RSat::ENotSelfExplanatory == qualifier2 ) )
hgs
parents:
diff changeset
   824
            {
hgs
parents:
diff changeset
   825
            // Until 2009-10 the phone and NTSY not support the icon.
hgs
parents:
diff changeset
   826
            // to be updated after the updating of the phone and NTSY
hgs
parents:
diff changeset
   827
            result = RSat::KSuccessRequestedIconNotDisplayed;
hgs
parents:
diff changeset
   828
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   829
            "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus Icon \
hgs
parents:
diff changeset
   830
            not shown" )
hgs
parents:
diff changeset
   831
            }
hgs
parents:
diff changeset
   832
        // If command had icon data and was done succesfully, report that icon
hgs
parents:
diff changeset
   833
        // was not shown.
hgs
parents:
diff changeset
   834
        // To be removed when icons are allowed in this command.
hgs
parents:
diff changeset
   835
        else
hgs
parents:
diff changeset
   836
            {
hgs
parents:
diff changeset
   837
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   838
            "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   839
            others" )
hgs
parents:
diff changeset
   840
            if ( iIconCommand )
hgs
parents:
diff changeset
   841
                {
hgs
parents:
diff changeset
   842
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   843
                "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus \
hgs
parents:
diff changeset
   844
                iIconCommand true" )
hgs
parents:
diff changeset
   845
                result = RSat::KSuccessRequestedIconNotDisplayed;
hgs
parents:
diff changeset
   846
                }
hgs
parents:
diff changeset
   847
            }
hgs
parents:
diff changeset
   848
        // Set result
hgs
parents:
diff changeset
   849
        CompleteSetupCall( result );
hgs
parents:
diff changeset
   850
        }
hgs
parents:
diff changeset
   851
hgs
parents:
diff changeset
   852
    LOG( SIMPLE,
hgs
parents:
diff changeset
   853
        "SETUPCALL: CSetUpCallHandler::CompleteSetupCallWithStatus exiting" )
hgs
parents:
diff changeset
   854
    }
hgs
parents:
diff changeset
   855
hgs
parents:
diff changeset
   856
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   857
// Return terminal response filled according to result.
hgs
parents:
diff changeset
   858
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   859
//
hgs
parents:
diff changeset
   860
void CSetUpCallHandler::CompleteSetupCall(
hgs
parents:
diff changeset
   861
    const RSat::TPCmdResult aGeneralResult )
hgs
parents:
diff changeset
   862
    {
hgs
parents:
diff changeset
   863
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CompleteSetupCall calling" )
hgs
parents:
diff changeset
   864
hgs
parents:
diff changeset
   865
    // Fill Terminal Response.
hgs
parents:
diff changeset
   866
    iSetUpCallRsp.iGeneralResult = aGeneralResult;
hgs
parents:
diff changeset
   867
    iSetUpCallRsp.iInfoType = RSat::KNoAdditionalInfo;
hgs
parents:
diff changeset
   868
    iSetUpCallRsp.iAdditionalInfo.Zero();
hgs
parents:
diff changeset
   869
    iSetUpCallRsp.SetPCmdNumber( iSetUpCallData.PCmdNumber() );
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
    // Send terminal response.
hgs
parents:
diff changeset
   872
    TerminalRsp( RSat::ESetUpCall, iSetUpCallRspPckg );
hgs
parents:
diff changeset
   873
hgs
parents:
diff changeset
   874
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CompleteSetupCall exiting" )
hgs
parents:
diff changeset
   875
    }
hgs
parents:
diff changeset
   876
hgs
parents:
diff changeset
   877
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   878
// Return terminal response filled according to result.
hgs
parents:
diff changeset
   879
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   880
//
hgs
parents:
diff changeset
   881
void CSetUpCallHandler::CompleteSetupCall(
hgs
parents:
diff changeset
   882
    const RSat::TPCmdResult aGeneralResult,
hgs
parents:
diff changeset
   883
    const TInt16 aAdditionalInfo )
hgs
parents:
diff changeset
   884
    {
hgs
parents:
diff changeset
   885
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CompleteSetupCall calling" )
hgs
parents:
diff changeset
   886
hgs
parents:
diff changeset
   887
    // Fill Terminal Response.
hgs
parents:
diff changeset
   888
    iSetUpCallRsp.iGeneralResult = aGeneralResult;
hgs
parents:
diff changeset
   889
    iSetUpCallRsp.iInfoType = RSat::KMeProblem;
hgs
parents:
diff changeset
   890
    iSetUpCallRsp.iAdditionalInfo.SetLength( 1 );
hgs
parents:
diff changeset
   891
    iSetUpCallRsp.iAdditionalInfo[0] = aAdditionalInfo;
hgs
parents:
diff changeset
   892
    iSetUpCallRsp.SetPCmdNumber( iSetUpCallData.PCmdNumber() );
hgs
parents:
diff changeset
   893
hgs
parents:
diff changeset
   894
    // Send terminal response.
hgs
parents:
diff changeset
   895
    TerminalRsp( RSat::ESetUpCall, iSetUpCallRspPckg );
hgs
parents:
diff changeset
   896
hgs
parents:
diff changeset
   897
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CompleteSetupCall exiting" )
hgs
parents:
diff changeset
   898
    }
hgs
parents:
diff changeset
   899
hgs
parents:
diff changeset
   900
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   901
// Checks the dialling number string for extended BCD
hgs
parents:
diff changeset
   902
// values. Changes them to correct characters
hgs
parents:
diff changeset
   903
// see ETSI 11.11 10.5.1
hgs
parents:
diff changeset
   904
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   905
//
hgs
parents:
diff changeset
   906
void CSetUpCallHandler::CheckNumber( TDes& aNumber ) const
hgs
parents:
diff changeset
   907
    {
hgs
parents:
diff changeset
   908
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckNumber calling" )
hgs
parents:
diff changeset
   909
    
hgs
parents:
diff changeset
   910
    for ( TInt i = 0; i < aNumber.Length(); i++ )
hgs
parents:
diff changeset
   911
        {
hgs
parents:
diff changeset
   912
        // check values
hgs
parents:
diff changeset
   913
        if ( KBCDAsterisk == aNumber[i] )
hgs
parents:
diff changeset
   914
            {
hgs
parents:
diff changeset
   915
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   916
            "SETUPCALL: CSetUpCallHandler::CheckNumber KAsteriskChar" )
hgs
parents:
diff changeset
   917
            aNumber[i] = KAsteriskChar;
hgs
parents:
diff changeset
   918
            }
hgs
parents:
diff changeset
   919
hgs
parents:
diff changeset
   920
        if ( KBCDDash == aNumber[i] )
hgs
parents:
diff changeset
   921
            {
hgs
parents:
diff changeset
   922
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   923
            "SETUPCALL: CSetUpCallHandler::CheckNumber KDashChar" )
hgs
parents:
diff changeset
   924
            aNumber[i] = KDashChar;
hgs
parents:
diff changeset
   925
            }
hgs
parents:
diff changeset
   926
hgs
parents:
diff changeset
   927
        if ( KBCDDTMF == aNumber[i] )
hgs
parents:
diff changeset
   928
            {
hgs
parents:
diff changeset
   929
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   930
            "SETUPCALL: CSetUpCallHandler::CheckNumber KDTMFChar" )
hgs
parents:
diff changeset
   931
            aNumber[i] = KDTMFChar;
hgs
parents:
diff changeset
   932
            }
hgs
parents:
diff changeset
   933
hgs
parents:
diff changeset
   934
        if ( KBCDWild == aNumber[i] )
hgs
parents:
diff changeset
   935
            {
hgs
parents:
diff changeset
   936
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   937
            "SETUPCALL: CSetUpCallHandler::CheckNumber KWildChar" )
hgs
parents:
diff changeset
   938
            aNumber[i] = KWildChar;
hgs
parents:
diff changeset
   939
            }
hgs
parents:
diff changeset
   940
hgs
parents:
diff changeset
   941
        if ( KBCDExpansion == aNumber[i] )
hgs
parents:
diff changeset
   942
            {
hgs
parents:
diff changeset
   943
            LOG( SIMPLE, 
hgs
parents:
diff changeset
   944
            "SETUPCALL: CSetUpCallHandler::CheckNumber KExpansionChar" )
hgs
parents:
diff changeset
   945
            aNumber[i] = KExpansionChar;
hgs
parents:
diff changeset
   946
            }
hgs
parents:
diff changeset
   947
        }
hgs
parents:
diff changeset
   948
    
hgs
parents:
diff changeset
   949
    LOG2( SIMPLE, 
hgs
parents:
diff changeset
   950
    "SETUPCALL: CSetUpCallHandler::CheckNumber length of aNumber: %d",
hgs
parents:
diff changeset
   951
     aNumber.Length() )
hgs
parents:
diff changeset
   952
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckNumber exiting" )
hgs
parents:
diff changeset
   953
    }
hgs
parents:
diff changeset
   954
hgs
parents:
diff changeset
   955
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   956
// Create emergency call
hgs
parents:
diff changeset
   957
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   958
//
hgs
parents:
diff changeset
   959
void CSetUpCallHandler::CreateEmergencyCall( 
hgs
parents:
diff changeset
   960
        CSetupCallRequestHandler& aHandler )
hgs
parents:
diff changeset
   961
    {
hgs
parents:
diff changeset
   962
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CreateEmergencyCall calling" )
hgs
parents:
diff changeset
   963
   
hgs
parents:
diff changeset
   964
    aHandler.DialEmergencyCall( iSetUpCallData.iAddress.iTelNumber );
hgs
parents:
diff changeset
   965
    
hgs
parents:
diff changeset
   966
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CreateEmergencyCall exiting" )    
hgs
parents:
diff changeset
   967
    }
hgs
parents:
diff changeset
   968
hgs
parents:
diff changeset
   969
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   970
// check setup call param.
hgs
parents:
diff changeset
   971
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   972
//
hgs
parents:
diff changeset
   973
TBool CSetUpCallHandler::CheckSetupCallParam()
hgs
parents:
diff changeset
   974
    {
hgs
parents:
diff changeset
   975
    LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam calling" )
hgs
parents:
diff changeset
   976
hgs
parents:
diff changeset
   977
    TBool valid( ETrue );
hgs
parents:
diff changeset
   978
    if ( iSetUpCallData.iAddress.iTelNumber.Length()
hgs
parents:
diff changeset
   979
          > KSatMaximumPhoneNumberLength )
hgs
parents:
diff changeset
   980
        {
hgs
parents:
diff changeset
   981
        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam num" )
hgs
parents:
diff changeset
   982
        valid = EFalse;
hgs
parents:
diff changeset
   983
        }    
hgs
parents:
diff changeset
   984
    else if ( iSetUpCallData.iAlphaIdCallSetUpPhase.iAlphaId.Length()
hgs
parents:
diff changeset
   985
               > KSatMaximumNameLength )
hgs
parents:
diff changeset
   986
        {
hgs
parents:
diff changeset
   987
        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam name" )
hgs
parents:
diff changeset
   988
        valid = EFalse;
hgs
parents:
diff changeset
   989
        }    
hgs
parents:
diff changeset
   990
    else if ( iSetUpCallData.iSubAddress.Length() > KSatSubAddressLength )
hgs
parents:
diff changeset
   991
        {
hgs
parents:
diff changeset
   992
        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam sub" )
hgs
parents:
diff changeset
   993
        valid = EFalse;
hgs
parents:
diff changeset
   994
        }    
hgs
parents:
diff changeset
   995
    else if ( iSetUpCallData.iCapabilityConfigParams.Length()
hgs
parents:
diff changeset
   996
               > KSatBearerLength )
hgs
parents:
diff changeset
   997
        {
hgs
parents:
diff changeset
   998
        LOG( SIMPLE, "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam bear" )
hgs
parents:
diff changeset
   999
        valid = EFalse;
hgs
parents:
diff changeset
  1000
        }    
hgs
parents:
diff changeset
  1001
    LOG2( SIMPLE, 
hgs
parents:
diff changeset
  1002
    "SETUPCALL: CSetUpCallHandler::CheckSetupCallParam exiting %d", valid )
hgs
parents:
diff changeset
  1003
    
hgs
parents:
diff changeset
  1004
    return valid;        
hgs
parents:
diff changeset
  1005
    }
hgs
parents:
diff changeset
  1006
// End Of File