telutils/phoneparser/src/cphonegsmsshandler.cpp
author hgs
Mon, 23 Aug 2010 15:50:31 +0300
changeset 42 35488577e233
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201033
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002 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:  Principal handler for supplementary service procedures.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
// INCLUDE FILES
hgs
parents:
diff changeset
    20
#include    <bldvariant.hrh>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include    "cphonegsmsshandler.h" 
hgs
parents:
diff changeset
    23
#include    "cphonegsmssparser.h" 
hgs
parents:
diff changeset
    24
#include    "cphonegsmparserresult.h" 
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
// LOCAL FUNCTION PROTOTYPES
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
/**
hgs
parents:
diff changeset
    29
* Converts from service type to action.
hgs
parents:
diff changeset
    30
*/
hgs
parents:
diff changeset
    31
CPhoneGsmSsHandler::TAction ConvertFromServiceType( 
hgs
parents:
diff changeset
    32
    CPhoneGsmSsParser::TServiceType aType );
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
// ============================= LOCAL FUNCTIONS ===============================
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    37
// ConvertFromServiceType
hgs
parents:
diff changeset
    38
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    39
//
hgs
parents:
diff changeset
    40
CPhoneGsmSsHandler::TAction ConvertFromServiceType( 
hgs
parents:
diff changeset
    41
        CPhoneGsmSsParser::TServiceType aType )
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
    CPhoneGsmSsHandler::TAction result = 
hgs
parents:
diff changeset
    44
        CPhoneGsmSsHandler::EActivate;
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
    switch ( aType )
hgs
parents:
diff changeset
    47
        {
hgs
parents:
diff changeset
    48
        case CPhoneGsmSsParser::EServiceActivation:
hgs
parents:
diff changeset
    49
            result = CPhoneGsmSsHandler::EActivate;
hgs
parents:
diff changeset
    50
            break;
hgs
parents:
diff changeset
    51
        case CPhoneGsmSsParser::EServiceDeactivation:
hgs
parents:
diff changeset
    52
            result = CPhoneGsmSsHandler::EDeactivate;
hgs
parents:
diff changeset
    53
            break;
hgs
parents:
diff changeset
    54
        case CPhoneGsmSsParser::EServiceInterrogation:
hgs
parents:
diff changeset
    55
            result = CPhoneGsmSsHandler::EInterrogate;
hgs
parents:
diff changeset
    56
            break;
hgs
parents:
diff changeset
    57
        case CPhoneGsmSsParser::EServiceRegistration:
hgs
parents:
diff changeset
    58
            result = CPhoneGsmSsHandler::ERegister;
hgs
parents:
diff changeset
    59
            break;
hgs
parents:
diff changeset
    60
        case CPhoneGsmSsParser::EServiceErasure:
hgs
parents:
diff changeset
    61
            result = CPhoneGsmSsHandler::EErase;
hgs
parents:
diff changeset
    62
            break;
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
        default:
hgs
parents:
diff changeset
    65
            break;
hgs
parents:
diff changeset
    66
        }
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
    return result;
hgs
parents:
diff changeset
    69
    }
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    74
// CPhoneGsmSsHandler::ProcessL
hgs
parents:
diff changeset
    75
//
hgs
parents:
diff changeset
    76
// Process result and call appropriate function.
hgs
parents:
diff changeset
    77
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    78
//
hgs
parents:
diff changeset
    79
EXPORT_C void CPhoneGsmSsHandler::ProcessL( 
hgs
parents:
diff changeset
    80
        CPhoneGsmParserResult& aResult )
hgs
parents:
diff changeset
    81
    {            
hgs
parents:
diff changeset
    82
    switch( aResult.Uid() )
hgs
parents:
diff changeset
    83
        {
hgs
parents:
diff changeset
    84
        case KPhoneUidForwardingAll:
hgs
parents:
diff changeset
    85
            DoProcessForwardingL( 
hgs
parents:
diff changeset
    86
                EForwardingAll,
hgs
parents:
diff changeset
    87
                aResult );
hgs
parents:
diff changeset
    88
            break;
hgs
parents:
diff changeset
    89
hgs
parents:
diff changeset
    90
        case KPhoneUidForwardingAllConditional:
hgs
parents:
diff changeset
    91
            DoProcessForwardingL(
hgs
parents:
diff changeset
    92
                EForwardingAllConditional,
hgs
parents:
diff changeset
    93
                aResult );
hgs
parents:
diff changeset
    94
            break;
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
        case KPhoneUidForwardingUnconditional:
hgs
parents:
diff changeset
    97
            DoProcessForwardingL(
hgs
parents:
diff changeset
    98
                EForwardingUnconditional,
hgs
parents:
diff changeset
    99
                aResult );
hgs
parents:
diff changeset
   100
            break;
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
        case KPhoneUidForwardingNoReply:
hgs
parents:
diff changeset
   103
            DoProcessForwardingL(
hgs
parents:
diff changeset
   104
                EForwardingNoReply,
hgs
parents:
diff changeset
   105
                aResult );
hgs
parents:
diff changeset
   106
            break;
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
        case KPhoneUidForwardingNotReachable:
hgs
parents:
diff changeset
   109
            DoProcessForwardingL(
hgs
parents:
diff changeset
   110
                EForwardingNotReachable,
hgs
parents:
diff changeset
   111
                aResult );
hgs
parents:
diff changeset
   112
            break;
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
        case KPhoneUidForwardingBusy:
hgs
parents:
diff changeset
   115
            DoProcessForwardingL( 
hgs
parents:
diff changeset
   116
                EForwardingBusy,
hgs
parents:
diff changeset
   117
                aResult );
hgs
parents:
diff changeset
   118
            break;
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
        case KPhoneUidBarringAllOutgoingCalls:
hgs
parents:
diff changeset
   121
            DoProcessBarringL( 
hgs
parents:
diff changeset
   122
                EBarringAllOutgoingCalls,
hgs
parents:
diff changeset
   123
                aResult );
hgs
parents:
diff changeset
   124
            break;
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
        case KPhoneUidBarringAllIncomingCalls:
hgs
parents:
diff changeset
   127
            DoProcessBarringL( 
hgs
parents:
diff changeset
   128
                EBarringAllIncomingCalls,
hgs
parents:
diff changeset
   129
                aResult );
hgs
parents:
diff changeset
   130
            break;
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
        case KPhoneUidBarringAllServices:
hgs
parents:
diff changeset
   133
            DoProcessBarringL( 
hgs
parents:
diff changeset
   134
                EBarringAllServices,
hgs
parents:
diff changeset
   135
                aResult );
hgs
parents:
diff changeset
   136
            break;
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
        case KPhoneUidBarringAllOutgoingInternationalCalls:
hgs
parents:
diff changeset
   139
            DoProcessBarringL( 
hgs
parents:
diff changeset
   140
                EBarringAllOutgoingInternationalCalls,
hgs
parents:
diff changeset
   141
                aResult );
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
            break;
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
        case KPhoneUidBarringAllOutgoingInternationalCallsExceptHome:
hgs
parents:
diff changeset
   146
            DoProcessBarringL( 
hgs
parents:
diff changeset
   147
                EBarringAllOutgoingInternationalCallsExceptHome,
hgs
parents:
diff changeset
   148
                aResult );
hgs
parents:
diff changeset
   149
            break;
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
        case KPhoneUidBarringAllOutgoingServices:
hgs
parents:
diff changeset
   152
            DoProcessBarringL( 
hgs
parents:
diff changeset
   153
                EBarringAllOutgoingServices,
hgs
parents:
diff changeset
   154
                aResult );
hgs
parents:
diff changeset
   155
            break;
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
        case KPhoneUidBarringAllIncomingCallsWhenRoaming:
hgs
parents:
diff changeset
   158
            DoProcessBarringL( 
hgs
parents:
diff changeset
   159
                EBarringAllIncomingCallsWhenRoaming,
hgs
parents:
diff changeset
   160
                aResult );
hgs
parents:
diff changeset
   161
            break;
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
        case KPhoneUidBarringAllIncomingServices:
hgs
parents:
diff changeset
   164
            DoProcessBarringL( 
hgs
parents:
diff changeset
   165
                EBarringAllIncomingServices,
hgs
parents:
diff changeset
   166
                aResult );
hgs
parents:
diff changeset
   167
            break;
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
        case KPhoneUidWaiting:
hgs
parents:
diff changeset
   170
            {
hgs
parents:
diff changeset
   171
            TPtrC ptr( KNullDesC );
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
            if ( aResult.CountParameters() )
hgs
parents:
diff changeset
   174
                {
hgs
parents:
diff changeset
   175
                ptr.Set( aResult.ParameterAt( 0 ) );
hgs
parents:
diff changeset
   176
                }
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
            TUint data = aResult.AuxInformation();
hgs
parents:
diff changeset
   179
            CPhoneGsmSsParser::TServiceType type;
hgs
parents:
diff changeset
   180
            CPhoneGsmSsParser::TServiceSyntax syntax;
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
            CPhoneGsmSsParser::UnpackData( data, type, syntax );
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
            TAction action = ConvertFromServiceType( type ); 
hgs
parents:
diff changeset
   185
            ProcessWaitingL( action, ptr );
hgs
parents:
diff changeset
   186
            }
hgs
parents:
diff changeset
   187
            break;
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
        case KPhoneUidCallingLineIdentificationPresentation:
hgs
parents:
diff changeset
   190
            ProcessClipStatusL();
hgs
parents:
diff changeset
   191
            break;
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
        case KPhoneUidCallingLineIdentificationRestriction:
hgs
parents:
diff changeset
   194
            ProcessClirStatusL();
hgs
parents:
diff changeset
   195
            break;
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
        case KPhoneUidConnectedLinePresentation:
hgs
parents:
diff changeset
   198
            ProcessColpStatusL();
hgs
parents:
diff changeset
   199
            break;
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
        case KPhoneUidConnectedLinePresentationRestriction:
hgs
parents:
diff changeset
   202
            ProcessColrStatusL();
hgs
parents:
diff changeset
   203
            break;
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
        case KPhoneUidPassword:
hgs
parents:
diff changeset
   206
            {
hgs
parents:
diff changeset
   207
            TPasswordProcedure procedure = EPasswordNetwork;
hgs
parents:
diff changeset
   208
            if ( aResult.ParameterAt( 0 ).Length() )
hgs
parents:
diff changeset
   209
                {
hgs
parents:
diff changeset
   210
                procedure = EPasswordBarring;
hgs
parents:
diff changeset
   211
                }
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
            ProcessPasswordChangeL( 
hgs
parents:
diff changeset
   214
                procedure,
hgs
parents:
diff changeset
   215
                aResult.ParameterAt(1),
hgs
parents:
diff changeset
   216
                aResult.ParameterAt(2),
hgs
parents:
diff changeset
   217
                aResult.ParameterAt(3) );
hgs
parents:
diff changeset
   218
            }
hgs
parents:
diff changeset
   219
            break;
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
        case KPhoneUidCallingNamePresentation:
hgs
parents:
diff changeset
   222
            ProcessCnapStatusL();
hgs
parents:
diff changeset
   223
            break;
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
        default:
hgs
parents:
diff changeset
   226
            break;
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
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   232
// CPhoneGsmSsHandler::DoProcessBarringL
hgs
parents:
diff changeset
   233
//
hgs
parents:
diff changeset
   234
// Process barring procedures.
hgs
parents:
diff changeset
   235
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   236
//
hgs
parents:
diff changeset
   237
void CPhoneGsmSsHandler::DoProcessBarringL(
hgs
parents:
diff changeset
   238
        TBarringProcedure aBarring,
hgs
parents:
diff changeset
   239
        CPhoneGsmParserResult& aResult )
hgs
parents:
diff changeset
   240
    {
hgs
parents:
diff changeset
   241
    CPhoneGsmSsParser::TServiceType type;
hgs
parents:
diff changeset
   242
    CPhoneGsmSsParser::TServiceSyntax syntax;
hgs
parents:
diff changeset
   243
    TPtrC password( KNullDesC );
hgs
parents:
diff changeset
   244
    TPtrC basicCode( KNullDesC );
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
    CPhoneGsmSsParser::UnpackData( 
hgs
parents:
diff changeset
   247
        aResult.AuxInformation(),
hgs
parents:
diff changeset
   248
        type,
hgs
parents:
diff changeset
   249
        syntax );
hgs
parents:
diff changeset
   250
hgs
parents:
diff changeset
   251
    TAction action = ConvertFromServiceType( type ); 
hgs
parents:
diff changeset
   252
hgs
parents:
diff changeset
   253
    switch ( type )
hgs
parents:
diff changeset
   254
        {
hgs
parents:
diff changeset
   255
        case CPhoneGsmSsParser::EServiceDeactivation:
hgs
parents:
diff changeset
   256
        case CPhoneGsmSsParser::EServiceActivation:
hgs
parents:
diff changeset
   257
            
hgs
parents:
diff changeset
   258
            // First parameter is password.
hgs
parents:
diff changeset
   259
            if ( aResult.CountParameters() >= 1 )
hgs
parents:
diff changeset
   260
                {
hgs
parents:
diff changeset
   261
                password.Set( aResult.ParameterAt( 0 ) );
hgs
parents:
diff changeset
   262
                }
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
            // Second parameter is basic service code.
hgs
parents:
diff changeset
   265
            if ( aResult.CountParameters() >= 2 )
hgs
parents:
diff changeset
   266
                {
hgs
parents:
diff changeset
   267
                basicCode.Set( aResult.ParameterAt( 1 ) );
hgs
parents:
diff changeset
   268
                }
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
            ProcessBarringL( 
hgs
parents:
diff changeset
   271
                action,
hgs
parents:
diff changeset
   272
                aBarring,
hgs
parents:
diff changeset
   273
                password,
hgs
parents:
diff changeset
   274
                basicCode );
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
            break;
hgs
parents:
diff changeset
   277
    
hgs
parents:
diff changeset
   278
        case CPhoneGsmSsParser::EServiceInterrogation:
hgs
parents:
diff changeset
   279
hgs
parents:
diff changeset
   280
            // First parameter is basic service code.
hgs
parents:
diff changeset
   281
            if ( aResult.CountParameters() >= 1 )
hgs
parents:
diff changeset
   282
                {
hgs
parents:
diff changeset
   283
                basicCode.Set( aResult.ParameterAt( 0 ) );
hgs
parents:
diff changeset
   284
                }
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
            ProcessBarringL(
hgs
parents:
diff changeset
   287
                action,
hgs
parents:
diff changeset
   288
                aBarring,
hgs
parents:
diff changeset
   289
                KNullDesC,
hgs
parents:
diff changeset
   290
                basicCode );
hgs
parents:
diff changeset
   291
hgs
parents:
diff changeset
   292
            break;
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
        case CPhoneGsmSsParser::EServiceRegistration:
hgs
parents:
diff changeset
   295
        case CPhoneGsmSsParser::EServiceErasure:
hgs
parents:
diff changeset
   296
            // These can never happen.
hgs
parents:
diff changeset
   297
            break;
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
        default:
hgs
parents:
diff changeset
   300
            break;
hgs
parents:
diff changeset
   301
        }
hgs
parents:
diff changeset
   302
    }
hgs
parents:
diff changeset
   303
hgs
parents:
diff changeset
   304
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   305
// CPhoneGsmSsHandler::DoProcessForwardingL
hgs
parents:
diff changeset
   306
//
hgs
parents:
diff changeset
   307
// Process result and call appropriate function.
hgs
parents:
diff changeset
   308
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   309
//
hgs
parents:
diff changeset
   310
void CPhoneGsmSsHandler::DoProcessForwardingL(
hgs
parents:
diff changeset
   311
        TForwardingProcedure aForwarding,
hgs
parents:
diff changeset
   312
        CPhoneGsmParserResult& aResult )
hgs
parents:
diff changeset
   313
    {
hgs
parents:
diff changeset
   314
    CPhoneGsmSsParser::TServiceType type;
hgs
parents:
diff changeset
   315
    CPhoneGsmSsParser::TServiceSyntax syntax;
hgs
parents:
diff changeset
   316
hgs
parents:
diff changeset
   317
    CPhoneGsmSsParser::UnpackData( 
hgs
parents:
diff changeset
   318
        aResult.AuxInformation(),
hgs
parents:
diff changeset
   319
        type,
hgs
parents:
diff changeset
   320
        syntax );
hgs
parents:
diff changeset
   321
hgs
parents:
diff changeset
   322
    TAction action = ConvertFromServiceType( type ); 
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
    TPtrC number( KNullDesC );
hgs
parents:
diff changeset
   325
    TPtrC basicCode( KNullDesC );
hgs
parents:
diff changeset
   326
    TPtrC timer( KNullDesC );
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
    switch ( type )
hgs
parents:
diff changeset
   329
        {
hgs
parents:
diff changeset
   330
        case CPhoneGsmSsParser::EServiceActivation:
hgs
parents:
diff changeset
   331
        case CPhoneGsmSsParser::EServiceDeactivation:
hgs
parents:
diff changeset
   332
        case CPhoneGsmSsParser::EServiceInterrogation:
hgs
parents:
diff changeset
   333
        case CPhoneGsmSsParser::EServiceErasure:
hgs
parents:
diff changeset
   334
            basicCode.Set( aResult.ParameterAt( 1 ) );
hgs
parents:
diff changeset
   335
            break;
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
        case CPhoneGsmSsParser::EServiceRegistration:
hgs
parents:
diff changeset
   338
            {
hgs
parents:
diff changeset
   339
            number.Set( aResult.ParameterAt( 0 ) );
hgs
parents:
diff changeset
   340
            
hgs
parents:
diff changeset
   341
            if ( aResult.CountParameters() > 1 )
hgs
parents:
diff changeset
   342
                {
hgs
parents:
diff changeset
   343
                basicCode.Set( aResult.ParameterAt( 1 ) );
hgs
parents:
diff changeset
   344
                }
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
            if ( aResult.CountParameters() > 2 )
hgs
parents:
diff changeset
   347
                {
hgs
parents:
diff changeset
   348
                timer.Set( aResult.ParameterAt( 2 ) );
hgs
parents:
diff changeset
   349
                }
hgs
parents:
diff changeset
   350
            }
hgs
parents:
diff changeset
   351
            break;
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
        default:
hgs
parents:
diff changeset
   354
            break;
hgs
parents:
diff changeset
   355
        }
hgs
parents:
diff changeset
   356
hgs
parents:
diff changeset
   357
    ProcessForwardingL(
hgs
parents:
diff changeset
   358
        action,
hgs
parents:
diff changeset
   359
        aForwarding,
hgs
parents:
diff changeset
   360
        number,
hgs
parents:
diff changeset
   361
        basicCode,
hgs
parents:
diff changeset
   362
        timer );
hgs
parents:
diff changeset
   363
            
hgs
parents:
diff changeset
   364
    }
hgs
parents:
diff changeset
   365
    
hgs
parents:
diff changeset
   366
//  End of File