--- a/analyzetool/storageserver/server/src/atstorageserver.cpp Fri Aug 27 11:37:29 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,452 +0,0 @@
-/*
-* Copyright (c) 2009 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: Definitions for the class CATStorageServer. Includes also the
-* entry point of the atoolstorageserver.exe executable.
-*
-*/
-
-
-
-
-// INCLUDE FILES
-
-#include "atstorageserver.h"
-#include "atstorageserversession.h"
-#include "atstorageservercommon.h"
-#include "atlog.h"
-#include "atdynprocessinfo.h"
-
-
-// CONSTANTS
-
-
-// The amount of different ranges of requests specified for this policy server.
-// In a policy server, different actions can be determined for different ranges
-// of requests.
-const TUint8 KAmountOfRanges = 2;
-
-
-const TInt ranges[KAmountOfRanges] =
- {
- CATStorageServer::EProcessStarted,
- CATStorageServer::EOutOfBounds
- };
-
-
-const TUint8 actionForRange[ KAmountOfRanges ] =
- { 0, CPolicyServer::ENotSupported };
-
-
-const CPolicyServer::TPolicyElement elements[] =
- {
-
- { _INIT_SECURITY_POLICY_C1( ECapability_None ),
- CPolicyServer::EFailClient }
-
- };
-
-
-const CPolicyServer::TPolicy policy =
- {
- CPolicyServer::EAlwaysPass, // On connect
- KAmountOfRanges, // Range count
- ranges,
- actionForRange,
- elements,
- };
-
-
-
-// ENTRY POINT
-
-TInt E32Main()
- {
- LOGSTR1( "STSE TInt E32Main() in ATStorageServer.cpp" );
-
- __UHEAP_MARK;
-
- // Create a cleanup stack
- CTrapCleanup* cleanup = CTrapCleanup::New();
-
- TInt errorCode( KErrNoMemory );
-
- // If there was enough memory to create a cleanup stack,
- // create and start the server.
- if( cleanup )
- {
- // If RunServerL() doesn't leave, errorCode will be set to KErrNone
- TRAP( errorCode, CATStorageServer::RunServerL() );
- delete cleanup;
- }
-
- // Signal the client that server creation failed, if a leave occured during
- // the call to 'RunServerL()' function
- if( errorCode != KErrNone )
- {
- RProcess::Rendezvous( errorCode );
- }
-
- __UHEAP_MARKEND;
-
- return errorCode;
-
- }
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::CATStorageServer
-// C++ default constructor can NOT contain any code that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CATStorageServer::CATStorageServer( TInt aPriority ) :
- CPolicyServer( aPriority, policy, ESharableSessions ),
- iSessionCount( 0 )
- {
- LOGSTR1( "STSE CATStorageServer::CATStorageServer()" );
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CATStorageServer::ConstructL()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CATStorageServer* CATStorageServer::NewL()
- {
- CATStorageServer* self = NewLC();
- CleanupStack::Pop( self );
-
- return self;
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CATStorageServer* CATStorageServer::NewLC()
- {
- CATStorageServer* self = new ( ELeave ) CATStorageServer( EPriorityStandard );
- CleanupStack::PushL( self );
- self->ConstructL();
- self->StartL( KStorageServerName );
- return self;
- }
-
-// Destructor
-CATStorageServer::~CATStorageServer()
- {
- LOGSTR1( "STSE CATStorageServer::~CATStorageServer()" );
-
- iProcesses.Close();
- iProcessesDyn.ResetAndDestroy();
- iProcessesDyn.Close();
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::NewSessionL
-// Create a new server session.
-// -----------------------------------------------------------------------------
-//
-CSession2* CATStorageServer::NewSessionL(
- const TVersion &aVersion,
- const RMessage2& /*aMessage*/ ) const
- {
- LOGSTR1( "STSE CSession2* CATStorageServer::NewSessionL()" );
-
- // The server's version
- TVersion version( KVersionNumberMaj, KVersionNumberMin,
- KVersionNumberBld );
-
- // Check this is a high enough version of the server
- if ( !User::QueryVersionSupported(version, aVersion) )
- {
- User::Leave( KErrNotSupported );
- }
-
- // Construct and return a new session object
- return CATStorageServerSession::NewL( const_cast<CATStorageServer&>(*this) );
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::RunServerL
-// Create active scheduler and a server object
-// -----------------------------------------------------------------------------
-//
-void CATStorageServer::RunServerL()
- {
- LOGSTR1( "STSE void CATStorageServer::RunServerL()" );
-
- // Create and install an active scheduler
- CActiveScheduler* activeSched = new (ELeave) CActiveScheduler;
- CleanupStack::PushL( activeSched );
- CActiveScheduler::Install( activeSched );
-
- // Create server
- CATStorageServer::NewLC();
-
- // The initialization performed alright, signal the client
- RProcess::Rendezvous( KErrNone );
-
- // Start the active scheduler
- CActiveScheduler::Start();
-
- // Remove the server and active scheduler from the cleanup stack
- CleanupStack::PopAndDestroy( 2, activeSched );
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::IncSessionCount
-// Increments the count of active sessions for this server.
-// -----------------------------------------------------------------------------
-//
-void CATStorageServer::IncSessionCount()
- {
- LOGSTR1( "STSE void CATStorageServer::IncSessionCount()" );
-
- iSessionCount++;
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::DecSessionCount
-// Decrements the count of active sessions for this server.
-// -----------------------------------------------------------------------------
-//
-void CATStorageServer::DecSessionCount()
- {
- LOGSTR1( "STSE void CATStorageServer::DecSessionCount()" );
-
- iSessionCount--;
-
- // Cancels all outstanding messages and stops the active scheduler,
- // if there are no other sessions open at the moment
- if ( iSessionCount <= 0 )
- {
- this->Cancel();
- CActiveScheduler::Stop();
- }
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::AddProcessL
-// -----------------------------------------------------------------------------
-//
-TInt CATStorageServer::AddProcessL( const TDesC8& aProcessName,
- TUint aProcessId,
- CATStorageServerSession* aSessionObject,
- const TInt64& aStartTime )
- {
- LOGSTR1( "STSE TInt CATStorageServer::AddProcessL()" );
-
- TInt error( KErrNone );
- TATProcessInfo processInfo;
-
- processInfo.iProcessId = aProcessId;
- processInfo.iProcessName.Copy( aProcessName );
- processInfo.iStartTime = aStartTime;
-
- // Insert the static process info into the iProcesses array
- error = iProcesses.InsertInUnsignedKeyOrder( processInfo );
-
- // Return if an error occured
- if ( error != KErrNone)
- {
- return error;
- }
-
- // Construct a CATDynProcessInfo object with the given process ID and logging mode
- CATDynProcessInfo* dynProcessInfo =
- new (ELeave) CATDynProcessInfo( aProcessId,
- aSessionObject );
-
- // Insert the dynamic process info into the iProcessesDyn array
- TLinearOrder<CATDynProcessInfo> order( CATDynProcessInfo::Compare );
- error = iProcessesDyn.InsertInOrder( dynProcessInfo, order );
-
- return error;
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::RemoveProcessL
-// -----------------------------------------------------------------------------
-//
-TInt CATStorageServer::RemoveProcessL( TUint aProcessId )
- {
- LOGSTR1( "STSE TInt CATStorageServer::RemoveProcessL()" );
-
- TATProcessInfo processInfo;
- processInfo.iProcessId = aProcessId;
-
- TInt index = iProcesses.FindInUnsignedKeyOrder( processInfo );
-
- // Return, if a process with the requested process ID was not found
- if ( index == KErrNotFound )
- {
- return index;
- }
-
- // Remove the TATProcessInfo object at "index" from the array
- iProcesses.Remove( index );
-
- // Now, start removing the associated dynamic process info object
-
- // Construct a CATDynProcessInfo object with the given process ID
- CATDynProcessInfo* dynProcessInfo =
- new (ELeave) CATDynProcessInfo( aProcessId );
-
- // Find the index of a CATDynProcessInfo object with the given ID in the array
- TLinearOrder<CATDynProcessInfo> order( CATDynProcessInfo::Compare );
- index = iProcessesDyn.FindInOrder( dynProcessInfo, order );
- delete dynProcessInfo;
- dynProcessInfo = NULL;
-
- // Return, if a process with the requested process ID was not found
- if ( index == KErrNotFound )
- {
- return index;
- }
-
- // Otherwise, delete the object and remove the pointer at "index"
- delete iProcessesDyn[index];
- iProcessesDyn.Remove( index );
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::AddDllL
-// -----------------------------------------------------------------------------
-//
-TInt CATStorageServer::AddDllL( TUint aProcessId,
- const TATDllInfo aDllInfo )
- {
- LOGSTR1( "STSE TInt CATStorageServer::AddDllL()" );
-
- // Construct a CATDynProcessInfo object with the given process ID
- CATDynProcessInfo* dynProcessInfo =
- new (ELeave) CATDynProcessInfo( aProcessId );
-
- // Find out if a process with this ID can be found in the dynamic process array
- TLinearOrder<CATDynProcessInfo> order( CATDynProcessInfo::Compare );
- TInt index = iProcessesDyn.FindInOrder( dynProcessInfo, order );
- delete dynProcessInfo;
- dynProcessInfo = NULL;
-
- // Return, if a process with the requested process ID was not found
- if ( index == KErrNotFound )
- {
- return index;
- }
-
- // If we are here, the wanted process was found at index => append a DLL for it
- dynProcessInfo = iProcessesDyn[index];
-
- // Get the DLL array from this dynamic process info object
- RArray<TATDllInfo>& dllArray = dynProcessInfo->iDlls;
-
- // Let's see if the DLL to be added already exists
- TIdentityRelation<TATDllInfo> matcher( TATDllInfo::Match );
- index = dllArray.Find( aDllInfo, matcher );
-
- // If so, return KErrAlreadyExists
- if ( index != KErrNotFound )
- {
- return KErrAlreadyExists;
- }
-
- // Otherwise append this DLL to the array and return
- return dynProcessInfo->iDlls.Append( aDllInfo );
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::RemoveDllL
-// -----------------------------------------------------------------------------
-//
-TInt CATStorageServer::RemoveDllL( TUint aProcessId,
- const TDesC8& aDllName )
- {
- LOGSTR1( "STSE TInt CATStorageServer::RemoveDllL()" );
-
- // Construct a CATDynProcessInfo object with the given process ID
- CATDynProcessInfo* dynProcessInfo =
- new (ELeave) CATDynProcessInfo( aProcessId );
-
- // Find out if a process with this ID can be found in the dynamic process array
- TLinearOrder<CATDynProcessInfo> order( CATDynProcessInfo::Compare );
- TInt index = iProcessesDyn.FindInOrder( dynProcessInfo, order );
- delete dynProcessInfo;
- dynProcessInfo = NULL;
-
- // Return, if a process with the requested process ID was not found
- if ( index == KErrNotFound )
- {
- return index;
- }
-
- // If we are here, the wanted process was found at index
- dynProcessInfo = iProcessesDyn[index];
-
- // Get the DLL array from this dynamic process info object
- RArray<TATDllInfo>& dllArray = dynProcessInfo->iDlls;
-
- // Try to find wanted DLL
- TIdentityRelation<TATDllInfo> matcher( TATDllInfo::Match );
- index = dllArray.Find( TATDllInfo( 0, 0, 0, aDllName ), matcher );
-
- // Return, if a process with the requested process ID was not found
- if ( index == KErrNotFound )
- {
- return index;
- }
-
- // Otherwise remove the found DLL at "index"
- dllArray.Remove( index );
-
- return KErrNone;
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::ProcessInfoArray
-// -----------------------------------------------------------------------------
-//
-const RArray<TATProcessInfo>& CATStorageServer::ProcessInfoArray()
- {
- LOGSTR1( "STSE RArray<TATProcessInfo>& CATStorageServer::ProcessInfoArray()" );
-
- return iProcesses;
- }
-
-// -----------------------------------------------------------------------------
-// CATStorageServer::DynProcessInfoArray
-// -----------------------------------------------------------------------------
-//
-const RPointerArray<CATDynProcessInfo>& CATStorageServer::DynProcessInfoArray()
- {
- LOGSTR1( "STSE RPointerArray<CATDynProcessInfo>& CATStorageServer::DynProcessInfoArray()" );
-
- return iProcessesDyn;
- }
-
-// End of File