satengine/satserver/Engine/src/CSatClientServiceReq.cpp
author hgs
Fri, 17 Sep 2010 17:09:13 +0300
changeset 48 78df25012fda
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2007 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 client requests.
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
hgs
parents:
diff changeset
    20
// INCLUDE FILES
hgs
parents:
diff changeset
    21
#include    "CSatClientServiceReq.h"
hgs
parents:
diff changeset
    22
#include    "MSatUtils.h"
hgs
parents:
diff changeset
    23
#include    "MSatSUiClientHandler.h"
hgs
parents:
diff changeset
    24
#include    "EnginePanic.h"
hgs
parents:
diff changeset
    25
#include    "SatLog.h"
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
_LIT( KTxtServer, "SatServer" );
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
// ============================ MEMBER FUNCTIONS ===============================
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    32
// CSatClientServiceReq::CSatClientServiceReq
hgs
parents:
diff changeset
    33
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
    34
// might leave.
hgs
parents:
diff changeset
    35
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    36
//
hgs
parents:
diff changeset
    37
CSatClientServiceReq::CSatClientServiceReq(
hgs
parents:
diff changeset
    38
    TSatServerRequest aRequest,
hgs
parents:
diff changeset
    39
    TSatServerRequest aResponse,
hgs
parents:
diff changeset
    40
    MSatCommand* aCommand,
hgs
parents:
diff changeset
    41
    MSatUtils& aUtils ) :
hgs
parents:
diff changeset
    42
    iHandledRequest( aRequest ),
hgs
parents:
diff changeset
    43
    iHandledResponse( aResponse ),
hgs
parents:
diff changeset
    44
    iResponseObserver( aCommand ),
hgs
parents:
diff changeset
    45
    iUtils( aUtils )
hgs
parents:
diff changeset
    46
    {
hgs
parents:
diff changeset
    47
    LOG( SIMPLE, "SATENGINE: \
hgs
parents:
diff changeset
    48
        CSatClientServiceReq::CSatClientServiceReq calling-exiting" )
hgs
parents:
diff changeset
    49
    }
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    52
// CSatClientServiceReq::NewL
hgs
parents:
diff changeset
    53
// Two-phased constructor.
hgs
parents:
diff changeset
    54
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    55
//
hgs
parents:
diff changeset
    56
CSatClientServiceReq* CSatClientServiceReq::NewL(
hgs
parents:
diff changeset
    57
    TSatServerRequest aRequest,
hgs
parents:
diff changeset
    58
    TSatServerRequest aResponse,
hgs
parents:
diff changeset
    59
    MSatCommand* aCommand,
hgs
parents:
diff changeset
    60
    MSatUtils& aUtils )
hgs
parents:
diff changeset
    61
    {
hgs
parents:
diff changeset
    62
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::NewL calling-exiting" )
hgs
parents:
diff changeset
    63
    return new ( ELeave ) CSatClientServiceReq(
hgs
parents:
diff changeset
    64
        aRequest, aResponse, aCommand, aUtils );
hgs
parents:
diff changeset
    65
    }
hgs
parents:
diff changeset
    66
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
// Destructor
hgs
parents:
diff changeset
    69
CSatClientServiceReq::~CSatClientServiceReq()
hgs
parents:
diff changeset
    70
    {
hgs
parents:
diff changeset
    71
    LOG( SIMPLE,
hgs
parents:
diff changeset
    72
        "SATENGINE: CSatClientServiceReq::~CSatClientServiceReq calling" )
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
    iResponseObserver = NULL;
hgs
parents:
diff changeset
    75
    iCmdData = 0;
hgs
parents:
diff changeset
    76
    iCmdRsp = 0;
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    LOG( SIMPLE,
hgs
parents:
diff changeset
    79
        "SATENGINE: CSatClientServiceReq::~CSatClientServiceReq exiting" )
hgs
parents:
diff changeset
    80
    }
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    83
// CSatClientServiceReq::HandleCommand
hgs
parents:
diff changeset
    84
// Handles the SIM command. If client has not yet requested service for this
hgs
parents:
diff changeset
    85
// SIM command, command is stored for later use.
hgs
parents:
diff changeset
    86
// (other items were commented in a header).
hgs
parents:
diff changeset
    87
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    88
//
hgs
parents:
diff changeset
    89
TBool CSatClientServiceReq::HandleCommand(
hgs
parents:
diff changeset
    90
    TDesC8* aCmdData, // Data to be sent to client.
hgs
parents:
diff changeset
    91
    TDes8* aCmdRsp, // Client is response is written to this.h
hgs
parents:
diff changeset
    92
    TSatServerRequest aRequest ) // Command from SIM
hgs
parents:
diff changeset
    93
    {
hgs
parents:
diff changeset
    94
    LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleCommand calling" )
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
    __ASSERT_ALWAYS( iResponseObserver,
hgs
parents:
diff changeset
    97
        PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
    TBool handled( EFalse );
hgs
parents:
diff changeset
   100
    // Handle the command here if the request op codes match.
hgs
parents:
diff changeset
   101
    if ( iHandledRequest == aRequest )
hgs
parents:
diff changeset
   102
        {
hgs
parents:
diff changeset
   103
        LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleCommand \
hgs
parents:
diff changeset
   104
             request op codes match" )
hgs
parents:
diff changeset
   105
        // Store the descriptors
hgs
parents:
diff changeset
   106
        iCmdData = aCmdData;
hgs
parents:
diff changeset
   107
        iCmdRsp = aCmdRsp;
hgs
parents:
diff changeset
   108
hgs
parents:
diff changeset
   109
        handled = ETrue;
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
        // Is the client already waiting for the command
hgs
parents:
diff changeset
   112
        if ( iRequestPending )
hgs
parents:
diff changeset
   113
            {
hgs
parents:
diff changeset
   114
            LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleCommand \
hgs
parents:
diff changeset
   115
                 RequestPending" )
hgs
parents:
diff changeset
   116
            // Request is served.
hgs
parents:
diff changeset
   117
            iRequestPending = EFalse;
hgs
parents:
diff changeset
   118
            SendDataToClient();
hgs
parents:
diff changeset
   119
            }
hgs
parents:
diff changeset
   120
        else
hgs
parents:
diff changeset
   121
            {
hgs
parents:
diff changeset
   122
            LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleCommand \
hgs
parents:
diff changeset
   123
                 no RequestPending" )
hgs
parents:
diff changeset
   124
            // Client request was not available, so command is waiting for
hgs
parents:
diff changeset
   125
            // client request.
hgs
parents:
diff changeset
   126
            iCmdPending = ETrue;
hgs
parents:
diff changeset
   127
            }
hgs
parents:
diff changeset
   128
        }
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
    LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleCommand exiting" )
hgs
parents:
diff changeset
   131
    return handled;
hgs
parents:
diff changeset
   132
    }
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   135
// CSatClientServiceReq::HandleRequest
hgs
parents:
diff changeset
   136
// Handles the client's request.
hgs
parents:
diff changeset
   137
// (other items were commented in a header).
hgs
parents:
diff changeset
   138
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   139
//
hgs
parents:
diff changeset
   140
TBool CSatClientServiceReq::HandleRequest(
hgs
parents:
diff changeset
   141
    const RMessage2& aRequest ) // Request from client.
hgs
parents:
diff changeset
   142
    {
hgs
parents:
diff changeset
   143
    LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleRequest calling" )
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
    TBool handled( EFalse );
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
    // Is the request handled here.
hgs
parents:
diff changeset
   148
    const TInt request( aRequest.Function() );
hgs
parents:
diff changeset
   149
    if ( request == iHandledRequest )
hgs
parents:
diff changeset
   150
        {
hgs
parents:
diff changeset
   151
        LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleRequest \
hgs
parents:
diff changeset
   152
             handle request" )
hgs
parents:
diff changeset
   153
        handled = ETrue;
hgs
parents:
diff changeset
   154
        iRequest = aRequest;
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
        // Is the command waiting for client.
hgs
parents:
diff changeset
   157
        if ( iCmdPending )
hgs
parents:
diff changeset
   158
            {
hgs
parents:
diff changeset
   159
            LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleRequest \
hgs
parents:
diff changeset
   160
            iCmdPending" )
hgs
parents:
diff changeset
   161
            iCmdPending = EFalse;
hgs
parents:
diff changeset
   162
            SendDataToClient();
hgs
parents:
diff changeset
   163
            }
hgs
parents:
diff changeset
   164
        else
hgs
parents:
diff changeset
   165
            {
hgs
parents:
diff changeset
   166
            // Command has not yet arrived from SIM, so
hgs
parents:
diff changeset
   167
            // wait for the command.
hgs
parents:
diff changeset
   168
            iRequestPending = ETrue;
hgs
parents:
diff changeset
   169
            }
hgs
parents:
diff changeset
   170
        }
hgs
parents:
diff changeset
   171
    // Is the response handled here.
hgs
parents:
diff changeset
   172
    else if ( request == iHandledResponse )
hgs
parents:
diff changeset
   173
        {
hgs
parents:
diff changeset
   174
        LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleRequest \
hgs
parents:
diff changeset
   175
             handle response" )
hgs
parents:
diff changeset
   176
        handled = ETrue;
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
        TRAPD( res, aRequest.ReadL( 0, *iCmdRsp ) );
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
        // Send the response further only if IPC succeeded.
hgs
parents:
diff changeset
   181
        if ( KErrNone != res )
hgs
parents:
diff changeset
   182
            {
hgs
parents:
diff changeset
   183
            LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleRequest \
hgs
parents:
diff changeset
   184
            KErrNone != res" )
hgs
parents:
diff changeset
   185
            iRequest.Panic( KTxtServer, ESatSBadDescriptor );
hgs
parents:
diff changeset
   186
            }
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
        // Release client first, then handle the response
hgs
parents:
diff changeset
   189
        aRequest.Complete( KErrNone );
hgs
parents:
diff changeset
   190
        // Notify command that response is available.
hgs
parents:
diff changeset
   191
        iResponseObserver->ClientResponse();
hgs
parents:
diff changeset
   192
        }
hgs
parents:
diff changeset
   193
    else
hgs
parents:
diff changeset
   194
        {
hgs
parents:
diff changeset
   195
        }
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
    LOG( DETAILED, "SATENGINE: CSatClientServiceReq::HandleRequest exiting" )
hgs
parents:
diff changeset
   198
    return handled;
hgs
parents:
diff changeset
   199
    }
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   202
// CSatClientServiceReq::SendDataToClient
hgs
parents:
diff changeset
   203
// Writes the data to client address space and completes the iRequest.
hgs
parents:
diff changeset
   204
// (other items were commented in a header).
hgs
parents:
diff changeset
   205
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   206
//
hgs
parents:
diff changeset
   207
void CSatClientServiceReq::SendDataToClient()
hgs
parents:
diff changeset
   208
    {
hgs
parents:
diff changeset
   209
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::SendDataToClient calling" )
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
    TRAPD( res,iRequest.WriteL( 0, *iCmdData ) );
hgs
parents:
diff changeset
   212
    LOG2( SIMPLE, "SATENGINE: CSatClientServiceReq::SendDataToClient res: %d",
hgs
parents:
diff changeset
   213
          res )
hgs
parents:
diff changeset
   214
    if ( KErrNone != res )
hgs
parents:
diff changeset
   215
        {
hgs
parents:
diff changeset
   216
        iRequest.Panic( KTxtServer, ESatSBadDescriptor );
hgs
parents:
diff changeset
   217
        }
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
    iRequest.Complete( KErrNone );
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
    // If UI is not launched by user, make sure UI is in foreground
hgs
parents:
diff changeset
   222
    if ( !iUtils.SatUiHandler().UiLaunchedByUser() )
hgs
parents:
diff changeset
   223
        {
hgs
parents:
diff changeset
   224
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   225
        "SATENGINE: CSatClientServiceReq::SendDataToClient \
hgs
parents:
diff changeset
   226
        EBringSatUiToForeGround" )
hgs
parents:
diff changeset
   227
        iUtils.NotifyEvent( MSatUtils::EBringSatUiToForeGround );
hgs
parents:
diff changeset
   228
        }
hgs
parents:
diff changeset
   229
hgs
parents:
diff changeset
   230
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::SendDataToClient exiting" )
hgs
parents:
diff changeset
   231
    }
hgs
parents:
diff changeset
   232
hgs
parents:
diff changeset
   233
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   234
// CSatClientServiceReq::IsMyRequest
hgs
parents:
diff changeset
   235
// (other items were commented in a header).
hgs
parents:
diff changeset
   236
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   237
//
hgs
parents:
diff changeset
   238
TBool CSatClientServiceReq::IsMyRequest( const TSatServerRequest aRequest )
hgs
parents:
diff changeset
   239
    {
hgs
parents:
diff changeset
   240
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::IsMyRequest calling" )
hgs
parents:
diff changeset
   241
    TBool myRequest( EFalse );
hgs
parents:
diff changeset
   242
hgs
parents:
diff changeset
   243
    if ( iHandledRequest == aRequest )
hgs
parents:
diff changeset
   244
        {
hgs
parents:
diff changeset
   245
        LOG( SIMPLE,
hgs
parents:
diff changeset
   246
            "SATENGINE: CSatClientServiceReq::IsMyRequest" )
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
        myRequest = ETrue;
hgs
parents:
diff changeset
   249
        }
hgs
parents:
diff changeset
   250
    LOG2( SIMPLE, "SATENGINE: CSatClientServiceReq::IsMyRequest exiting, \
hgs
parents:
diff changeset
   251
          return: %d", myRequest )
hgs
parents:
diff changeset
   252
    return myRequest;
hgs
parents:
diff changeset
   253
    }
hgs
parents:
diff changeset
   254
hgs
parents:
diff changeset
   255
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   256
// CSatClientServiceReq::SetCommandHandler
hgs
parents:
diff changeset
   257
// (other items were commented in a header).
hgs
parents:
diff changeset
   258
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   259
//
hgs
parents:
diff changeset
   260
void CSatClientServiceReq::SetCommandHandler( MSatCommand* aCommand )
hgs
parents:
diff changeset
   261
    {
hgs
parents:
diff changeset
   262
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::SetCommandHandler calling" )
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
    iResponseObserver = aCommand;
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::SetCommandHandler exiting" )
hgs
parents:
diff changeset
   267
    }
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   270
// CSatClientServiceReq::Reset
hgs
parents:
diff changeset
   271
// Resets member data
hgs
parents:
diff changeset
   272
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   273
//
hgs
parents:
diff changeset
   274
void CSatClientServiceReq::Reset()
hgs
parents:
diff changeset
   275
    {
hgs
parents:
diff changeset
   276
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::Reset calling" )
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
    // Check is request pending
hgs
parents:
diff changeset
   279
    if ( !iRequestPending )
hgs
parents:
diff changeset
   280
        {
hgs
parents:
diff changeset
   281
        // Request not pending meaning that command is executing.
hgs
parents:
diff changeset
   282
        // Send client response to prevent SIM to lock
hgs
parents:
diff changeset
   283
        LOG( NORMAL, " Request is not pending" )
hgs
parents:
diff changeset
   284
        // Notify command that response is available.
hgs
parents:
diff changeset
   285
        iResponseObserver->ClientResponse();
hgs
parents:
diff changeset
   286
        }
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
    // Clean data
hgs
parents:
diff changeset
   289
    iCmdData = NULL;
hgs
parents:
diff changeset
   290
    iCmdRsp = NULL;
hgs
parents:
diff changeset
   291
    iCmdPending = EFalse;
hgs
parents:
diff changeset
   292
    iRequestPending = EFalse;
hgs
parents:
diff changeset
   293
    // We don't reset iResponseObserver
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    LOG( SIMPLE, "SATENGINE: CSatClientServiceReq::Reset exiting" )
hgs
parents:
diff changeset
   296
    }
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
//  End of File