--- a/cbs/CbsServer/ServerSrc/CCbsServer.cpp Mon Aug 23 15:50:31 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,519 +0,0 @@
-/*
-* Copyright (c) 2003-2008 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: This module contains the implementation of CCbsServer class
-* member functions.
-*
-* This file contains the entry point for CbsServer.exe/dll.
-*
-*/
-
-
-// INCLUDE FILES
-
-#include <e32svr.h>
-#include <barsc.h>
-
-#include "CbsCommon.h"
-#include "CCbsScheduler.h"
-#include "CbsServerConstants.h"
-#include "CbsServerPanic.h"
-#include "CCbsServer.h"
-#include "CCbsSession.h"
-#include "CbsUtils.h"
-
-#include "CCbsRecEtel.h"
-#include "CCbsDbImp.H"
-
-#include "CCbsDbImp.H"
-#include "CCbsRecEtel.h"
-
-#include "CCbsDbImpSettings.H"
-#include "CCbsDbImpTopicList.h"
-#include "CCbsReceiverHelper.h"
-#include "CCbsSatRefresh.h"
-
-#include <e32property.h>
-#include "CbsServerInternalPSKeys.h"
-#include "CCbsShutdownMonitor.h"
-#include "CbsLogger.h"
-#include "CbsServerUid.h"
-
-
-// LOCAL FUNCTION PROTOTYPES
-LOCAL_C void InitServerL();
-
-// ==================== LOCAL FUNCTIONS ====================
-
-// -----------------------------------------------------------------------------
-// InitServerL
-// Initializes and starts CBS Server.
-// Creates the active scheduler and an instance of the server.
-// Returns: None
-// -----------------------------------------------------------------------------
-//
-LOCAL_C void InitServerL()
- {
- CBSLOGSTRING("CBSSERVER: >>> InitServerL()");
- // perform init code under the cleanup stack
- User::RenameThread( KCbsServerName );
-
- // create server - if one of this name does not already exist
- TFindServer findCbsServer( KCbsServerName );
- TFullName pathName;
-
- RMutex serverStartMutex;
- TInt createErr( serverStartMutex.CreateGlobal( _L("CBSSERVERMTX") ) );
- if ( createErr )
- {
- TInt openErr( serverStartMutex.OpenGlobal( _L("CBSSERVERMTX") ) );
- User::LeaveIfError( openErr );
- }
- serverStartMutex.Wait();
-
- if ( findCbsServer.Next( pathName ) != KErrNone )
- {
- // start scheduler and server
- CCbsScheduler* scheduler = new (ELeave) CCbsScheduler;
- CleanupStack::PushL( scheduler );
- CActiveScheduler::Install( scheduler );
-
- CCbsServer* server = CCbsServer::NewL();
- CleanupStack::PushL( server );
-
- // The scheduler needs access to the server instance.
- scheduler->SetServer( server );
-
- // Set the key using Publish & Subscribe
- RProperty property;
- _LIT_SECURITY_POLICY_PASS( KCbsServerReadPolicy );
- _LIT_SECURITY_POLICY_S0( KCbsServerWritePolicy, KCbsServerUid3 );
-
- property.Define( KPSUidCellBroadcast, KCbsServerStarted, RProperty::EInt, KCbsServerReadPolicy, KCbsServerWritePolicy );
- CBSLOGSTRING("CBSSERVER: InitServerL(): Property defined.");
-
- property.Set( KPSUidCellBroadcast, KCbsServerStarted, 1 );
- CBSLOGSTRING("CBSSERVER: InitServerL(): Property set.");
-
- property.Close();
-
- serverStartMutex.Signal();
- serverStartMutex.Close();
-
- CBSLOGSTRING("CBSSERVER: InitServerL(): CbsServer created ok, starting active schduler.");
-
- RProcess::Rendezvous( KErrNone );
-
- // start fielding requests from clients
- CActiveScheduler::Start();
- CBSLOGSTRING("CBSSERVER: InitServerL(): CbsServer shutting down, destroying scheduler & server instances.");
-
- // finished when the scheduler stops
- CleanupStack::PopAndDestroy(2); // server, scheduler
- }
- else
- {
- serverStartMutex.Signal();
- serverStartMutex.Close();
- }
- CBSLOGSTRING("CBSSERVER: <<< InitServerL()");
- }
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-// -----------------------------------------------------------------------------
-// CCbsServer::CCbsServer
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CCbsServer::CCbsServer(
- TInt aPriority )
- : CServer2( aPriority )
- {
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CCbsServer::ConstructL()
- {
- CBSLOGSTRING( "CBSSERVER: >>> CCbsServer::ConstructL()" );
- // Use PubSub to monitor shutdown event
- iShutdownMonitor = CCbsShutdownMonitor::NewL( *this );
-
- iReceiver = CCbsRecEtel::NewL();
-
- iDatabase = CCbsDbImp::NewL();
-
- iHelper = CCbsReceiverHelper::NewL( *iDatabase );
-
- iReceiver->SetInterface( iHelper );
- InitReceiverL();
-
- // Create the container index.
- iContainerIx = CObjectConIx::NewL();
- iContainer = NewContainerL();
- iIndex = CObjectIx::NewL();
-
- // Create SAT refresh listener
- TInt error( KErrNone );
- TRAP( error, iSatRefresh = CCbsSatRefresh::NewL( *this ));
- CBSLOGSTRING2( "CBSSERVER: CCbsServer::ConstructL(): CCbsSatRefresh::NewL error: %d", error );
-
- // Start the server
- if ( Start( KCbsServerName ) != KErrNone )
- {
- CbsServerPanic( ECbsServerStartFailed );
- }
-
- CBSLOGSTRING( "CBSSERVER: <<< CCbsServer::ConstructL()" );
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CCbsServer* CCbsServer::NewL()
- {
- CBSLOGSTRING("CBSSERVER: >>> CCbsServer::NewL()");
- CCbsServer* self = new ( ELeave ) CCbsServer( KCbsServerPriority );
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop();
- CBSLOGSTRING("CBSSERVER: <<< CCbsServer::NewL()");
- return self;
- }
-
-
-// Destructor
-CCbsServer::~CCbsServer()
- {
- CBSLOGSTRING("CBSSERVER: >>> CCbsServer::~CCbsServer()");
- // Note: it is important to delete in correct order
-
- // The correct order is:
- // 1st: sessions, subsessions and other server related objects
- // 2nd: receiver
- // 3rd: database
-
- if ( iIndex )
- {
- delete iIndex;
- iIndex = NULL;
- }
-
- if ( iContainer )
- {
- if ( iContainerIx )
- {
- iContainerIx->Remove( iContainer );
- iContainer = NULL;
- }
- }
-
- // Delete subsessions
- if ( iContainerIx )
- {
- delete iContainerIx;
- iContainerIx = NULL;
- }
-
- if ( iSatRefresh )
- {
- delete iSatRefresh;
- iSatRefresh = NULL;
- }
-
- if ( iReceiver )
- {
- delete iReceiver;
- iReceiver = NULL;
- }
-
- if ( iDatabase )
- {
- delete iDatabase;
- iDatabase = NULL;
- }
-
- if ( iHelper )
- {
- delete iHelper;
- iHelper = NULL;
- }
-
- if ( iShutdownMonitor )
- {
- delete iShutdownMonitor;
- iShutdownMonitor = NULL;
- }
-
- CBSLOGSTRING("CBSSERVER: <<< CCbsServer::~CCbsServer()");
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::NewSessionL
-// Creates a new session (an instance of CCbsSession).
-//
-// The method is meant to be called by the Symbian OS server framework and
-// so it should not be used in any other case.
-//
-// The method leaves if the version given as parameter and the server
-// version differ.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CSession2* CCbsServer::NewSessionL(
- const TVersion& aVersion,
- const RMessage2& /*aMessage*/ ) const
- {
- TVersion currentVersion( KCbsServerVersionMajor,
- KCbsServerVersionMinor,
- KCbsServerVersionBuild );
-
- // Check the client version
- if ( !User::QueryVersionSupported( currentVersion, aVersion ) )
- {
- User::Leave( KErrNotSupported );
- }
-
- // Create and return a new session
- return CCbsSession::NewL( *( CCbsServer* ) this );
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::NewContainerL
-// Creates a new session object container.
-//
-// It is the responsibility of the caller to delete the object
-// container, when it is no longer used.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CObjectCon* CCbsServer::NewContainerL()
- {
- // Create the new container.
- return iContainerIx->CreateL();
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::Database
-// Returns a reference to the database.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCbsDbImp& CCbsServer::Database()
- {
- return *iDatabase;
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::Receiver
-// Returns a reference to the receiver.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCbsRecEtel& CCbsServer::Receiver()
- {
- return *iReceiver;
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::TotalTopicsDetected
-// Returns the total number of detected (via topic detection feature)
-// topics and then clears the counter.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CCbsServer::TotalTopicsDetected()
- {
- TInt count( iHelper->TopicsDetected() );
- iHelper->ClearTopicsDetectedCounter();
- return count;
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::PanicClient
-// Panics the client.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsServer::PanicClient(
- TInt aPanic ) const
- {
- __DEBUGGER(); // Debugger breakpoint in server's context.
- Message().Panic( KCbsServerName, aPanic );
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::Shutdown
-// Shuts down the server.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsServer::Shutdown()
- {
- CBSLOGSTRING("CBSSERVER: >>> CCbsServer::Shutdown()");
- Cancel();
- CActiveScheduler::Stop();
- CBSLOGSTRING("CBSSERVER: <<< CCbsServer::Shutdown()");
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::ContainerIndex
-// Returns the container index.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CObjectConIx& CCbsServer::ContainerIndex()
- {
- return *iContainerIx;
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::ServerMessage
-// Returns the current IPC message.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const RMessage2 CCbsServer::ServerMessage() const
- {
- return Message();
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::ReturnObjectByHandle
-// Returns a subsession object matching the given handle.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCbsObject* CCbsServer::ReturnObjectByHandle(
- TUint aHandle )
- {
- return ( CCbsObject* )iIndex->At( aHandle );
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::DeleteObjectByHandle
-// Deletes a subsession
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsServer::DeleteObjectByHandle(
- TUint aHandle )
- {
- // Find object and then delete it
- CCbsObject* object = ReturnObjectByHandle( aHandle );
-
- if ( object )
- {
- // Remove from index (and it will delete the object)
- iIndex->Remove( aHandle );
- }
- else
- {
- CbsServerPanic( EInvalidSessionObject );
- }
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::Container
-// Returns the object container
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CObjectCon& CCbsServer::Container()
- {
- return *iContainer;
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::ObjectIx
-// Returns the object index
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CObjectIx& CCbsServer::ObjectIx()
- {
- return *iIndex;
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::InitReceiverL
-// Initializes the receiver with values retrieved from the database.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsServer::InitReceiverL()
- {
- CBSLOGSTRING("CBSSERVER: >>> CCbsServer::InitReceiverL()");
-
- // DB leave trapped.
- TInt ignore( KErrNone );
- TRAP( ignore, iReceiver->LoadSimTopicsL() );
- CBSLOGSTRING2("CBSSERVER: CCbsServer::InitReceiverL(): LoadSimTopicsL() TRAPped error: %d", ignore);
-
- iReceiver->ApplyStateChangesL();
-
- CBSLOGSTRING("CBSSERVER: <<< CCbsServer::InitReceiverL()");
- }
-
-// -----------------------------------------------------------------------------
-// CCbsServer::ReLoadSimTopicsL
-// Initializes the receiver with values retrieved from the database.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CCbsServer::ReLoadSimTopicsL()
- {
- CBSLOGSTRING("CBSSERVER: >>> CCbsServer::ReLoadSimTopicsL()");
-
- TInt ignore( KErrNone );
-
- TRAP( ignore, iReceiver->LoadSimTopicsL() );
- CBSLOGSTRING2("CBSSERVER: CCbsServer::ReLoadSimTopicsL(): LoadSimTopicsL() TRAPped error: %d", ignore);
-
- iReceiver->ApplyStateChangesL();
-
- CBSLOGSTRING("CBSSERVER: <<< CCbsServer::ReLoadSimTopicsL()");
- }
-
-// ================= OTHER EXPORTED FUNCTIONS ==============
-
-// -----------------------------------------------------------------------------
-// E32Main
-// E32Main implements the executable entry function.
-// Creates a cleanup stack and runs the server.
-// Returns: Zero
-// -----------------------------------------------------------------------------
-//
-GLDEF_C TInt E32Main()
- {
- __UHEAP_MARK;
- CTrapCleanup* cleanup = CTrapCleanup::New();
-
- TRAPD( error, InitServerL() );
-
- __ASSERT_ALWAYS( !error, User::Panic( KCbsServerName, error) );
- delete cleanup;
- __UHEAP_MARKEND;
- return 0;
- }
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-// End of File