cbs/cbsserver/ServerSrc/CCbsServer.cpp
author hgs
Tue, 10 Aug 2010 13:19:41 +0300
changeset 38 bc103bfb69cf
parent 33 8d5d7fcf9b59
permissions -rw-r--r--
201031_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2003-2008 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:  This module contains the implementation of CCbsServer class 
hgs
parents:
diff changeset
    15
*                member functions.
hgs
parents:
diff changeset
    16
*   
hgs
parents:
diff changeset
    17
*                This file contains the entry point for CbsServer.exe/dll.  
hgs
parents:
diff changeset
    18
*
hgs
parents:
diff changeset
    19
*/
hgs
parents:
diff changeset
    20
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// INCLUDE FILES
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#include <e32svr.h>
hgs
parents:
diff changeset
    25
#include <barsc.h>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
#include "CbsCommon.h"
hgs
parents:
diff changeset
    28
#include "CCbsScheduler.h"
hgs
parents:
diff changeset
    29
#include "CbsServerConstants.h"
hgs
parents:
diff changeset
    30
#include "CbsServerPanic.h"
hgs
parents:
diff changeset
    31
#include "CCbsServer.h"
hgs
parents:
diff changeset
    32
#include "CCbsSession.h"
hgs
parents:
diff changeset
    33
#include "CbsUtils.h"
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
#include "CCbsRecEtel.h"
hgs
parents:
diff changeset
    36
#include "CCbsDbImp.H"
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
#include "CCbsDbImp.H"
hgs
parents:
diff changeset
    39
#include "CCbsRecEtel.h"
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
#include "CCbsDbImpSettings.H"
hgs
parents:
diff changeset
    42
#include "CCbsDbImpTopicList.h"
hgs
parents:
diff changeset
    43
#include "CCbsReceiverHelper.h"
hgs
parents:
diff changeset
    44
#include "CCbsSatRefresh.h"
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
#include <e32property.h>
hgs
parents:
diff changeset
    47
#include "CbsServerInternalPSKeys.h"
hgs
parents:
diff changeset
    48
#include "CCbsShutdownMonitor.h"
hgs
parents:
diff changeset
    49
#include "CbsLogger.h"
hgs
parents:
diff changeset
    50
#include "CbsServerUid.h"
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
// LOCAL FUNCTION PROTOTYPES
hgs
parents:
diff changeset
    54
LOCAL_C void InitServerL();
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
// ==================== LOCAL FUNCTIONS ====================
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    59
// InitServerL
hgs
parents:
diff changeset
    60
// Initializes and starts CBS Server.
hgs
parents:
diff changeset
    61
// Creates the active scheduler and an instance of the server.
hgs
parents:
diff changeset
    62
// Returns: None
hgs
parents:
diff changeset
    63
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    64
//
hgs
parents:
diff changeset
    65
LOCAL_C void InitServerL()
hgs
parents:
diff changeset
    66
    {
hgs
parents:
diff changeset
    67
    CBSLOGSTRING("CBSSERVER: >>> InitServerL()");
hgs
parents:
diff changeset
    68
    // perform init code under the cleanup stack
hgs
parents:
diff changeset
    69
	User::RenameThread( KCbsServerName );
hgs
parents:
diff changeset
    70
    
hgs
parents:
diff changeset
    71
    // create server - if one of this name does not already exist
hgs
parents:
diff changeset
    72
    TFindServer findCbsServer( KCbsServerName );
hgs
parents:
diff changeset
    73
    TFullName pathName;
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
    RMutex serverStartMutex;
hgs
parents:
diff changeset
    76
    TInt createErr( serverStartMutex.CreateGlobal( _L("CBSSERVERMTX") ) );
hgs
parents:
diff changeset
    77
    if ( createErr )
hgs
parents:
diff changeset
    78
        {
hgs
parents:
diff changeset
    79
        TInt openErr( serverStartMutex.OpenGlobal( _L("CBSSERVERMTX") ) );
hgs
parents:
diff changeset
    80
        User::LeaveIfError( openErr );
hgs
parents:
diff changeset
    81
        }
hgs
parents:
diff changeset
    82
    serverStartMutex.Wait();
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    if ( findCbsServer.Next( pathName ) != KErrNone ) 
hgs
parents:
diff changeset
    85
        {
hgs
parents:
diff changeset
    86
        // start scheduler and server
hgs
parents:
diff changeset
    87
        CCbsScheduler* scheduler = new (ELeave) CCbsScheduler;
hgs
parents:
diff changeset
    88
        CleanupStack::PushL( scheduler );
hgs
parents:
diff changeset
    89
        CActiveScheduler::Install( scheduler );
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
        CCbsServer* server = CCbsServer::NewL();
hgs
parents:
diff changeset
    92
        CleanupStack::PushL( server );
hgs
parents:
diff changeset
    93
        
hgs
parents:
diff changeset
    94
        // The scheduler needs access to the server instance.
hgs
parents:
diff changeset
    95
        scheduler->SetServer( server );
hgs
parents:
diff changeset
    96
        
hgs
parents:
diff changeset
    97
        // Set the key using Publish & Subscribe
hgs
parents:
diff changeset
    98
        RProperty property;                       
hgs
parents:
diff changeset
    99
        _LIT_SECURITY_POLICY_PASS( KCbsServerReadPolicy );
hgs
parents:
diff changeset
   100
        _LIT_SECURITY_POLICY_S0( KCbsServerWritePolicy, KCbsServerUid3 );
hgs
parents:
diff changeset
   101
                
hgs
parents:
diff changeset
   102
        property.Define( KPSUidCellBroadcast, KCbsServerStarted, RProperty::EInt, KCbsServerReadPolicy, KCbsServerWritePolicy );
hgs
parents:
diff changeset
   103
        CBSLOGSTRING("CBSSERVER: InitServerL(): Property defined.");
hgs
parents:
diff changeset
   104
                
hgs
parents:
diff changeset
   105
        property.Set( KPSUidCellBroadcast, KCbsServerStarted, 1 );
hgs
parents:
diff changeset
   106
        CBSLOGSTRING("CBSSERVER: InitServerL(): Property set.");
hgs
parents:
diff changeset
   107
                
hgs
parents:
diff changeset
   108
        property.Close();
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
        serverStartMutex.Signal();
hgs
parents:
diff changeset
   111
        serverStartMutex.Close();
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
        CBSLOGSTRING("CBSSERVER: InitServerL(): CbsServer created ok, starting active schduler.");
hgs
parents:
diff changeset
   114
hgs
parents:
diff changeset
   115
        RProcess::Rendezvous( KErrNone );
hgs
parents:
diff changeset
   116
        
hgs
parents:
diff changeset
   117
        // start fielding requests from clients
hgs
parents:
diff changeset
   118
        CActiveScheduler::Start();
hgs
parents:
diff changeset
   119
        CBSLOGSTRING("CBSSERVER: InitServerL(): CbsServer shutting down, destroying scheduler & server instances.");
hgs
parents:
diff changeset
   120
hgs
parents:
diff changeset
   121
        // finished when the scheduler stops
hgs
parents:
diff changeset
   122
        CleanupStack::PopAndDestroy(2); // server, scheduler    
hgs
parents:
diff changeset
   123
        }
hgs
parents:
diff changeset
   124
    else
hgs
parents:
diff changeset
   125
        {
hgs
parents:
diff changeset
   126
        serverStartMutex.Signal();
hgs
parents:
diff changeset
   127
        serverStartMutex.Close();
hgs
parents:
diff changeset
   128
        }
hgs
parents:
diff changeset
   129
    CBSLOGSTRING("CBSSERVER: <<< InitServerL()");
hgs
parents:
diff changeset
   130
    }
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   136
// CCbsServer::CCbsServer
hgs
parents:
diff changeset
   137
// C++ default constructor can NOT contain any code, that
hgs
parents:
diff changeset
   138
// might leave.
hgs
parents:
diff changeset
   139
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   140
//
hgs
parents:
diff changeset
   141
CCbsServer::CCbsServer( 
hgs
parents:
diff changeset
   142
    TInt aPriority )
hgs
parents:
diff changeset
   143
    : CServer2( aPriority )
hgs
parents:
diff changeset
   144
    {
hgs
parents:
diff changeset
   145
    }
hgs
parents:
diff changeset
   146
hgs
parents:
diff changeset
   147
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   148
// CCbsServer::ConstructL
hgs
parents:
diff changeset
   149
// Symbian 2nd phase constructor can leave.
hgs
parents:
diff changeset
   150
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   151
//
hgs
parents:
diff changeset
   152
void CCbsServer::ConstructL()
hgs
parents:
diff changeset
   153
    {
hgs
parents:
diff changeset
   154
    CBSLOGSTRING( "CBSSERVER: >>> CCbsServer::ConstructL()" );
hgs
parents:
diff changeset
   155
    // Use PubSub to monitor shutdown event
hgs
parents:
diff changeset
   156
    iShutdownMonitor = CCbsShutdownMonitor::NewL( *this );
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
    iReceiver = CCbsRecEtel::NewL();
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    iDatabase = CCbsDbImp::NewL();
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
    iHelper = CCbsReceiverHelper::NewL( *iDatabase );
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
    iReceiver->SetInterface( iHelper );
hgs
parents:
diff changeset
   165
    InitReceiverL();
hgs
parents:
diff changeset
   166
    
hgs
parents:
diff changeset
   167
    // Create the container index.
hgs
parents:
diff changeset
   168
    iContainerIx = CObjectConIx::NewL();
hgs
parents:
diff changeset
   169
    iContainer = NewContainerL();
hgs
parents:
diff changeset
   170
    iIndex = CObjectIx::NewL();
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
	// Create SAT refresh listener
hgs
parents:
diff changeset
   173
	TInt error( KErrNone );
hgs
parents:
diff changeset
   174
	TRAP( error, iSatRefresh = CCbsSatRefresh::NewL( *this ));
hgs
parents:
diff changeset
   175
    CBSLOGSTRING2( "CBSSERVER: CCbsServer::ConstructL(): CCbsSatRefresh::NewL error: %d", error );
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
    // Start the server
hgs
parents:
diff changeset
   178
    if ( Start( KCbsServerName ) != KErrNone ) 
hgs
parents:
diff changeset
   179
        {
hgs
parents:
diff changeset
   180
        CbsServerPanic( ECbsServerStartFailed );
hgs
parents:
diff changeset
   181
        }
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
    CBSLOGSTRING( "CBSSERVER: <<< CCbsServer::ConstructL()" );
hgs
parents:
diff changeset
   184
    }
hgs
parents:
diff changeset
   185
hgs
parents:
diff changeset
   186
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   187
// CCbsServer::NewL
hgs
parents:
diff changeset
   188
// Two-phased constructor.
hgs
parents:
diff changeset
   189
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   190
//
hgs
parents:
diff changeset
   191
CCbsServer* CCbsServer::NewL()
hgs
parents:
diff changeset
   192
    {
hgs
parents:
diff changeset
   193
    CBSLOGSTRING("CBSSERVER: >>> CCbsServer::NewL()");
hgs
parents:
diff changeset
   194
    CCbsServer* self = new ( ELeave ) CCbsServer( KCbsServerPriority );
hgs
parents:
diff changeset
   195
    CleanupStack::PushL( self );
hgs
parents:
diff changeset
   196
    self->ConstructL();
hgs
parents:
diff changeset
   197
    CleanupStack::Pop();
hgs
parents:
diff changeset
   198
    CBSLOGSTRING("CBSSERVER: <<< CCbsServer::NewL()");
hgs
parents:
diff changeset
   199
    return self;
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
    
hgs
parents:
diff changeset
   203
// Destructor
hgs
parents:
diff changeset
   204
CCbsServer::~CCbsServer()
hgs
parents:
diff changeset
   205
    {
hgs
parents:
diff changeset
   206
    CBSLOGSTRING("CBSSERVER: >>> CCbsServer::~CCbsServer()");
hgs
parents:
diff changeset
   207
    // Note: it is important to delete in correct order
hgs
parents:
diff changeset
   208
    
hgs
parents:
diff changeset
   209
    // The correct order is: 
hgs
parents:
diff changeset
   210
    //        1st:    sessions, subsessions and other server related objects
hgs
parents:
diff changeset
   211
    //        2nd:    receiver 
hgs
parents:
diff changeset
   212
    //        3rd:    database
hgs
parents:
diff changeset
   213
hgs
parents:
diff changeset
   214
    if ( iIndex )
hgs
parents:
diff changeset
   215
        {
hgs
parents:
diff changeset
   216
        delete iIndex; 
hgs
parents:
diff changeset
   217
        iIndex = NULL;        
hgs
parents:
diff changeset
   218
        }
hgs
parents:
diff changeset
   219
    
hgs
parents:
diff changeset
   220
    if ( iContainer )
hgs
parents:
diff changeset
   221
        {
hgs
parents:
diff changeset
   222
        if ( iContainerIx )
hgs
parents:
diff changeset
   223
            {
hgs
parents:
diff changeset
   224
            iContainerIx->Remove( iContainer );
hgs
parents:
diff changeset
   225
            iContainer = NULL;
hgs
parents:
diff changeset
   226
            }        
hgs
parents:
diff changeset
   227
        }
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
    // Delete subsessions
hgs
parents:
diff changeset
   230
    if ( iContainerIx )
hgs
parents:
diff changeset
   231
        {
hgs
parents:
diff changeset
   232
        delete iContainerIx;
hgs
parents:
diff changeset
   233
        iContainerIx = NULL;
hgs
parents:
diff changeset
   234
        }    
hgs
parents:
diff changeset
   235
hgs
parents:
diff changeset
   236
    if ( iSatRefresh )
hgs
parents:
diff changeset
   237
        {
hgs
parents:
diff changeset
   238
        delete iSatRefresh;
hgs
parents:
diff changeset
   239
        iSatRefresh = NULL;
hgs
parents:
diff changeset
   240
        }
hgs
parents:
diff changeset
   241
        
hgs
parents:
diff changeset
   242
    if ( iReceiver )
hgs
parents:
diff changeset
   243
        {
hgs
parents:
diff changeset
   244
        delete iReceiver;
hgs
parents:
diff changeset
   245
        iReceiver = NULL;
hgs
parents:
diff changeset
   246
        }	
hgs
parents:
diff changeset
   247
    
hgs
parents:
diff changeset
   248
    if ( iDatabase )
hgs
parents:
diff changeset
   249
        {
hgs
parents:
diff changeset
   250
        delete iDatabase;
hgs
parents:
diff changeset
   251
        iDatabase = NULL;
hgs
parents:
diff changeset
   252
        }
hgs
parents:
diff changeset
   253
        
hgs
parents:
diff changeset
   254
    if ( iHelper )
hgs
parents:
diff changeset
   255
        {
hgs
parents:
diff changeset
   256
        delete iHelper;
hgs
parents:
diff changeset
   257
        iHelper = NULL;
hgs
parents:
diff changeset
   258
        }
hgs
parents:
diff changeset
   259
           
hgs
parents:
diff changeset
   260
    if ( iShutdownMonitor )
hgs
parents:
diff changeset
   261
        {
hgs
parents:
diff changeset
   262
        delete iShutdownMonitor;
hgs
parents:
diff changeset
   263
        iShutdownMonitor = NULL;
hgs
parents:
diff changeset
   264
        }
hgs
parents:
diff changeset
   265
            
hgs
parents:
diff changeset
   266
    CBSLOGSTRING("CBSSERVER: <<< CCbsServer::~CCbsServer()");
hgs
parents:
diff changeset
   267
    }
hgs
parents:
diff changeset
   268
hgs
parents:
diff changeset
   269
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   270
// CCbsServer::NewSessionL
hgs
parents:
diff changeset
   271
// Creates a new session (an instance of CCbsSession).
hgs
parents:
diff changeset
   272
//   
hgs
parents:
diff changeset
   273
// The method is meant to be called by the Symbian OS server framework and 
hgs
parents:
diff changeset
   274
// so it should not be used in any other case.
hgs
parents:
diff changeset
   275
//  
hgs
parents:
diff changeset
   276
// The method leaves if the version given as parameter and the server
hgs
parents:
diff changeset
   277
// version differ.
hgs
parents:
diff changeset
   278
// (other items were commented in a header).
hgs
parents:
diff changeset
   279
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   280
//
hgs
parents:
diff changeset
   281
CSession2* CCbsServer::NewSessionL( 
hgs
parents:
diff changeset
   282
    const TVersion& aVersion,
hgs
parents:
diff changeset
   283
    const RMessage2& /*aMessage*/ ) const
hgs
parents:
diff changeset
   284
    {
hgs
parents:
diff changeset
   285
    TVersion currentVersion( KCbsServerVersionMajor,
hgs
parents:
diff changeset
   286
                             KCbsServerVersionMinor,
hgs
parents:
diff changeset
   287
                             KCbsServerVersionBuild );
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
    // Check the client version
hgs
parents:
diff changeset
   290
    if ( !User::QueryVersionSupported( currentVersion, aVersion ) )
hgs
parents:
diff changeset
   291
        {
hgs
parents:
diff changeset
   292
        User::Leave( KErrNotSupported );
hgs
parents:
diff changeset
   293
        }
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    // Create and return a new session
hgs
parents:
diff changeset
   296
    return CCbsSession::NewL( *( CCbsServer* ) this );
hgs
parents:
diff changeset
   297
    }
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   300
// CCbsServer::NewContainerL
hgs
parents:
diff changeset
   301
// Creates a new session object container.
hgs
parents:
diff changeset
   302
//  
hgs
parents:
diff changeset
   303
// It is the responsibility of the caller to delete the object 
hgs
parents:
diff changeset
   304
// container, when it is no longer used.
hgs
parents:
diff changeset
   305
// (other items were commented in a header).
hgs
parents:
diff changeset
   306
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   307
//
hgs
parents:
diff changeset
   308
CObjectCon* CCbsServer::NewContainerL()
hgs
parents:
diff changeset
   309
    {
hgs
parents:
diff changeset
   310
    // Create the new container.
hgs
parents:
diff changeset
   311
    return iContainerIx->CreateL();
hgs
parents:
diff changeset
   312
    }
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   315
// CCbsServer::Database
hgs
parents:
diff changeset
   316
// Returns a reference to the database.
hgs
parents:
diff changeset
   317
// (other items were commented in a header).
hgs
parents:
diff changeset
   318
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   319
// 
hgs
parents:
diff changeset
   320
CCbsDbImp& CCbsServer::Database()
hgs
parents:
diff changeset
   321
    {
hgs
parents:
diff changeset
   322
    return *iDatabase;
hgs
parents:
diff changeset
   323
    }
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   326
// CCbsServer::Receiver
hgs
parents:
diff changeset
   327
// Returns a reference to the receiver.
hgs
parents:
diff changeset
   328
// (other items were commented in a header).
hgs
parents:
diff changeset
   329
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   330
//
hgs
parents:
diff changeset
   331
CCbsRecEtel& CCbsServer::Receiver()
hgs
parents:
diff changeset
   332
    {
hgs
parents:
diff changeset
   333
    return *iReceiver;
hgs
parents:
diff changeset
   334
    }
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   337
// CCbsServer::TotalTopicsDetected
hgs
parents:
diff changeset
   338
// Returns the total number of detected (via topic detection feature)
hgs
parents:
diff changeset
   339
// topics and then clears the counter.
hgs
parents:
diff changeset
   340
// (other items were commented in a header).
hgs
parents:
diff changeset
   341
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   342
//   
hgs
parents:
diff changeset
   343
TInt CCbsServer::TotalTopicsDetected()
hgs
parents:
diff changeset
   344
    {
hgs
parents:
diff changeset
   345
    TInt count( iHelper->TopicsDetected() );
hgs
parents:
diff changeset
   346
    iHelper->ClearTopicsDetectedCounter();
hgs
parents:
diff changeset
   347
    return count;
hgs
parents:
diff changeset
   348
    }
hgs
parents:
diff changeset
   349
hgs
parents:
diff changeset
   350
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   351
// CCbsServer::PanicClient
hgs
parents:
diff changeset
   352
// Panics the client.
hgs
parents:
diff changeset
   353
// (other items were commented in a header).
hgs
parents:
diff changeset
   354
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   355
//  
hgs
parents:
diff changeset
   356
void CCbsServer::PanicClient( 
hgs
parents:
diff changeset
   357
    TInt aPanic ) const
hgs
parents:
diff changeset
   358
    {
hgs
parents:
diff changeset
   359
    __DEBUGGER();   // Debugger breakpoint in server's context.
hgs
parents:
diff changeset
   360
    Message().Panic( KCbsServerName, aPanic );
hgs
parents:
diff changeset
   361
    }
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   364
// CCbsServer::Shutdown
hgs
parents:
diff changeset
   365
// Shuts down the server.
hgs
parents:
diff changeset
   366
// (other items were commented in a header).
hgs
parents:
diff changeset
   367
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   368
// 
hgs
parents:
diff changeset
   369
void CCbsServer::Shutdown()
hgs
parents:
diff changeset
   370
    {
hgs
parents:
diff changeset
   371
    CBSLOGSTRING("CBSSERVER: >>> CCbsServer::Shutdown()");
hgs
parents:
diff changeset
   372
    Cancel();
hgs
parents:
diff changeset
   373
    CActiveScheduler::Stop();
hgs
parents:
diff changeset
   374
    CBSLOGSTRING("CBSSERVER: <<< CCbsServer::Shutdown()");
hgs
parents:
diff changeset
   375
    }
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   378
// CCbsServer::ContainerIndex
hgs
parents:
diff changeset
   379
// Returns the container index.
hgs
parents:
diff changeset
   380
// (other items were commented in a header).
hgs
parents:
diff changeset
   381
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   382
// 
hgs
parents:
diff changeset
   383
CObjectConIx& CCbsServer::ContainerIndex()
hgs
parents:
diff changeset
   384
    {
hgs
parents:
diff changeset
   385
    return *iContainerIx;
hgs
parents:
diff changeset
   386
    }
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   389
// CCbsServer::ServerMessage
hgs
parents:
diff changeset
   390
// Returns the current IPC message.
hgs
parents:
diff changeset
   391
// (other items were commented in a header).
hgs
parents:
diff changeset
   392
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   393
// 
hgs
parents:
diff changeset
   394
const RMessage2 CCbsServer::ServerMessage() const
hgs
parents:
diff changeset
   395
    {
hgs
parents:
diff changeset
   396
    return Message();
hgs
parents:
diff changeset
   397
    }
hgs
parents:
diff changeset
   398
hgs
parents:
diff changeset
   399
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   400
// CCbsServer::ReturnObjectByHandle
hgs
parents:
diff changeset
   401
// Returns a subsession object matching the given handle.
hgs
parents:
diff changeset
   402
// (other items were commented in a header).
hgs
parents:
diff changeset
   403
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   404
//
hgs
parents:
diff changeset
   405
CCbsObject* CCbsServer::ReturnObjectByHandle( 
hgs
parents:
diff changeset
   406
    TUint aHandle )
hgs
parents:
diff changeset
   407
    {
hgs
parents:
diff changeset
   408
    return ( CCbsObject* )iIndex->At( aHandle );
hgs
parents:
diff changeset
   409
    }
hgs
parents:
diff changeset
   410
hgs
parents:
diff changeset
   411
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   412
// CCbsServer::DeleteObjectByHandle
hgs
parents:
diff changeset
   413
// Deletes a subsession 
hgs
parents:
diff changeset
   414
// (other items were commented in a header).
hgs
parents:
diff changeset
   415
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   416
//
hgs
parents:
diff changeset
   417
void CCbsServer::DeleteObjectByHandle( 
hgs
parents:
diff changeset
   418
    TUint aHandle )
hgs
parents:
diff changeset
   419
    {    
hgs
parents:
diff changeset
   420
    // Find object and then delete it
hgs
parents:
diff changeset
   421
    CCbsObject* object = ReturnObjectByHandle( aHandle );
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
    if ( object )
hgs
parents:
diff changeset
   424
        {
hgs
parents:
diff changeset
   425
        // Remove from index (and it will delete the object)
hgs
parents:
diff changeset
   426
        iIndex->Remove( aHandle );
hgs
parents:
diff changeset
   427
        }
hgs
parents:
diff changeset
   428
    else
hgs
parents:
diff changeset
   429
        {
hgs
parents:
diff changeset
   430
        CbsServerPanic( EInvalidSessionObject );
hgs
parents:
diff changeset
   431
        }
hgs
parents:
diff changeset
   432
    }
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   435
// CCbsServer::Container
hgs
parents:
diff changeset
   436
// Returns the object container
hgs
parents:
diff changeset
   437
// (other items were commented in a header).
hgs
parents:
diff changeset
   438
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   439
//
hgs
parents:
diff changeset
   440
CObjectCon& CCbsServer::Container()
hgs
parents:
diff changeset
   441
    {
hgs
parents:
diff changeset
   442
    return *iContainer;
hgs
parents:
diff changeset
   443
    }
hgs
parents:
diff changeset
   444
hgs
parents:
diff changeset
   445
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   446
// CCbsServer::ObjectIx
hgs
parents:
diff changeset
   447
// Returns the object index
hgs
parents:
diff changeset
   448
// (other items were commented in a header).
hgs
parents:
diff changeset
   449
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   450
//
hgs
parents:
diff changeset
   451
CObjectIx& CCbsServer::ObjectIx()
hgs
parents:
diff changeset
   452
    {
hgs
parents:
diff changeset
   453
    return *iIndex;
hgs
parents:
diff changeset
   454
    }
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   457
// CCbsServer::InitReceiverL
hgs
parents:
diff changeset
   458
// Initializes the receiver with values retrieved from the database.
hgs
parents:
diff changeset
   459
// (other items were commented in a header).
hgs
parents:
diff changeset
   460
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   461
// 
hgs
parents:
diff changeset
   462
void CCbsServer::InitReceiverL()
hgs
parents:
diff changeset
   463
    {
hgs
parents:
diff changeset
   464
    CBSLOGSTRING("CBSSERVER: >>> CCbsServer::InitReceiverL()");
hgs
parents:
diff changeset
   465
    
hgs
parents:
diff changeset
   466
    // DB leave trapped.
hgs
parents:
diff changeset
   467
    TInt ignore( KErrNone );
hgs
parents:
diff changeset
   468
    TRAP( ignore, iReceiver->LoadSimTopicsL() );
hgs
parents:
diff changeset
   469
    CBSLOGSTRING2("CBSSERVER: CCbsServer::InitReceiverL(): LoadSimTopicsL() TRAPped error: %d", ignore);
hgs
parents:
diff changeset
   470
hgs
parents:
diff changeset
   471
    iReceiver->ApplyStateChangesL();
hgs
parents:
diff changeset
   472
    
hgs
parents:
diff changeset
   473
    CBSLOGSTRING("CBSSERVER: <<< CCbsServer::InitReceiverL()");    
hgs
parents:
diff changeset
   474
    }
hgs
parents:
diff changeset
   475
    
hgs
parents:
diff changeset
   476
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   477
// CCbsServer::ReLoadSimTopicsL
hgs
parents:
diff changeset
   478
// Initializes the receiver with values retrieved from the database.
hgs
parents:
diff changeset
   479
// (other items were commented in a header).
hgs
parents:
diff changeset
   480
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   481
// 
hgs
parents:
diff changeset
   482
void CCbsServer::ReLoadSimTopicsL()
hgs
parents:
diff changeset
   483
    {
hgs
parents:
diff changeset
   484
    CBSLOGSTRING("CBSSERVER: >>> CCbsServer::ReLoadSimTopicsL()");
hgs
parents:
diff changeset
   485
hgs
parents:
diff changeset
   486
    TInt ignore( KErrNone );
hgs
parents:
diff changeset
   487
    
hgs
parents:
diff changeset
   488
    TRAP( ignore, iReceiver->LoadSimTopicsL() );
hgs
parents:
diff changeset
   489
    CBSLOGSTRING2("CBSSERVER: CCbsServer::ReLoadSimTopicsL(): LoadSimTopicsL() TRAPped error: %d", ignore);
hgs
parents:
diff changeset
   490
hgs
parents:
diff changeset
   491
    iReceiver->ApplyStateChangesL();
hgs
parents:
diff changeset
   492
    
hgs
parents:
diff changeset
   493
    CBSLOGSTRING("CBSSERVER: <<< CCbsServer::ReLoadSimTopicsL()");    
hgs
parents:
diff changeset
   494
    }    
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
// ================= OTHER EXPORTED FUNCTIONS ==============
hgs
parents:
diff changeset
   497
hgs
parents:
diff changeset
   498
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   499
// E32Main
hgs
parents:
diff changeset
   500
// E32Main implements the executable entry function.
hgs
parents:
diff changeset
   501
// Creates a cleanup stack and runs the server. 
hgs
parents:
diff changeset
   502
// Returns: Zero
hgs
parents:
diff changeset
   503
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   504
//
hgs
parents:
diff changeset
   505
GLDEF_C TInt E32Main()
hgs
parents:
diff changeset
   506
    {
hgs
parents:
diff changeset
   507
    __UHEAP_MARK;
hgs
parents:
diff changeset
   508
    CTrapCleanup* cleanup = CTrapCleanup::New(); 
hgs
parents:
diff changeset
   509
hgs
parents:
diff changeset
   510
    TRAPD( error, InitServerL() ); 
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
    __ASSERT_ALWAYS( !error, User::Panic( KCbsServerName, error) );
hgs
parents:
diff changeset
   513
    delete cleanup; 
hgs
parents:
diff changeset
   514
    __UHEAP_MARKEND;
hgs
parents:
diff changeset
   515
    return 0; 
hgs
parents:
diff changeset
   516
    }
hgs
parents:
diff changeset
   517
hgs
parents:
diff changeset
   518
// ========================== OTHER EXPORTED FUNCTIONS =========================
hgs
parents:
diff changeset
   519
//  End of File