satengine/satserver/Engine/src/CSatSSession.cpp
author hgs
Wed, 21 Jul 2010 18:26:52 +0300
changeset 33 8d5d7fcf9b59
permissions -rw-r--r--
201027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2009 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:  The Sat Server session manages a connection to a client and
hgs
parents:
diff changeset
    15
*                handles client requests.
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    <fbs.h>
hgs
parents:
diff changeset
    21
#include    "MSatUtils.h"
hgs
parents:
diff changeset
    22
#include    "CSatIconHandler.h"
hgs
parents:
diff changeset
    23
#include    "CSatSSession.h"
hgs
parents:
diff changeset
    24
#include    "CSatSUiSubSession.h"
hgs
parents:
diff changeset
    25
#include    "CSatSServer.h"
hgs
parents:
diff changeset
    26
#include    "EnginePanic.h"
hgs
parents:
diff changeset
    27
#include    "SatLog.h"
hgs
parents:
diff changeset
    28
#include    "TSatEventMediator.h"
hgs
parents:
diff changeset
    29
#include    "SatSOpcodes.h"
hgs
parents:
diff changeset
    30
#include    "MSatApi.h"
hgs
parents:
diff changeset
    31
#include    "MSatUtils.h"
hgs
parents:
diff changeset
    32
#include    "CSatSRefreshSubSession.h"
hgs
parents:
diff changeset
    33
#include    "MThreadDeathNotifier.h"
hgs
parents:
diff changeset
    34
#include    "CSatSIconSubSession.h"
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
const TUint8 KHandleParam( 3 );
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    41
// Class constructor
hgs
parents:
diff changeset
    42
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    43
//
hgs
parents:
diff changeset
    44
CSatSSession::CSatSSession(
hgs
parents:
diff changeset
    45
    CSatSServer* aServer,
hgs
parents:
diff changeset
    46
    TSatEventMediator& aEventMediator,
hgs
parents:
diff changeset
    47
    MSatApi& aSatApi,
hgs
parents:
diff changeset
    48
    MThreadDeathNotifier& aThreadDeathNotifier ) :
hgs
parents:
diff changeset
    49
    CSession2(),
hgs
parents:
diff changeset
    50
    iSatServer( aServer ),
hgs
parents:
diff changeset
    51
    iEventMediator( aEventMediator ),
hgs
parents:
diff changeset
    52
    iSatApi( aSatApi ),
hgs
parents:
diff changeset
    53
    iThreadDeathNotifier( aThreadDeathNotifier )
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
    LOG( SIMPLE, "SATENGINE: CSatSSession::CSatSSession calling-exiting" )
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// Two-phased constructor
hgs
parents:
diff changeset
    60
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
//
hgs
parents:
diff changeset
    62
CSatSSession* CSatSSession::NewL(
hgs
parents:
diff changeset
    63
    CSatSServer* aServer,
hgs
parents:
diff changeset
    64
    TSatEventMediator& aEventMediator,
hgs
parents:
diff changeset
    65
    MSatApi& aSatApi,
hgs
parents:
diff changeset
    66
    MThreadDeathNotifier& aThreadDeathNotifier )
hgs
parents:
diff changeset
    67
    {
hgs
parents:
diff changeset
    68
    LOG( SIMPLE, "SATENGINE: CSatSSession::NewL calling" )
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
    // Perform construction.
hgs
parents:
diff changeset
    71
    CSatSSession* self =
hgs
parents:
diff changeset
    72
        new ( ELeave ) CSatSSession(
hgs
parents:
diff changeset
    73
            aServer,
hgs
parents:
diff changeset
    74
            aEventMediator,
hgs
parents:
diff changeset
    75
            aSatApi,
hgs
parents:
diff changeset
    76
            aThreadDeathNotifier );
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
    79
    self->ConstructL();
hgs
parents:
diff changeset
    80
    CleanupStack::Pop( self );
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
    LOG( SIMPLE, "SATENGINE: CSatSSession::NewL exiting" )
hgs
parents:
diff changeset
    83
    return self;
hgs
parents:
diff changeset
    84
    }
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    87
// Destructor
hgs
parents:
diff changeset
    88
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    89
//
hgs
parents:
diff changeset
    90
CSatSSession::~CSatSSession()
hgs
parents:
diff changeset
    91
    {
hgs
parents:
diff changeset
    92
    LOG( SIMPLE, "SATENGINE: CSatSSession::~CSatSSession calling" )
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
    delete iSubSessionIx;
hgs
parents:
diff changeset
    95
    delete iSubSessionCon;
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
    iSatServer = NULL;
hgs
parents:
diff changeset
    98
    iUiSubSession = NULL;
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    LOG( SIMPLE, "SATENGINE: CSatSSession::~CSatSSession exiting" )
hgs
parents:
diff changeset
   101
    }
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   104
// CSatSSession::ConstructL
hgs
parents:
diff changeset
   105
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   106
//
hgs
parents:
diff changeset
   107
void CSatSSession::ConstructL()
hgs
parents:
diff changeset
   108
    {
hgs
parents:
diff changeset
   109
    LOG( SIMPLE, "SATENGINE: CSatSSession::ConstructL calling" )
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    iSubSessionCon = iSatServer->CreateNewContainerL();
hgs
parents:
diff changeset
   112
    iSubSessionIx = CObjectIx::NewL();
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
    LOG( SIMPLE, "SATENGINE: CSatSSession::ConstructL exiting" )
hgs
parents:
diff changeset
   115
    }
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   118
// CSatSSession::UiSubSession
hgs
parents:
diff changeset
   119
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   120
//
hgs
parents:
diff changeset
   121
MSatUiSession* CSatSSession::UiSubSession()
hgs
parents:
diff changeset
   122
    {
hgs
parents:
diff changeset
   123
    LOG( DETAILED, "SATENGINE: CSatSSession::UiSubSession calling" )
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
    MSatUiSession* session = iUiSubSession;
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
    LOG( DETAILED, "SATENGINE: CSatSSession::UiSubSession exiting" )
hgs
parents:
diff changeset
   128
    return session;
hgs
parents:
diff changeset
   129
    }
hgs
parents:
diff changeset
   130
hgs
parents:
diff changeset
   131
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   132
// CSatSSession::CloseSubSession
hgs
parents:
diff changeset
   133
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   134
TBool CSatSSession::CloseSubSession( const RMessage2& aMessage )
hgs
parents:
diff changeset
   135
    {
hgs
parents:
diff changeset
   136
    LOG( SIMPLE, "SATENGINE: CSatSSession::CloseSubSession calling" )
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
    // If subssession exists, return TRUE. Otherwise, return FALSE
hgs
parents:
diff changeset
   139
    TInt result = ETrue;
hgs
parents:
diff changeset
   140
    // Read the handle from client.
hgs
parents:
diff changeset
   141
    const TInt handle( aMessage.Int3() );
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    // Check that subsession exists before deleting the subsession
hgs
parents:
diff changeset
   144
    if ( iSubSessionIx->At( handle ) )
hgs
parents:
diff changeset
   145
        {
hgs
parents:
diff changeset
   146
        LOG(
hgs
parents:
diff changeset
   147
        SIMPLE, "SATENGINE: CSatSSession::CloseSubSession subsession exists" )
hgs
parents:
diff changeset
   148
        // Delete the sub-session.
hgs
parents:
diff changeset
   149
        iSubSessionIx->Remove( handle );
hgs
parents:
diff changeset
   150
        }
hgs
parents:
diff changeset
   151
    else
hgs
parents:
diff changeset
   152
        {
hgs
parents:
diff changeset
   153
        LOG( SIMPLE, 
hgs
parents:
diff changeset
   154
        "SATENGINE: CSatSSession::CloseSubSession subsession doesn't exist" )
hgs
parents:
diff changeset
   155
        // Sub-session handle was not valid.
hgs
parents:
diff changeset
   156
        PanicClient( aMessage, ESatSBadDescriptor );
hgs
parents:
diff changeset
   157
        result = EFalse;
hgs
parents:
diff changeset
   158
        }
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    LOG( SIMPLE, "SATENGINE: CSatSSession::CloseSubSession exiting" )
hgs
parents:
diff changeset
   161
    return result;
hgs
parents:
diff changeset
   162
    }
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   165
// CSatSSession::GetSubSessionFromHandle
hgs
parents:
diff changeset
   166
// Returns the subsession which handle is aHandle.
hgs
parents:
diff changeset
   167
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   168
CSatSSubSession* CSatSSession::GetSubSessionFromHandle( TInt aHandle ) const
hgs
parents:
diff changeset
   169
    {
hgs
parents:
diff changeset
   170
    LOG( DETAILED, "SATENGINE: CSatSSession::GetSubSessionFromHandle calling" )
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
    CSatSSubSession* session =
hgs
parents:
diff changeset
   173
        static_cast<CSatSSubSession*>( iSubSessionIx->At( aHandle ) );
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    LOG( DETAILED, "SATENGINE: CSatSSession::GetSubSessionFromHandle exiting" )
hgs
parents:
diff changeset
   176
    return session;
hgs
parents:
diff changeset
   177
    }
hgs
parents:
diff changeset
   178
hgs
parents:
diff changeset
   179
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   180
// CSatSSession::AddSubSessionL
hgs
parents:
diff changeset
   181
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   182
void CSatSSession::AddSubSessionL(
hgs
parents:
diff changeset
   183
    CSatSSubSession* aSubSession,
hgs
parents:
diff changeset
   184
    const RMessage2& aMessage )
hgs
parents:
diff changeset
   185
    {
hgs
parents:
diff changeset
   186
    LOG( SIMPLE, "SATENGINE: CSatSSession::AddSubSessionL calling" )
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
    __ASSERT_ALWAYS( aSubSession, PanicSatEngine( ESatEngineNullPointer ) );
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    CleanupStack::PushL( aSubSession );
hgs
parents:
diff changeset
   191
    iSubSessionCon->AddL( aSubSession );
hgs
parents:
diff changeset
   192
    const TInt handle( iSubSessionIx->AddL( aSubSession ) );
hgs
parents:
diff changeset
   193
    CleanupStack::Pop( aSubSession );
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
    // Send the handle to client.
hgs
parents:
diff changeset
   196
    TPckg<TInt> handlePckg( handle );
hgs
parents:
diff changeset
   197
    TRAPD( err, aMessage.WriteL( KHandleParam, handlePckg ) );
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
    if ( KErrNone != err )
hgs
parents:
diff changeset
   200
        {
hgs
parents:
diff changeset
   201
        // Remove the handle, will also cause destruction
hgs
parents:
diff changeset
   202
        // of session.
hgs
parents:
diff changeset
   203
        iSubSessionIx->Remove( handle );
hgs
parents:
diff changeset
   204
        LOG2( SIMPLE, 
hgs
parents:
diff changeset
   205
        "SATENGINE: CSatSSession::AddSubSessionL panic: %i", err )
hgs
parents:
diff changeset
   206
        PanicClient( aMessage, ESatSBadDescriptor );
hgs
parents:
diff changeset
   207
        User::Leave( err ); 
hgs
parents:
diff changeset
   208
        }
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
    LOG( SIMPLE, "SATENGINE: CSatSSession::AddSubSessionL exiting" )
hgs
parents:
diff changeset
   211
    }
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   214
// CSatSSession::ServiceL
hgs
parents:
diff changeset
   215
// Dispatches the commands to their appropriate handlers. For asynchronous
hgs
parents:
diff changeset
   216
// messages, the message object is save for future processing.
hgs
parents:
diff changeset
   217
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   218
//
hgs
parents:
diff changeset
   219
void CSatSSession::ServiceL( const RMessage2& aMessage )
hgs
parents:
diff changeset
   220
    {
hgs
parents:
diff changeset
   221
    LOG( SIMPLE, "SATENGINE: CSatSSession::ServiceL calling" )
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
    if ( !aMessage.HasCapability( ECapabilityReadDeviceData ) )
hgs
parents:
diff changeset
   224
        {
hgs
parents:
diff changeset
   225
        // Legal client should at least have ReadDeviceData capability
hgs
parents:
diff changeset
   226
        LOG( SIMPLE, "SATENGINE: CSatSSession::ServiceL client \
hgs
parents:
diff changeset
   227
        has no ReadDeviceData capability. Panic it" )
hgs
parents:
diff changeset
   228
        PanicClient( aMessage, ESatSBadDescriptor );
hgs
parents:
diff changeset
   229
        }
hgs
parents:
diff changeset
   230
    else
hgs
parents:
diff changeset
   231
        {
hgs
parents:
diff changeset
   232
        // Client has enough capability
hgs
parents:
diff changeset
   233
        
hgs
parents:
diff changeset
   234
        LOG2( NORMAL, "SATENGINE: CSatSSession::ServiceL \
hgs
parents:
diff changeset
   235
              aMessage.Function is %d", aMessage.Function() )
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
        switch ( aMessage.Function() )
hgs
parents:
diff changeset
   238
            {
hgs
parents:
diff changeset
   239
            //  Ui Sub-session indicator.
hgs
parents:
diff changeset
   240
            case ESatSOpenUiSubSession:
hgs
parents:
diff changeset
   241
                {
hgs
parents:
diff changeset
   242
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   243
                "SATENGINE: CSatSSession::ServiceL ESatSOpenUiSubSession" )
hgs
parents:
diff changeset
   244
                CSatSUiSubSession* subsession = CSatSUiSubSession::NewL(
hgs
parents:
diff changeset
   245
                    *this,
hgs
parents:
diff changeset
   246
                    iSatApi,
hgs
parents:
diff changeset
   247
                    iEventMediator );
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
                TRAPD( err, AddSubSessionL( subsession, aMessage ) );
hgs
parents:
diff changeset
   250
                if ( KErrNone == err )
hgs
parents:
diff changeset
   251
                    {
hgs
parents:
diff changeset
   252
                    // Store the ui clients thread handle.
hgs
parents:
diff changeset
   253
                    RThread uiClientThread;
hgs
parents:
diff changeset
   254
                    User::LeaveIfError( aMessage.Client( uiClientThread ) );
hgs
parents:
diff changeset
   255
hgs
parents:
diff changeset
   256
                    iUiSubSession = subsession;
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
                    // Start observing threads state
hgs
parents:
diff changeset
   259
                    TThreadId threadId = uiClientThread.Id();
hgs
parents:
diff changeset
   260
                    iThreadDeathNotifier.SetObserveredThread( threadId );
hgs
parents:
diff changeset
   261
                    iThreadDeathNotifier.StartObservingThread();
hgs
parents:
diff changeset
   262
                    uiClientThread.Close();
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
                    // Complete message before notifying SAT Server since notifying may
hgs
parents:
diff changeset
   265
                    // be very time consuming operation dependening on the situation
hgs
parents:
diff changeset
   266
                    aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
                    // Event has to be send after the iUiSubSession has been set.
hgs
parents:
diff changeset
   269
                    // Otherwise NULL pointer error in commandhandlers.
hgs
parents:
diff changeset
   270
                    iEventMediator.Notify( MSatUtils::ESatUiLaunched );
hgs
parents:
diff changeset
   271
                    }
hgs
parents:
diff changeset
   272
                break;
hgs
parents:
diff changeset
   273
                }
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
            case ESatSOpenRefreshSubSession:
hgs
parents:
diff changeset
   276
                {
hgs
parents:
diff changeset
   277
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   278
                "SATENGINE: CSatSSession::ServiceL ESatSOpenRefreshSubSession" )
hgs
parents:
diff changeset
   279
                CSatSRefreshSubSession* subsession = CSatSRefreshSubSession::NewL(
hgs
parents:
diff changeset
   280
                    *this,
hgs
parents:
diff changeset
   281
                    iEventMediator );
hgs
parents:
diff changeset
   282
                
hgs
parents:
diff changeset
   283
                TRAPD( err, AddSubSessionL( subsession, aMessage ) );
hgs
parents:
diff changeset
   284
                if ( KErrNone == err )
hgs
parents:
diff changeset
   285
                    {
hgs
parents:
diff changeset
   286
                    aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   287
                    }
hgs
parents:
diff changeset
   288
                break;
hgs
parents:
diff changeset
   289
                }
hgs
parents:
diff changeset
   290
hgs
parents:
diff changeset
   291
            case ESatSOpenIconSubSession:
hgs
parents:
diff changeset
   292
                {
hgs
parents:
diff changeset
   293
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   294
                "SATENGINE: CSatSSession::ServiceL ESatSOpenIconSubSession" )
hgs
parents:
diff changeset
   295
                CSatSIconSubSession* subsession = CSatSIconSubSession::NewL(
hgs
parents:
diff changeset
   296
                    *this,
hgs
parents:
diff changeset
   297
                    iEventMediator );
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
                TRAPD( err, AddSubSessionL( subsession, aMessage ) );
hgs
parents:
diff changeset
   300
                if ( KErrNone == err )
hgs
parents:
diff changeset
   301
                    {
hgs
parents:
diff changeset
   302
                    aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   303
                    }
hgs
parents:
diff changeset
   304
                break;
hgs
parents:
diff changeset
   305
                }
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
            case ESatSCloseUiSubSession:
hgs
parents:
diff changeset
   308
                {
hgs
parents:
diff changeset
   309
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   310
                "SATENGINE: CSatSSession::ServiceL ESatSCloseUiSubSession" )
hgs
parents:
diff changeset
   311
                iEventMediator.Notify( MSatUtils::ESatUiClosed );
hgs
parents:
diff changeset
   312
                iSatUiSubSessionClosed = ETrue;
hgs
parents:
diff changeset
   313
                iUiSubSession = NULL;
hgs
parents:
diff changeset
   314
                if ( CloseSubSession( aMessage ) )
hgs
parents:
diff changeset
   315
                    {
hgs
parents:
diff changeset
   316
                    aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   317
                    }
hgs
parents:
diff changeset
   318
                break;
hgs
parents:
diff changeset
   319
                }
hgs
parents:
diff changeset
   320
hgs
parents:
diff changeset
   321
            case ESatSCloseRefreshSubSession:
hgs
parents:
diff changeset
   322
                {
hgs
parents:
diff changeset
   323
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   324
                "SATENGINE: CSatSSession::ServiceL ESatSCloseRefreshSubSession" )
hgs
parents:
diff changeset
   325
                if ( CloseSubSession( aMessage ) )
hgs
parents:
diff changeset
   326
                    {
hgs
parents:
diff changeset
   327
                    aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   328
                    }
hgs
parents:
diff changeset
   329
                break;
hgs
parents:
diff changeset
   330
                }
hgs
parents:
diff changeset
   331
hgs
parents:
diff changeset
   332
            case ESatSCloseIconSubSession:
hgs
parents:
diff changeset
   333
                {
hgs
parents:
diff changeset
   334
                LOG( SIMPLE, 
hgs
parents:
diff changeset
   335
                "SATENGINE: CSatSSession::ServiceL ESatSCloseIconSubSession" )
hgs
parents:
diff changeset
   336
                if ( CloseSubSession( aMessage ) )
hgs
parents:
diff changeset
   337
                    {
hgs
parents:
diff changeset
   338
                    aMessage.Complete( KErrNone );
hgs
parents:
diff changeset
   339
                    }
hgs
parents:
diff changeset
   340
                break;
hgs
parents:
diff changeset
   341
                }
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
            default:
hgs
parents:
diff changeset
   344
                {
hgs
parents:
diff changeset
   345
                LOG( SIMPLE, "SATENGINE: CSatSSession::ServiceL others" )
hgs
parents:
diff changeset
   346
                CSatSSubSession* subsession =
hgs
parents:
diff changeset
   347
                    GetSubSessionFromHandle( aMessage.Int3() );
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
                if ( NULL != subsession )
hgs
parents:
diff changeset
   350
                    {
hgs
parents:
diff changeset
   351
                    LOG( SIMPLE, 
hgs
parents:
diff changeset
   352
                    "SATENGINE: CSatSSession::ServiceL NULL != subsession" )
hgs
parents:
diff changeset
   353
                    subsession->HandleCommandL( aMessage );
hgs
parents:
diff changeset
   354
                    }
hgs
parents:
diff changeset
   355
                else
hgs
parents:
diff changeset
   356
                    {
hgs
parents:
diff changeset
   357
                    PanicClient( aMessage, ESatSBadDescriptor );
hgs
parents:
diff changeset
   358
                    }
hgs
parents:
diff changeset
   359
                }
hgs
parents:
diff changeset
   360
            }
hgs
parents:
diff changeset
   361
        }
hgs
parents:
diff changeset
   362
        LOG( SIMPLE, "SATENGINE: CSatSSession::ServiceL exiting" )
hgs
parents:
diff changeset
   363
    }
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   366
// CSatSSession::PanicClient
hgs
parents:
diff changeset
   367
// Panics the client.
hgs
parents:
diff changeset
   368
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   369
//
hgs
parents:
diff changeset
   370
void CSatSSession::PanicClient( const RMessage2& aMessage, TInt aPanic ) const
hgs
parents:
diff changeset
   371
    {
hgs
parents:
diff changeset
   372
    LOG( SIMPLE, "SATENGINE: CSatSSession::PanicClient calling" )
hgs
parents:
diff changeset
   373
hgs
parents:
diff changeset
   374
    _LIT( KTxtServer, "SatS server" );
hgs
parents:
diff changeset
   375
    aMessage.Panic( KTxtServer, aPanic );
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
    LOG( SIMPLE, "SATENGINE: CSatSSession::PanicClient exiting" )
hgs
parents:
diff changeset
   378
    }
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   381
// CSatSSession::NotifyThreadDeathMonitor
hgs
parents:
diff changeset
   382
// Notifies ThreadDeathMonitor for thread is dying
hgs
parents:
diff changeset
   383
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   384
//
hgs
parents:
diff changeset
   385
void CSatSSession::NotifyThreadDeathMonitor()
hgs
parents:
diff changeset
   386
    {
hgs
parents:
diff changeset
   387
    LOG( SIMPLE, "SATENGINE: CSatSSession::NotifyThreadDeathMonitor calling" )
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
    iThreadDeathNotifier.NotifyThreadDeath();
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
    LOG( SIMPLE, "SATENGINE: CSatSSession::NotifyThreadDeathMonitor exiting" )
hgs
parents:
diff changeset
   392
    }
hgs
parents:
diff changeset
   393
hgs
parents:
diff changeset
   394
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   395
// CSatSSession::SatServer
hgs
parents:
diff changeset
   396
// Returns pointer to SatServer - class
hgs
parents:
diff changeset
   397
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   398
//
hgs
parents:
diff changeset
   399
CSatSServer* CSatSSession::SatServer()
hgs
parents:
diff changeset
   400
    {
hgs
parents:
diff changeset
   401
    LOG( SIMPLE, "SATENGINE: CSatSSession::SatServer calling-exiting" )
hgs
parents:
diff changeset
   402
    return iSatServer;
hgs
parents:
diff changeset
   403
    }
hgs
parents:
diff changeset
   404
hgs
parents:
diff changeset
   405
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   406
// CSatSSession::UiSessionClosed
hgs
parents:
diff changeset
   407
// Notifies SatEngine that UI session has closed
hgs
parents:
diff changeset
   408
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   409
//
hgs
parents:
diff changeset
   410
void CSatSSession::UiSessionClosed()
hgs
parents:
diff changeset
   411
    {
hgs
parents:
diff changeset
   412
    LOG( SIMPLE, "SATENGINE: CSatSSession::UiSessionClosed calling" )
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
    if ( !iSatUiSubSessionClosed )
hgs
parents:
diff changeset
   415
        {
hgs
parents:
diff changeset
   416
        LOG( SIMPLE, "SATENGINE: CSatSSession::UiSessionClosed close satui" )
hgs
parents:
diff changeset
   417
        iEventMediator.Notify( MSatUtils::ESatUiClosed );
hgs
parents:
diff changeset
   418
        iSatUiSubSessionClosed = ETrue;
hgs
parents:
diff changeset
   419
        }
hgs
parents:
diff changeset
   420
hgs
parents:
diff changeset
   421
    LOG( SIMPLE, "SATENGINE: CSatSSession::UiSessionClosed exiting" )
hgs
parents:
diff changeset
   422
    }
hgs
parents:
diff changeset
   423
hgs
parents:
diff changeset
   424
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   425
// CSatSSession::CreateIconHandlerL
hgs
parents:
diff changeset
   426
// Creates and returns CSatIconHandler
hgs
parents:
diff changeset
   427
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   428
//
hgs
parents:
diff changeset
   429
MSatSIconAPI* CSatSSession::CreateIconHandlerL()
hgs
parents:
diff changeset
   430
    {
hgs
parents:
diff changeset
   431
    LOG( SIMPLE, "SATENGINE: CSatSSession::CreateIconHandlerL calling-exiting" )
hgs
parents:
diff changeset
   432
    return new( ELeave ) CSatIconHandler( iSatApi );
hgs
parents:
diff changeset
   433
    }