sysstatemgmt/systemstatemgr/test/tcmn/src/t_stateawaresessionwrapper.cpp
author hgs
Fri, 08 Oct 2010 14:33:25 +0300
changeset 76 cb32bcc88bad
permissions -rw-r--r--
201039
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
76
hgs
parents:
diff changeset
     1
// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     2
// All rights reserved.
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     7
//
hgs
parents:
diff changeset
     8
// Initial Contributors:
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    10
//
hgs
parents:
diff changeset
    11
//Contributors:
hgs
parents:
diff changeset
    12
//
hgs
parents:
diff changeset
    13
// Description: Test wrapper for RSsmStateAwareSession
hgs
parents:
diff changeset
    14
hgs
parents:
diff changeset
    15
#include <e32std.h>
hgs
parents:
diff changeset
    16
#include <e32capability.h>
hgs
parents:
diff changeset
    17
#include <test/datawrapper.h>
hgs
parents:
diff changeset
    18
#include <ssm/ssmdomaindefs.h> 
hgs
parents:
diff changeset
    19
#include <ssm/ssmsubstates.hrh>
hgs
parents:
diff changeset
    20
#include <ssm/startupdomainpskeys.h>
hgs
parents:
diff changeset
    21
#include <e32debug.h>
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "t_stateawaresessionwrapper.h"
hgs
parents:
diff changeset
    24
hgs
parents:
diff changeset
    25
//
hgs
parents:
diff changeset
    26
_LIT(KDomainId,                  "domainId"); 
hgs
parents:
diff changeset
    27
_LIT(KAcknowledge,               "acknowledge");
hgs
parents:
diff changeset
    28
_LIT(KError,                     "error");
hgs
parents:
diff changeset
    29
_LIT(KCancelDeferral,            "cancelDeferral");
hgs
parents:
diff changeset
    30
_LIT(KCount,                     "count"); 
hgs
parents:
diff changeset
    31
_LIT(KAckLastState,              "ackLastState");
hgs
parents:
diff changeset
    32
_LIT(KDeferTwice,                "deferTwice"); 
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
//commands
hgs
parents:
diff changeset
    35
_LIT(KCmdNewL,                                      "NewL");
hgs
parents:
diff changeset
    36
_LIT(KCmdConnect,                                   "Connect");
hgs
parents:
diff changeset
    37
_LIT(KCmdReadIniData,                               "ReadIniData");
hgs
parents:
diff changeset
    38
_LIT(KCmdRequestStateNotification,                  "RequestStateNotification");
hgs
parents:
diff changeset
    39
_LIT(KCmdAcknowledgeStateNotification,              "AcknowledgeStateNotification");
hgs
parents:
diff changeset
    40
_LIT(KCmdClose,                                     "Close");
hgs
parents:
diff changeset
    41
_LIT(KCmdRequestStateNotificationCancel,            "RequestStateNotificationCancel");
hgs
parents:
diff changeset
    42
_LIT(KCmdAcknowledgeAndRequestStateNotification,    "AcknowledgeAndRequestStateNotification");
hgs
parents:
diff changeset
    43
_LIT(KCmdDeferAcknowledgement,                      "DeferAcknowledgement");
hgs
parents:
diff changeset
    44
_LIT(KCmdReturnCount,                               "ReturnCount");
hgs
parents:
diff changeset
    45
_LIT(KCmdDestructor,                                "~");
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
/**
hgs
parents:
diff changeset
    48
 * Helper method to map the DomainIds.
hgs
parents:
diff changeset
    49
 */
hgs
parents:
diff changeset
    50
static TBool MapToDomainId(TPtrC& aDomainIdName, TDmDomainId& aDomainId);
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
/**
hgs
parents:
diff changeset
    53
 * Constructor
hgs
parents:
diff changeset
    54
 */
hgs
parents:
diff changeset
    55
TIniData1::TIniData1()
hgs
parents:
diff changeset
    56
        : iCancelDeferral(EFalse)
hgs
parents:
diff changeset
    57
        , iAckLastState(EFalse)
hgs
parents:
diff changeset
    58
        , iDeferTwice(EFalse)
hgs
parents:
diff changeset
    59
        , iCount(0)
hgs
parents:
diff changeset
    60
        , iAcknowledge(ETrue)
hgs
parents:
diff changeset
    61
        {}
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
/**
hgs
parents:
diff changeset
    64
 * Constructor
hgs
parents:
diff changeset
    65
 */
hgs
parents:
diff changeset
    66
TIniData2::TIniData2()
hgs
parents:
diff changeset
    67
        : iCount(0)
hgs
parents:
diff changeset
    68
        , iAcknowledge(ETrue)
hgs
parents:
diff changeset
    69
        {}
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
/**
hgs
parents:
diff changeset
    72
 * Two phase constructor
hgs
parents:
diff changeset
    73
 */
hgs
parents:
diff changeset
    74
CTestRStateAwareSession1* CTestRStateAwareSession1::NewL()
hgs
parents:
diff changeset
    75
    {
hgs
parents:
diff changeset
    76
    CTestRStateAwareSession1*  testStateAwareSession = new (ELeave) CTestRStateAwareSession1();
hgs
parents:
diff changeset
    77
    CleanupStack::PushL(testStateAwareSession);
hgs
parents:
diff changeset
    78
    testStateAwareSession->ConstructL();
hgs
parents:
diff changeset
    79
    CleanupStack::Pop(testStateAwareSession);
hgs
parents:
diff changeset
    80
    return testStateAwareSession; 
hgs
parents:
diff changeset
    81
    }
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
/**
hgs
parents:
diff changeset
    84
* @return pointer to the object that the data wraps
hgs
parents:
diff changeset
    85
*/
hgs
parents:
diff changeset
    86
TAny*  CTestRStateAwareSession1::GetObject()
hgs
parents:
diff changeset
    87
    {
hgs
parents:
diff changeset
    88
    return iSsmStateAwareSession;
hgs
parents:
diff changeset
    89
    }
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
/**
hgs
parents:
diff changeset
    92
 * SetObjectL
hgs
parents:
diff changeset
    93
 */
hgs
parents:
diff changeset
    94
void CTestRStateAwareSession1::SetObjectL(TAny* aAny)
hgs
parents:
diff changeset
    95
    {
hgs
parents:
diff changeset
    96
    DoCleanup();
hgs
parents:
diff changeset
    97
    iSsmStateAwareSession=static_cast<RSsmStateAwareSession*> (aAny);
hgs
parents:
diff changeset
    98
    }
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
/**
hgs
parents:
diff changeset
   101
 * DisownObjectL
hgs
parents:
diff changeset
   102
 */
hgs
parents:
diff changeset
   103
void CTestRStateAwareSession1::DisownObjectL()
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    iSsmStateAwareSession=NULL;
hgs
parents:
diff changeset
   106
    }
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
/**
hgs
parents:
diff changeset
   109
 * Protected constructor. First phase construction
hgs
parents:
diff changeset
   110
 */
hgs
parents:
diff changeset
   111
CTestRStateAwareSession1::CTestRStateAwareSession1():
hgs
parents:
diff changeset
   112
CDataWrapper()
hgs
parents:
diff changeset
   113
    {
hgs
parents:
diff changeset
   114
    }
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
/**
hgs
parents:
diff changeset
   117
 * Protected constructor. Second phase construction
hgs
parents:
diff changeset
   118
 */
hgs
parents:
diff changeset
   119
void CTestRStateAwareSession1::ConstructL()
hgs
parents:
diff changeset
   120
    {
hgs
parents:
diff changeset
   121
    iActiveNotifyOnChange = CActiveCallback::NewL(*this);
hgs
parents:
diff changeset
   122
    iActiveNotifyOnChange2 = CActiveCallback::NewL(*this);
hgs
parents:
diff changeset
   123
    }
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
/**
hgs
parents:
diff changeset
   126
 * Destructor.
hgs
parents:
diff changeset
   127
 */
hgs
parents:
diff changeset
   128
CTestRStateAwareSession1::~CTestRStateAwareSession1()
hgs
parents:
diff changeset
   129
    {
hgs
parents:
diff changeset
   130
    DoCleanup();
hgs
parents:
diff changeset
   131
    delete iActiveNotifyOnChange;
hgs
parents:
diff changeset
   132
    delete iActiveNotifyOnChange2;
hgs
parents:
diff changeset
   133
    }
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
/**
hgs
parents:
diff changeset
   136
 * Process a command read from the ini file
hgs
parents:
diff changeset
   137
 *
hgs
parents:
diff changeset
   138
 * @param aCommand  the command to process
hgs
parents:
diff changeset
   139
 * @param aSection      the entry in the ini file requiring the command to be processed
hgs
parents:
diff changeset
   140
 *
hgs
parents:
diff changeset
   141
 * @return ETrue if the command is processed
hgs
parents:
diff changeset
   142
 */
hgs
parents:
diff changeset
   143
TBool CTestRStateAwareSession1::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
hgs
parents:
diff changeset
   144
    {
hgs
parents:
diff changeset
   145
    TBool retVal = ETrue;
hgs
parents:
diff changeset
   146
    if (aCommand == KCmdNewL)
hgs
parents:
diff changeset
   147
        {
hgs
parents:
diff changeset
   148
        DoCmdNew();
hgs
parents:
diff changeset
   149
        }
hgs
parents:
diff changeset
   150
    else if (aCommand == KCmdConnect)
hgs
parents:
diff changeset
   151
        {
hgs
parents:
diff changeset
   152
        DoCmdConnect(aSection);
hgs
parents:
diff changeset
   153
        }
hgs
parents:
diff changeset
   154
    else if (aCommand == KCmdReadIniData)
hgs
parents:
diff changeset
   155
        {
hgs
parents:
diff changeset
   156
        DoCmdReadIniData(aSection);
hgs
parents:
diff changeset
   157
        }
hgs
parents:
diff changeset
   158
    else if (aCommand == KCmdRequestStateNotification)
hgs
parents:
diff changeset
   159
        {
hgs
parents:
diff changeset
   160
        DoCmdRequestStateNotification(aAsyncErrorIndex);
hgs
parents:
diff changeset
   161
        }
hgs
parents:
diff changeset
   162
    else if (aCommand == KCmdAcknowledgeStateNotification)
hgs
parents:
diff changeset
   163
        {
hgs
parents:
diff changeset
   164
        DoCmdAcknowledgeStateNotification(aSection);
hgs
parents:
diff changeset
   165
        }
hgs
parents:
diff changeset
   166
    else if (aCommand == KCmdClose)
hgs
parents:
diff changeset
   167
        {
hgs
parents:
diff changeset
   168
        DoCmdClose();
hgs
parents:
diff changeset
   169
        }
hgs
parents:
diff changeset
   170
    else if (aCommand == KCmdRequestStateNotificationCancel)
hgs
parents:
diff changeset
   171
        {
hgs
parents:
diff changeset
   172
        DoCmdRequestStateNotificationCancel();
hgs
parents:
diff changeset
   173
        }
hgs
parents:
diff changeset
   174
    else if (aCommand == KCmdAcknowledgeAndRequestStateNotification)
hgs
parents:
diff changeset
   175
        {
hgs
parents:
diff changeset
   176
        DoCmdAcknowledgeAndRequestStateNotification(aSection, aAsyncErrorIndex);
hgs
parents:
diff changeset
   177
        }
hgs
parents:
diff changeset
   178
    else if (aCommand == KCmdDeferAcknowledgement)
hgs
parents:
diff changeset
   179
        {
hgs
parents:
diff changeset
   180
        DoCmdDeferAcknowledgement( aAsyncErrorIndex);
hgs
parents:
diff changeset
   181
        }
hgs
parents:
diff changeset
   182
    else if (aCommand == KCmdReturnCount)
hgs
parents:
diff changeset
   183
        {
hgs
parents:
diff changeset
   184
        DoCmdReturnCount(aSection);
hgs
parents:
diff changeset
   185
        }
hgs
parents:
diff changeset
   186
    else if (aCommand == KCmdDestructor)
hgs
parents:
diff changeset
   187
        {
hgs
parents:
diff changeset
   188
        DoCmdDestructor();
hgs
parents:
diff changeset
   189
        }
hgs
parents:
diff changeset
   190
    else
hgs
parents:
diff changeset
   191
        {
hgs
parents:
diff changeset
   192
        retVal = EFalse;
hgs
parents:
diff changeset
   193
        }    
hgs
parents:
diff changeset
   194
   
hgs
parents:
diff changeset
   195
    return retVal;
hgs
parents:
diff changeset
   196
    }
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
/**
hgs
parents:
diff changeset
   199
 * Creates RSSmStateAwareSession class instance
hgs
parents:
diff changeset
   200
 */
hgs
parents:
diff changeset
   201
void CTestRStateAwareSession1::DoCmdNew()
hgs
parents:
diff changeset
   202
    {
hgs
parents:
diff changeset
   203
    INFO_PRINTF1(_L("CTestRStateAwareSession1: Create RSsmStateAwareSession class instance"));
hgs
parents:
diff changeset
   204
    DoCleanup();
hgs
parents:
diff changeset
   205
    
hgs
parents:
diff changeset
   206
    TRAPD(err, iSsmStateAwareSession = new (ELeave)RSsmStateAwareSession());
hgs
parents:
diff changeset
   207
    
hgs
parents:
diff changeset
   208
    if (err != KErrNone)
hgs
parents:
diff changeset
   209
        {
hgs
parents:
diff changeset
   210
        ERR_PRINTF2(_L("CTestRStateAwareSession1: new error %d"), err);
hgs
parents:
diff changeset
   211
        SetError(err);
hgs
parents:
diff changeset
   212
        }      
hgs
parents:
diff changeset
   213
    }
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
/**
hgs
parents:
diff changeset
   216
 * Close RSsmStateAwareSession handle
hgs
parents:
diff changeset
   217
 */
hgs
parents:
diff changeset
   218
void CTestRStateAwareSession1::DoCmdClose()
hgs
parents:
diff changeset
   219
    {
hgs
parents:
diff changeset
   220
    INFO_PRINTF1(_L("CTestRStateAwareSession1: Close RSsmStateAwareSession"));
hgs
parents:
diff changeset
   221
    iSsmStateAwareSession->Close();
hgs
parents:
diff changeset
   222
    }
hgs
parents:
diff changeset
   223
hgs
parents:
diff changeset
   224
/**
hgs
parents:
diff changeset
   225
 * Contains cleanup implementation
hgs
parents:
diff changeset
   226
 */
hgs
parents:
diff changeset
   227
void CTestRStateAwareSession1::DoCleanup()
hgs
parents:
diff changeset
   228
    {
hgs
parents:
diff changeset
   229
    if(iSsmStateAwareSession != NULL)
hgs
parents:
diff changeset
   230
        {
hgs
parents:
diff changeset
   231
        INFO_PRINTF1(_L("CTestRStateAwareSession1: Deleting current RSsmStateAwareSession"));
hgs
parents:
diff changeset
   232
        delete iSsmStateAwareSession;
hgs
parents:
diff changeset
   233
        iSsmStateAwareSession = NULL;
hgs
parents:
diff changeset
   234
        }
hgs
parents:
diff changeset
   235
    }
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
/**
hgs
parents:
diff changeset
   238
 * Destroy RSsmStateAwareSession object
hgs
parents:
diff changeset
   239
 */
hgs
parents:
diff changeset
   240
void CTestRStateAwareSession1::DoCmdDestructor()
hgs
parents:
diff changeset
   241
    {
hgs
parents:
diff changeset
   242
    INFO_PRINTF1(_L("CTestRStateAwareSession1: Destroying the RStateAwareSession object"));
hgs
parents:
diff changeset
   243
    DoCleanup();
hgs
parents:
diff changeset
   244
    }
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
/**
hgs
parents:
diff changeset
   247
 * Check whether the client is deferred expected no. of times 
hgs
parents:
diff changeset
   248
 */
hgs
parents:
diff changeset
   249
void CTestRStateAwareSession1::DoCmdReturnCount(const TDesC& aSection)
hgs
parents:
diff changeset
   250
    {
hgs
parents:
diff changeset
   251
    TInt expectedCount = 0;
hgs
parents:
diff changeset
   252
    if ( !GetIntFromConfig(aSection, KCount(), expectedCount))
hgs
parents:
diff changeset
   253
        {
hgs
parents:
diff changeset
   254
        ERR_PRINTF1(_L("CTestRStateAwareSession1: Error reading ini file data"));
hgs
parents:
diff changeset
   255
        SetError(KErrNotFound);        
hgs
parents:
diff changeset
   256
        }
hgs
parents:
diff changeset
   257
    if (iCount == expectedCount)
hgs
parents:
diff changeset
   258
        return;
hgs
parents:
diff changeset
   259
    ERR_PRINTF3(_L("CTestRStateAwareSession1: Actual count = %d, Expected count = %d"), iCount, expectedCount);
hgs
parents:
diff changeset
   260
    SetError(KErrGeneral);
hgs
parents:
diff changeset
   261
    }
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
/*
hgs
parents:
diff changeset
   264
 * Helper function to read ini file data
hgs
parents:
diff changeset
   265
 */
hgs
parents:
diff changeset
   266
void CTestRStateAwareSession1::DoCmdReadIniData(const TDesC& aSection)
hgs
parents:
diff changeset
   267
    {
hgs
parents:
diff changeset
   268
    if( !GetIntFromConfig(aSection, KCount(), iIniData.iCount) ||
hgs
parents:
diff changeset
   269
        !GetBoolFromConfig(aSection, KCancelDeferral(), iIniData.iCancelDeferral) ||
hgs
parents:
diff changeset
   270
        !GetBoolFromConfig(aSection, KAckLastState(), iIniData.iAckLastState) ||
hgs
parents:
diff changeset
   271
        !GetBoolFromConfig(aSection, KDeferTwice(), iIniData.iDeferTwice) )
hgs
parents:
diff changeset
   272
        {
hgs
parents:
diff changeset
   273
        ERR_PRINTF1(_L("CTestRStateAwareSession1: Error reading ini file data"));
hgs
parents:
diff changeset
   274
        SetError(KErrNotFound);
hgs
parents:
diff changeset
   275
        }
hgs
parents:
diff changeset
   276
    }
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
/**
hgs
parents:
diff changeset
   279
 * Connects a client to RSsmStateAwareSession with Domain Id
hgs
parents:
diff changeset
   280
 */
hgs
parents:
diff changeset
   281
void CTestRStateAwareSession1::DoCmdConnect(const TDesC& aSection)
hgs
parents:
diff changeset
   282
    {
hgs
parents:
diff changeset
   283
    TPtrC domainIdName;
hgs
parents:
diff changeset
   284
    if (!GetStringFromConfig(aSection, KDomainId(), domainIdName))
hgs
parents:
diff changeset
   285
        {
hgs
parents:
diff changeset
   286
        //set default domainId if value is not provided in .ini file
hgs
parents:
diff changeset
   287
        domainIdName.Set(_L("KSM2UiServicesDomain1"));        
hgs
parents:
diff changeset
   288
        }
hgs
parents:
diff changeset
   289
    TDmDomainId domainId;
hgs
parents:
diff changeset
   290
    if(MapToDomainId(domainIdName, domainId ))
hgs
parents:
diff changeset
   291
       {
hgs
parents:
diff changeset
   292
       INFO_PRINTF2(_L("CTestRStateAwareSession1: Calling RSsmStateAwareSession->Connect with domain id %S"), &domainIdName );
hgs
parents:
diff changeset
   293
       TInt  err = iSsmStateAwareSession->Connect(domainId);          
hgs
parents:
diff changeset
   294
       if (KErrNone != err)
hgs
parents:
diff changeset
   295
            {
hgs
parents:
diff changeset
   296
            ERR_PRINTF2(_L("CTestRStateAwareSession1: Connect() error %d"), err);
hgs
parents:
diff changeset
   297
            SetError(err);  
hgs
parents:
diff changeset
   298
            }       
hgs
parents:
diff changeset
   299
       } 
hgs
parents:
diff changeset
   300
    else
hgs
parents:
diff changeset
   301
        {
hgs
parents:
diff changeset
   302
        ERR_PRINTF2(_L("CTestRStateAwareSession1: Could not map %S to domain Id"), &domainIdName );
hgs
parents:
diff changeset
   303
        SetBlockResult(EFail);
hgs
parents:
diff changeset
   304
        }
hgs
parents:
diff changeset
   305
    }
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
/**
hgs
parents:
diff changeset
   308
 * DoCmdRequestStateNotification 
hgs
parents:
diff changeset
   309
 */
hgs
parents:
diff changeset
   310
void CTestRStateAwareSession1::DoCmdRequestStateNotification(const TInt aAsyncErrorIndex)
hgs
parents:
diff changeset
   311
    {
hgs
parents:
diff changeset
   312
    INFO_PRINTF2(_L("CTestRStateAwareSession1: RequestStateNotification with Async Error Index: %d"), aAsyncErrorIndex);
hgs
parents:
diff changeset
   313
    iSsmStateAwareSession->RequestStateNotification(iActiveNotifyOnChange->iStatus);
hgs
parents:
diff changeset
   314
    iActiveNotifyOnChange->Activate(aAsyncErrorIndex);
hgs
parents:
diff changeset
   315
    IncOutstanding();    
hgs
parents:
diff changeset
   316
    }
hgs
parents:
diff changeset
   317
hgs
parents:
diff changeset
   318
/**
hgs
parents:
diff changeset
   319
 * DoCmdAcknowledgeStateNotification
hgs
parents:
diff changeset
   320
 */
hgs
parents:
diff changeset
   321
void CTestRStateAwareSession1::DoCmdAcknowledgeStateNotification(const TDesC& aSection)
hgs
parents:
diff changeset
   322
    {
hgs
parents:
diff changeset
   323
    INFO_PRINTF1(_L("CTestRStateAwareSession1: AcknowledgeStateNotification"));
hgs
parents:
diff changeset
   324
    TInt error;
hgs
parents:
diff changeset
   325
    if (!GetIntFromConfig(aSection, KError(), error ))
hgs
parents:
diff changeset
   326
        {
hgs
parents:
diff changeset
   327
        //set default error value if value is not provided in .ini file
hgs
parents:
diff changeset
   328
        error = KErrNone;
hgs
parents:
diff changeset
   329
        }
hgs
parents:
diff changeset
   330
   iSsmStateAwareSession->AcknowledgeStateNotification(error);    
hgs
parents:
diff changeset
   331
    }
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
/**
hgs
parents:
diff changeset
   334
 * DoCmdAcknowledgeAndRequestStateNotification
hgs
parents:
diff changeset
   335
 */
hgs
parents:
diff changeset
   336
void CTestRStateAwareSession1::DoCmdAcknowledgeAndRequestStateNotification(const TDesC& aSection, const TInt aAsyncErrorIndex)
hgs
parents:
diff changeset
   337
    {
hgs
parents:
diff changeset
   338
    INFO_PRINTF1(_L("CTestRStateAwareSession1: AcknowledgeAndRequestStateNotification"));
hgs
parents:
diff changeset
   339
    TInt error;
hgs
parents:
diff changeset
   340
    if (!GetIntFromConfig(aSection, KError(), error ))
hgs
parents:
diff changeset
   341
        {
hgs
parents:
diff changeset
   342
        //set default error value if value is not provided in .ini file
hgs
parents:
diff changeset
   343
        error = KErrNone;
hgs
parents:
diff changeset
   344
        }
hgs
parents:
diff changeset
   345
    iSsmStateAwareSession->AcknowledgeAndRequestStateNotification(error, iActiveNotifyOnChange->iStatus );
hgs
parents:
diff changeset
   346
    iActiveNotifyOnChange->Activate(aAsyncErrorIndex);
hgs
parents:
diff changeset
   347
    IncOutstanding();        
hgs
parents:
diff changeset
   348
    }
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
/**
hgs
parents:
diff changeset
   351
 * DoCmdRequestStateNotificationCancel
hgs
parents:
diff changeset
   352
 */
hgs
parents:
diff changeset
   353
void CTestRStateAwareSession1::DoCmdRequestStateNotificationCancel()
hgs
parents:
diff changeset
   354
    {
hgs
parents:
diff changeset
   355
    INFO_PRINTF1(_L("CTestRStateAwareSession1: RequestStateNotificationCancel is called "));
hgs
parents:
diff changeset
   356
    iSsmStateAwareSession->RequestStateNotificationCancel();
hgs
parents:
diff changeset
   357
    }
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
void CTestRStateAwareSession1::DoCmdDeferAcknowledgement(const TInt aAsyncErrorIndex)
hgs
parents:
diff changeset
   360
    {
hgs
parents:
diff changeset
   361
    INFO_PRINTF1(_L("CTestRStateAwareSession1: DeferAcknowledgement is called"));
hgs
parents:
diff changeset
   362
    iSsmStateAwareSession->DeferAcknowledgement(iActiveNotifyOnChange->iStatus);
hgs
parents:
diff changeset
   363
    iActiveNotifyOnChange->Activate(aAsyncErrorIndex);
hgs
parents:
diff changeset
   364
    IncOutstanding();
hgs
parents:
diff changeset
   365
    }
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
void CTestRStateAwareSession1::RunL(CActive* aActive, TInt aIndex)
hgs
parents:
diff changeset
   368
    {
hgs
parents:
diff changeset
   369
    TInt error = KErrNone;
hgs
parents:
diff changeset
   370
hgs
parents:
diff changeset
   371
    if ( aActive == iActiveNotifyOnChange )
hgs
parents:
diff changeset
   372
        {
hgs
parents:
diff changeset
   373
        error = iActiveNotifyOnChange->iStatus.Int();
hgs
parents:
diff changeset
   374
        switch ( error )
hgs
parents:
diff changeset
   375
            {
hgs
parents:
diff changeset
   376
            case KErrNone:
hgs
parents:
diff changeset
   377
                {  
hgs
parents:
diff changeset
   378
                //Request has completed i.e. The member must either defer again or acknowledge.
hgs
parents:
diff changeset
   379
                TSsmState currentState = iSsmStateAwareSession->State(); 
hgs
parents:
diff changeset
   380
                // This component only responds to Shutdown state events.
hgs
parents:
diff changeset
   381
                if ( (currentState.MainState() == ESsmShutdown) &&
hgs
parents:
diff changeset
   382
                     (currentState.SubState() == ESsmShutdownSubStateCritical || currentState.SubState() == ESsmShutdownSubStateNonCritical) )
hgs
parents:
diff changeset
   383
                    {
hgs
parents:
diff changeset
   384
                    if( iCount < iIniData.iCount )
hgs
parents:
diff changeset
   385
                        {
hgs
parents:
diff changeset
   386
                        iCount++;
hgs
parents:
diff changeset
   387
                        iSsmStateAwareSession->DeferAcknowledgement(iActiveNotifyOnChange->iStatus);
hgs
parents:
diff changeset
   388
                        iActiveNotifyOnChange->Activate(aIndex);
hgs
parents:
diff changeset
   389
                        IncOutstanding();                    
hgs
parents:
diff changeset
   390
                        if( iIniData.iDeferTwice )
hgs
parents:
diff changeset
   391
                            {
hgs
parents:
diff changeset
   392
                            iCount++;
hgs
parents:
diff changeset
   393
                            iSsmStateAwareSession->DeferAcknowledgement(iActiveNotifyOnChange2->iStatus);
hgs
parents:
diff changeset
   394
                            iActiveNotifyOnChange2->Activate(aIndex);
hgs
parents:
diff changeset
   395
                            IncOutstanding();
hgs
parents:
diff changeset
   396
                            }
hgs
parents:
diff changeset
   397
                        else if( iIniData.iAckLastState )
hgs
parents:
diff changeset
   398
                            {
hgs
parents:
diff changeset
   399
                            iSsmStateAwareSession->AcknowledgeStateNotification(KErrNone);
hgs
parents:
diff changeset
   400
                            }
hgs
parents:
diff changeset
   401
                        else if( iIniData.iCancelDeferral )
hgs
parents:
diff changeset
   402
                            {
hgs
parents:
diff changeset
   403
                            iSsmStateAwareSession->CancelDeferral();
hgs
parents:
diff changeset
   404
                            }
hgs
parents:
diff changeset
   405
                        }
hgs
parents:
diff changeset
   406
                    else
hgs
parents:
diff changeset
   407
                        {
hgs
parents:
diff changeset
   408
                        //Acknowledge with success
hgs
parents:
diff changeset
   409
                        if (iIniData.iAcknowledge)
hgs
parents:
diff changeset
   410
                            {
hgs
parents:
diff changeset
   411
                            iSsmStateAwareSession->AcknowledgeStateNotification(KErrNone);
hgs
parents:
diff changeset
   412
                            }
hgs
parents:
diff changeset
   413
                        }
hgs
parents:
diff changeset
   414
                    }  
hgs
parents:
diff changeset
   415
                break;
hgs
parents:
diff changeset
   416
                }
hgs
parents:
diff changeset
   417
            default:
hgs
parents:
diff changeset
   418
                {
hgs
parents:
diff changeset
   419
                // Error
hgs
parents:
diff changeset
   420
                INFO_PRINTF2(_L("CTestRStateAwareSession1: Test returned with error = %d"),error);
hgs
parents:
diff changeset
   421
                SetAsyncError(aIndex, error);
hgs
parents:
diff changeset
   422
                }
hgs
parents:
diff changeset
   423
            }   
hgs
parents:
diff changeset
   424
        }
hgs
parents:
diff changeset
   425
    else if ( aActive == iActiveNotifyOnChange2 )
hgs
parents:
diff changeset
   426
        {
hgs
parents:
diff changeset
   427
        error = iActiveNotifyOnChange2->iStatus.Int();
hgs
parents:
diff changeset
   428
        SetAsyncError(aIndex, error);
hgs
parents:
diff changeset
   429
        }
hgs
parents:
diff changeset
   430
    DecOutstanding();
hgs
parents:
diff changeset
   431
    }
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
/**
hgs
parents:
diff changeset
   434
 Virtual DoCancel - Request to cancel the asynchronous command
hgs
parents:
diff changeset
   435
 @see - MTPActiveCallback
hgs
parents:
diff changeset
   436
 @param aActive Active Object that DoCancel has been called on
hgs
parents:
diff changeset
   437
 @pre - N/A
hgs
parents:
diff changeset
   438
 @post - N/A
hgs
parents:
diff changeset
   439
 @leave system wide error code
hgs
parents:
diff changeset
   440
*/
hgs
parents:
diff changeset
   441
void CTestRStateAwareSession1::DoCancel(CActive* aActive, TInt aIndex)
hgs
parents:
diff changeset
   442
    {
hgs
parents:
diff changeset
   443
    INFO_PRINTF1(_L("CTestRStateAwareSession1: DoCancel"));
hgs
parents:
diff changeset
   444
    if(aActive ==  iActiveNotifyOnChange) 
hgs
parents:
diff changeset
   445
        {
hgs
parents:
diff changeset
   446
        TInt err =  iActiveNotifyOnChange->iStatus.Int(); 
hgs
parents:
diff changeset
   447
        if (err != KErrNone)
hgs
parents:
diff changeset
   448
            {
hgs
parents:
diff changeset
   449
            ERR_PRINTF2(_L("CTestRStateAwareSession1: DoCancel Error %d"), err);
hgs
parents:
diff changeset
   450
            SetAsyncError(aIndex, err);
hgs
parents:
diff changeset
   451
            }
hgs
parents:
diff changeset
   452
        }
hgs
parents:
diff changeset
   453
    else if(aActive == iActiveNotifyOnChange2)
hgs
parents:
diff changeset
   454
        {
hgs
parents:
diff changeset
   455
        TInt err =  iActiveNotifyOnChange2->iStatus.Int(); 
hgs
parents:
diff changeset
   456
        if (err != KErrNone)
hgs
parents:
diff changeset
   457
            {
hgs
parents:
diff changeset
   458
            ERR_PRINTF2(_L("CTestRStateAwareSession1: DoCancel Error %d"), err);
hgs
parents:
diff changeset
   459
            SetAsyncError(aIndex, err);
hgs
parents:
diff changeset
   460
            }
hgs
parents:
diff changeset
   461
        }
hgs
parents:
diff changeset
   462
    DecOutstanding();   
hgs
parents:
diff changeset
   463
    }
hgs
parents:
diff changeset
   464
hgs
parents:
diff changeset
   465
/**
hgs
parents:
diff changeset
   466
 * Helper method to map the DomainIds. This can be extendable for other domain Ids
hgs
parents:
diff changeset
   467
 */
hgs
parents:
diff changeset
   468
static TBool MapToDomainId(TPtrC& aDomainIdName, TDmDomainId& aDomainId)
hgs
parents:
diff changeset
   469
    {
hgs
parents:
diff changeset
   470
    TBool ret = ETrue;
hgs
parents:
diff changeset
   471
    if (!(aDomainIdName.Compare(_L("KSM2UiServicesDomain1"))))
hgs
parents:
diff changeset
   472
        {
hgs
parents:
diff changeset
   473
        aDomainId = KSM2UiServicesDomain1;
hgs
parents:
diff changeset
   474
        }
hgs
parents:
diff changeset
   475
    else if (!(aDomainIdName.Compare(_L("KSM2HALDomain2"))))
hgs
parents:
diff changeset
   476
        {
hgs
parents:
diff changeset
   477
        aDomainId = KSM2HALDomain2;
hgs
parents:
diff changeset
   478
        }
hgs
parents:
diff changeset
   479
    else if (!(aDomainIdName.Compare(_L("KSM2HALDomain3"))))
hgs
parents:
diff changeset
   480
        {
hgs
parents:
diff changeset
   481
        aDomainId = KSM2HALDomain3;  
hgs
parents:
diff changeset
   482
        }
hgs
parents:
diff changeset
   483
    else if (!(aDomainIdName.Compare(_L("KSM2AppServicesDomain1"))))
hgs
parents:
diff changeset
   484
        {
hgs
parents:
diff changeset
   485
        aDomainId = KSM2AppServicesDomain1;  
hgs
parents:
diff changeset
   486
        }
hgs
parents:
diff changeset
   487
    else if (!(aDomainIdName.Compare(_L("KSM2AppServicesDomain2"))))
hgs
parents:
diff changeset
   488
        {
hgs
parents:
diff changeset
   489
        aDomainId = KSM2AppServicesDomain2;  
hgs
parents:
diff changeset
   490
        }
hgs
parents:
diff changeset
   491
    else if (!(aDomainIdName.Compare(_L("KSM2AppServicesDomain3"))))
hgs
parents:
diff changeset
   492
        {
hgs
parents:
diff changeset
   493
        aDomainId = KSM2AppServicesDomain3;  
hgs
parents:
diff changeset
   494
        } 
hgs
parents:
diff changeset
   495
    else if (!(aDomainIdName.Compare(_L("KSM2AppServicesDomain4"))))
hgs
parents:
diff changeset
   496
        {
hgs
parents:
diff changeset
   497
        aDomainId = KSM2AppServicesDomain4;  
hgs
parents:
diff changeset
   498
        } 
hgs
parents:
diff changeset
   499
    else 
hgs
parents:
diff changeset
   500
        {
hgs
parents:
diff changeset
   501
        ret = EFalse;
hgs
parents:
diff changeset
   502
        }   
hgs
parents:
diff changeset
   503
    return ret;
hgs
parents:
diff changeset
   504
    }
hgs
parents:
diff changeset
   505
hgs
parents:
diff changeset
   506
hgs
parents:
diff changeset
   507
/**
hgs
parents:
diff changeset
   508
 * Two phase constructor
hgs
parents:
diff changeset
   509
 */
hgs
parents:
diff changeset
   510
CTestRStateAwareSession2* CTestRStateAwareSession2::NewL()
hgs
parents:
diff changeset
   511
    {
hgs
parents:
diff changeset
   512
    CTestRStateAwareSession2*  testStateAwareSession = new (ELeave) CTestRStateAwareSession2();
hgs
parents:
diff changeset
   513
    CleanupStack::PushL(testStateAwareSession);
hgs
parents:
diff changeset
   514
    testStateAwareSession->ConstructL();
hgs
parents:
diff changeset
   515
    CleanupStack::Pop(testStateAwareSession);
hgs
parents:
diff changeset
   516
    return testStateAwareSession; 
hgs
parents:
diff changeset
   517
    }
hgs
parents:
diff changeset
   518
hgs
parents:
diff changeset
   519
/**
hgs
parents:
diff changeset
   520
* @return pointer to the object that the data wraps
hgs
parents:
diff changeset
   521
*/
hgs
parents:
diff changeset
   522
TAny*  CTestRStateAwareSession2::GetObject()
hgs
parents:
diff changeset
   523
    {
hgs
parents:
diff changeset
   524
    return iSsmStateAwareSession;
hgs
parents:
diff changeset
   525
    }
hgs
parents:
diff changeset
   526
hgs
parents:
diff changeset
   527
/**
hgs
parents:
diff changeset
   528
 * SetObjectL
hgs
parents:
diff changeset
   529
 */
hgs
parents:
diff changeset
   530
void CTestRStateAwareSession2::SetObjectL(TAny* aAny)
hgs
parents:
diff changeset
   531
    {
hgs
parents:
diff changeset
   532
    DoCleanup();
hgs
parents:
diff changeset
   533
    iSsmStateAwareSession=static_cast<RSsmStateAwareSession*> (aAny);
hgs
parents:
diff changeset
   534
    }
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
/**
hgs
parents:
diff changeset
   537
 * DisownObjectL
hgs
parents:
diff changeset
   538
 */
hgs
parents:
diff changeset
   539
void CTestRStateAwareSession2::DisownObjectL()
hgs
parents:
diff changeset
   540
    {
hgs
parents:
diff changeset
   541
    iSsmStateAwareSession=NULL;
hgs
parents:
diff changeset
   542
    }
hgs
parents:
diff changeset
   543
hgs
parents:
diff changeset
   544
/**
hgs
parents:
diff changeset
   545
 * Protected constructor. First phase construction
hgs
parents:
diff changeset
   546
 */
hgs
parents:
diff changeset
   547
CTestRStateAwareSession2::CTestRStateAwareSession2():
hgs
parents:
diff changeset
   548
CDataWrapper()
hgs
parents:
diff changeset
   549
    {
hgs
parents:
diff changeset
   550
    }
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
/**
hgs
parents:
diff changeset
   553
 * Protected constructor. Second phase construction
hgs
parents:
diff changeset
   554
 */
hgs
parents:
diff changeset
   555
void CTestRStateAwareSession2::ConstructL()
hgs
parents:
diff changeset
   556
    {
hgs
parents:
diff changeset
   557
    iActiveNotifyOnChange = CActiveCallback::NewL(*this);
hgs
parents:
diff changeset
   558
    }
hgs
parents:
diff changeset
   559
hgs
parents:
diff changeset
   560
/**
hgs
parents:
diff changeset
   561
 * Destructor.
hgs
parents:
diff changeset
   562
 */
hgs
parents:
diff changeset
   563
CTestRStateAwareSession2::~CTestRStateAwareSession2()
hgs
parents:
diff changeset
   564
    {
hgs
parents:
diff changeset
   565
    DoCleanup();
hgs
parents:
diff changeset
   566
    delete iActiveNotifyOnChange;
hgs
parents:
diff changeset
   567
    }
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
/**
hgs
parents:
diff changeset
   570
 * Process a command read from the ini file
hgs
parents:
diff changeset
   571
 *
hgs
parents:
diff changeset
   572
 * @param aCommand  the command to process
hgs
parents:
diff changeset
   573
 * @param aSection      the entry in the ini file requiring the command to be processed
hgs
parents:
diff changeset
   574
 *
hgs
parents:
diff changeset
   575
 * @return ETrue if the command is processed
hgs
parents:
diff changeset
   576
 */
hgs
parents:
diff changeset
   577
TBool CTestRStateAwareSession2::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
hgs
parents:
diff changeset
   578
    {
hgs
parents:
diff changeset
   579
    TBool retVal = ETrue;
hgs
parents:
diff changeset
   580
    if (aCommand == KCmdNewL)
hgs
parents:
diff changeset
   581
        {
hgs
parents:
diff changeset
   582
        DoCmdNew();
hgs
parents:
diff changeset
   583
        }
hgs
parents:
diff changeset
   584
    else if (aCommand == KCmdConnect)
hgs
parents:
diff changeset
   585
        {
hgs
parents:
diff changeset
   586
        DoCmdConnect(aSection);
hgs
parents:
diff changeset
   587
        }
hgs
parents:
diff changeset
   588
    else if (aCommand == KCmdReadIniData)
hgs
parents:
diff changeset
   589
        {
hgs
parents:
diff changeset
   590
        DoCmdReadIniData(aSection);
hgs
parents:
diff changeset
   591
        }
hgs
parents:
diff changeset
   592
    else if (aCommand == KCmdRequestStateNotification)
hgs
parents:
diff changeset
   593
        {
hgs
parents:
diff changeset
   594
        DoCmdRequestStateNotification(aAsyncErrorIndex);
hgs
parents:
diff changeset
   595
        }
hgs
parents:
diff changeset
   596
    else if (aCommand == KCmdAcknowledgeStateNotification)
hgs
parents:
diff changeset
   597
        {
hgs
parents:
diff changeset
   598
        DoCmdAcknowledgeStateNotification(aSection);
hgs
parents:
diff changeset
   599
        }
hgs
parents:
diff changeset
   600
    else if (aCommand == KCmdClose)
hgs
parents:
diff changeset
   601
        {
hgs
parents:
diff changeset
   602
        DoCmdClose();
hgs
parents:
diff changeset
   603
        }
hgs
parents:
diff changeset
   604
    else if (aCommand == KCmdRequestStateNotificationCancel)
hgs
parents:
diff changeset
   605
        {
hgs
parents:
diff changeset
   606
        DoCmdRequestStateNotificationCancel();
hgs
parents:
diff changeset
   607
        }
hgs
parents:
diff changeset
   608
    else if (aCommand == KCmdAcknowledgeAndRequestStateNotification)
hgs
parents:
diff changeset
   609
        {
hgs
parents:
diff changeset
   610
        DoCmdAcknowledgeAndRequestStateNotification(aSection, aAsyncErrorIndex);
hgs
parents:
diff changeset
   611
        }
hgs
parents:
diff changeset
   612
    else if (aCommand == KCmdDestructor)
hgs
parents:
diff changeset
   613
        {
hgs
parents:
diff changeset
   614
        DoCmdDestructor();
hgs
parents:
diff changeset
   615
        }
hgs
parents:
diff changeset
   616
    else
hgs
parents:
diff changeset
   617
        {
hgs
parents:
diff changeset
   618
        retVal = EFalse;
hgs
parents:
diff changeset
   619
        }    
hgs
parents:
diff changeset
   620
   
hgs
parents:
diff changeset
   621
    return retVal;
hgs
parents:
diff changeset
   622
    }
hgs
parents:
diff changeset
   623
hgs
parents:
diff changeset
   624
/**
hgs
parents:
diff changeset
   625
 * Creates RSSmStateAwareSession class instance
hgs
parents:
diff changeset
   626
 */
hgs
parents:
diff changeset
   627
void CTestRStateAwareSession2::DoCmdNew()
hgs
parents:
diff changeset
   628
    {
hgs
parents:
diff changeset
   629
    INFO_PRINTF1(_L("CTestRStateAwareSession2: Create RSsmStateAwareSession class instance"));
hgs
parents:
diff changeset
   630
    DoCleanup();
hgs
parents:
diff changeset
   631
    
hgs
parents:
diff changeset
   632
    TRAPD(err, iSsmStateAwareSession = new (ELeave)RSsmStateAwareSession());
hgs
parents:
diff changeset
   633
    
hgs
parents:
diff changeset
   634
    if (err != KErrNone)
hgs
parents:
diff changeset
   635
        {
hgs
parents:
diff changeset
   636
        ERR_PRINTF2(_L("CTestRStateAwareSession2: new error %d"), err);
hgs
parents:
diff changeset
   637
        SetError(err);
hgs
parents:
diff changeset
   638
        }      
hgs
parents:
diff changeset
   639
    }
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
/**
hgs
parents:
diff changeset
   642
 * Close RSsmStateAwareSession handle
hgs
parents:
diff changeset
   643
 */
hgs
parents:
diff changeset
   644
void CTestRStateAwareSession2::DoCmdClose()
hgs
parents:
diff changeset
   645
    {
hgs
parents:
diff changeset
   646
    INFO_PRINTF1(_L("CTestRStateAwareSession2: Close RSsmStateAwareSession"));
hgs
parents:
diff changeset
   647
    iSsmStateAwareSession->Close();
hgs
parents:
diff changeset
   648
    }
hgs
parents:
diff changeset
   649
hgs
parents:
diff changeset
   650
/**
hgs
parents:
diff changeset
   651
 * Contains cleanup implementation
hgs
parents:
diff changeset
   652
 */
hgs
parents:
diff changeset
   653
void CTestRStateAwareSession2::DoCleanup()
hgs
parents:
diff changeset
   654
    {
hgs
parents:
diff changeset
   655
    if(iSsmStateAwareSession != NULL)
hgs
parents:
diff changeset
   656
        {
hgs
parents:
diff changeset
   657
        INFO_PRINTF1(_L("CTestRStateAwareSession2: Deleting current RSsmStateAwareSession"));
hgs
parents:
diff changeset
   658
        delete iSsmStateAwareSession;
hgs
parents:
diff changeset
   659
        iSsmStateAwareSession = NULL;
hgs
parents:
diff changeset
   660
        }
hgs
parents:
diff changeset
   661
    }
hgs
parents:
diff changeset
   662
hgs
parents:
diff changeset
   663
/**
hgs
parents:
diff changeset
   664
 * Destroy RSsmStateAwareSession object
hgs
parents:
diff changeset
   665
 */
hgs
parents:
diff changeset
   666
void CTestRStateAwareSession2::DoCmdDestructor()
hgs
parents:
diff changeset
   667
    {
hgs
parents:
diff changeset
   668
    INFO_PRINTF1(_L("CTestRStateAwareSession2: Destroying the RStateAwareSession object"));
hgs
parents:
diff changeset
   669
    DoCleanup();
hgs
parents:
diff changeset
   670
    }
hgs
parents:
diff changeset
   671
hgs
parents:
diff changeset
   672
/**
hgs
parents:
diff changeset
   673
 * Connects a client to RSsmStateAwareSession with Domain Id
hgs
parents:
diff changeset
   674
 */
hgs
parents:
diff changeset
   675
void CTestRStateAwareSession2::DoCmdConnect(const TDesC& aSection)
hgs
parents:
diff changeset
   676
    {
hgs
parents:
diff changeset
   677
    TPtrC domainIdName;
hgs
parents:
diff changeset
   678
    if (!GetStringFromConfig(aSection, KDomainId(), domainIdName))
hgs
parents:
diff changeset
   679
        {
hgs
parents:
diff changeset
   680
        //set default domainId if value is not provided in .ini file
hgs
parents:
diff changeset
   681
        domainIdName.Set(_L("KSM2UiServicesDomain1"));        
hgs
parents:
diff changeset
   682
        }
hgs
parents:
diff changeset
   683
    TDmDomainId domainId;
hgs
parents:
diff changeset
   684
    if(MapToDomainId(domainIdName, domainId ))
hgs
parents:
diff changeset
   685
       {
hgs
parents:
diff changeset
   686
       INFO_PRINTF2(_L("CTestRStateAwareSession2: Calling RSsmStateAwareSession->Connect with domain id %S"), &domainIdName );
hgs
parents:
diff changeset
   687
       TInt  err = iSsmStateAwareSession->Connect(domainId);          
hgs
parents:
diff changeset
   688
       if (KErrNone != err)
hgs
parents:
diff changeset
   689
            {
hgs
parents:
diff changeset
   690
            ERR_PRINTF2(_L("CTestRStateAwareSession2: Connect() error %d"), err);
hgs
parents:
diff changeset
   691
            SetError(err);  
hgs
parents:
diff changeset
   692
            }       
hgs
parents:
diff changeset
   693
       } 
hgs
parents:
diff changeset
   694
    else
hgs
parents:
diff changeset
   695
        {
hgs
parents:
diff changeset
   696
        ERR_PRINTF2(_L("CTestRStateAwareSession2: Could not map %S to domain Id"), &domainIdName );
hgs
parents:
diff changeset
   697
        SetBlockResult(EFail);
hgs
parents:
diff changeset
   698
        }
hgs
parents:
diff changeset
   699
    }
hgs
parents:
diff changeset
   700
hgs
parents:
diff changeset
   701
/*
hgs
parents:
diff changeset
   702
 * Helper function to read ini file data
hgs
parents:
diff changeset
   703
 */
hgs
parents:
diff changeset
   704
void CTestRStateAwareSession2::DoCmdReadIniData(const TDesC& aSection)
hgs
parents:
diff changeset
   705
{
hgs
parents:
diff changeset
   706
    if( !GetIntFromConfig(aSection,KCount(), iIniData.iCount) ||
hgs
parents:
diff changeset
   707
        !GetBoolFromConfig(aSection,KAcknowledge(), iIniData.iAcknowledge) )
hgs
parents:
diff changeset
   708
        {
hgs
parents:
diff changeset
   709
        ERR_PRINTF1(_L("Error reading ini file data"));
hgs
parents:
diff changeset
   710
        SetError(KErrNotFound);
hgs
parents:
diff changeset
   711
        }
hgs
parents:
diff changeset
   712
}
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
/**
hgs
parents:
diff changeset
   715
 * DoCmdRequestStateNotification 
hgs
parents:
diff changeset
   716
 */
hgs
parents:
diff changeset
   717
void CTestRStateAwareSession2::DoCmdRequestStateNotification(const TInt aAsyncErrorIndex)
hgs
parents:
diff changeset
   718
    {
hgs
parents:
diff changeset
   719
    INFO_PRINTF2(_L("CTestRStateAwareSession2: RequestStateNotification with Asyc Error Index: %d"), aAsyncErrorIndex);
hgs
parents:
diff changeset
   720
    iSsmStateAwareSession->RequestStateNotification(iActiveNotifyOnChange->iStatus);
hgs
parents:
diff changeset
   721
    iActiveNotifyOnChange->Activate(aAsyncErrorIndex);
hgs
parents:
diff changeset
   722
    IncOutstanding();    
hgs
parents:
diff changeset
   723
    }
hgs
parents:
diff changeset
   724
hgs
parents:
diff changeset
   725
/**
hgs
parents:
diff changeset
   726
 * DoCmdAcknowledgeStateNotification
hgs
parents:
diff changeset
   727
 */
hgs
parents:
diff changeset
   728
void CTestRStateAwareSession2::DoCmdAcknowledgeStateNotification(const TDesC& aSection)
hgs
parents:
diff changeset
   729
    {
hgs
parents:
diff changeset
   730
    TInt error;
hgs
parents:
diff changeset
   731
    if (!GetIntFromConfig(aSection, KError(), error ))
hgs
parents:
diff changeset
   732
        {
hgs
parents:
diff changeset
   733
        //set default error value if value is not provided in .ini file
hgs
parents:
diff changeset
   734
        error = KErrNone;
hgs
parents:
diff changeset
   735
        }
hgs
parents:
diff changeset
   736
   iSsmStateAwareSession->AcknowledgeStateNotification(error);    
hgs
parents:
diff changeset
   737
    }
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
/**
hgs
parents:
diff changeset
   740
 * DoCmdAcknowledgeAndRequestStateNotification
hgs
parents:
diff changeset
   741
 */
hgs
parents:
diff changeset
   742
void CTestRStateAwareSession2::DoCmdAcknowledgeAndRequestStateNotification(const TDesC& aSection, const TInt aAsyncErrorIndex)
hgs
parents:
diff changeset
   743
    {
hgs
parents:
diff changeset
   744
    TInt error;
hgs
parents:
diff changeset
   745
    if (!GetIntFromConfig(aSection, KError(), error ))
hgs
parents:
diff changeset
   746
        {
hgs
parents:
diff changeset
   747
        //set default error value if value is not provided in .ini file
hgs
parents:
diff changeset
   748
        error = KErrNone;
hgs
parents:
diff changeset
   749
        }
hgs
parents:
diff changeset
   750
    iSsmStateAwareSession->AcknowledgeAndRequestStateNotification(error, iActiveNotifyOnChange->iStatus );
hgs
parents:
diff changeset
   751
    iActiveNotifyOnChange->Activate(aAsyncErrorIndex);
hgs
parents:
diff changeset
   752
    IncOutstanding();        
hgs
parents:
diff changeset
   753
    }
hgs
parents:
diff changeset
   754
hgs
parents:
diff changeset
   755
/**
hgs
parents:
diff changeset
   756
 * DoCmdRequestStateNotificationCancel
hgs
parents:
diff changeset
   757
 */
hgs
parents:
diff changeset
   758
void CTestRStateAwareSession2::DoCmdRequestStateNotificationCancel()
hgs
parents:
diff changeset
   759
    {
hgs
parents:
diff changeset
   760
    INFO_PRINTF1(_L("CTestRStateAwareSession2: RequestStateNotificationCancel is called "));
hgs
parents:
diff changeset
   761
    iSsmStateAwareSession->RequestStateNotificationCancel();
hgs
parents:
diff changeset
   762
    }
hgs
parents:
diff changeset
   763
hgs
parents:
diff changeset
   764
/**
hgs
parents:
diff changeset
   765
 Virtual RunL - Called on completion of an asynchronous command
hgs
parents:
diff changeset
   766
 @see MTPActiveCallback
hgs
parents:
diff changeset
   767
 @param aActive Active Object that RunL has been called on
hgs
parents:
diff changeset
   768
 @pre N/A
hgs
parents:
diff changeset
   769
 @post N/A
hgs
parents:
diff changeset
   770
 @leave system wide error code
hgs
parents:
diff changeset
   771
*/
hgs
parents:
diff changeset
   772
void CTestRStateAwareSession2::RunL(CActive* aActive, TInt aIndex)
hgs
parents:
diff changeset
   773
    {
hgs
parents:
diff changeset
   774
    TInt error = KErrNone;
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
    if (aActive == iActiveNotifyOnChange)
hgs
parents:
diff changeset
   777
        {
hgs
parents:
diff changeset
   778
        error = iActiveNotifyOnChange->iStatus.Int();
hgs
parents:
diff changeset
   779
        if (error == KErrNone)
hgs
parents:
diff changeset
   780
            {
hgs
parents:
diff changeset
   781
            // Request has completed i.e. The member must either defer again or acknowledge.
hgs
parents:
diff changeset
   782
            TSsmState currentState = iSsmStateAwareSession->State(); 
hgs
parents:
diff changeset
   783
            // This component only responds to Shutdown state events.
hgs
parents:
diff changeset
   784
            if ( (currentState.MainState() == ESsmShutdown) &&
hgs
parents:
diff changeset
   785
                 (currentState.SubState() == ESsmShutdownSubStateCritical || currentState.SubState() == ESsmShutdownSubStateNonCritical) )
hgs
parents:
diff changeset
   786
                {
hgs
parents:
diff changeset
   787
                if(iCount < iIniData.iCount)
hgs
parents:
diff changeset
   788
                    {
hgs
parents:
diff changeset
   789
                    iCount++;
hgs
parents:
diff changeset
   790
                    iSsmStateAwareSession->DeferAcknowledgement(iActiveNotifyOnChange->iStatus);
hgs
parents:
diff changeset
   791
                    iActiveNotifyOnChange->Activate(aIndex);
hgs
parents:
diff changeset
   792
                    IncOutstanding();
hgs
parents:
diff changeset
   793
                    }
hgs
parents:
diff changeset
   794
                else
hgs
parents:
diff changeset
   795
                    {
hgs
parents:
diff changeset
   796
                    //Acknowledge with success/failure
hgs
parents:
diff changeset
   797
                    if (iIniData.iAcknowledge)
hgs
parents:
diff changeset
   798
                        {
hgs
parents:
diff changeset
   799
                        iSsmStateAwareSession->AcknowledgeStateNotification(KErrNone);
hgs
parents:
diff changeset
   800
                        }
hgs
parents:
diff changeset
   801
                    }
hgs
parents:
diff changeset
   802
                }
hgs
parents:
diff changeset
   803
            else
hgs
parents:
diff changeset
   804
                {
hgs
parents:
diff changeset
   805
                INFO_PRINTF1(_L("CTestRStateAwareSession2: Deferring acknowledgement for a state that doesn't support transition monitoring"));
hgs
parents:
diff changeset
   806
                iSsmStateAwareSession->DeferAcknowledgement(iActiveNotifyOnChange->iStatus);
hgs
parents:
diff changeset
   807
                iActiveNotifyOnChange->Activate(aIndex);
hgs
parents:
diff changeset
   808
                IncOutstanding();
hgs
parents:
diff changeset
   809
                }
hgs
parents:
diff changeset
   810
            }
hgs
parents:
diff changeset
   811
        else
hgs
parents:
diff changeset
   812
            {
hgs
parents:
diff changeset
   813
            INFO_PRINTF2(_L("CTestRStateAwareSession2: RunL Error %d"), error);
hgs
parents:
diff changeset
   814
            SetAsyncError(aIndex, error);
hgs
parents:
diff changeset
   815
            }       
hgs
parents:
diff changeset
   816
        }
hgs
parents:
diff changeset
   817
    DecOutstanding();
hgs
parents:
diff changeset
   818
    }
hgs
parents:
diff changeset
   819
hgs
parents:
diff changeset
   820
/**
hgs
parents:
diff changeset
   821
 Virtual DoCancel - Request to cancel the asynchronous command
hgs
parents:
diff changeset
   822
 @see - MTPActiveCallback
hgs
parents:
diff changeset
   823
 @param aActive Active Object that DoCancel has been called on
hgs
parents:
diff changeset
   824
 @pre - N/A
hgs
parents:
diff changeset
   825
 @post - N/A
hgs
parents:
diff changeset
   826
 @leave system wide error code
hgs
parents:
diff changeset
   827
*/
hgs
parents:
diff changeset
   828
void CTestRStateAwareSession2::DoCancel(CActive* aActive, TInt aIndex)
hgs
parents:
diff changeset
   829
    {
hgs
parents:
diff changeset
   830
    INFO_PRINTF1(_L("CTestRStateAwareSession2: DoCancel"));
hgs
parents:
diff changeset
   831
    if(aActive ==  iActiveNotifyOnChange) 
hgs
parents:
diff changeset
   832
        {
hgs
parents:
diff changeset
   833
        TInt err =  iActiveNotifyOnChange->iStatus.Int(); 
hgs
parents:
diff changeset
   834
        if (err!=KErrNone)
hgs
parents:
diff changeset
   835
            {
hgs
parents:
diff changeset
   836
            ERR_PRINTF2(_L("CTestRStateAwareSession2: DoCancel Error %d"), err);
hgs
parents:
diff changeset
   837
            SetAsyncError(aIndex, err);
hgs
parents:
diff changeset
   838
            }
hgs
parents:
diff changeset
   839
        }   
hgs
parents:
diff changeset
   840
    DecOutstanding();   
hgs
parents:
diff changeset
   841
    }