diff -r 000000000000 -r e6b17d312c8b ximpfw/core/srcrootserver/ximprootserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ximpfw/core/srcrootserver/ximprootserver.cpp Thu Dec 17 08:54:49 2009 +0200 @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2006 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: Root server implementation + * +*/ + +#include + +#include "ximprootserver.h" +#include "ximprootserversessionadapter.h" +#include "ximprootserverdefs.h" +#include "ximptrace.h" +#include "ximpglobals.h" +#include "ximpoperationfactoryimp.h" + +//Include Root server namespace +using namespace NRootSrv; + + +// ============================================================== +// =============== PLATSEC POLICY CONFIGURATION ================= +// ============================================================== +static const TInt KXIMPRootServerPlatSecRangeCount = 2; + +//Ranges for the Request values +static const TInt KXIMPRootServerPlatSecRanges[ KXIMPRootServerPlatSecRangeCount ] = + { + 0, + Max( ( TInt )NRootSrv::NRequest::EOpCodeTop, ( TInt )NRequest::EOpCodeTop ) + }; + + +// Element indexes for the defined ranges +static const TUint8 KXIMPRootServerPlatSecElementsIndex[ KXIMPRootServerPlatSecRangeCount ] = + { + 0, + CPolicyServer::ENotSupported + }; + + +// Policy elements +static const CPolicyServer::TPolicyElement KXIMPRootServerPlatSecElements[] = + { + { + _INIT_SECURITY_POLICY_C3( ECapabilityReadUserData, + ECapabilityWriteUserData, + ECapabilityNetworkServices ), + CPolicyServer::EFailClient + } + }; + + +// The platsec policy +static const CPolicyServer::TPolicy KXIMPRootServerPlatSecPolicy = + { + // Shortcut to the index into Elements,that is used to check a connection attempt + 0, + + // Number of ranges in the iRanges array + KXIMPRootServerPlatSecRangeCount, + + // A pointer to an array of ordered ranges of request numbers + KXIMPRootServerPlatSecRanges, + + // A pointer to an array of TUint8 values specifying + // the appropriate action to take for each range in iRanges + KXIMPRootServerPlatSecElementsIndex, + + // A pointer to an array of distinct policy elements + KXIMPRootServerPlatSecElements + }; + + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::ExecuteL() +// ----------------------------------------------------------------------------- +// +void CXIMPRootServer::ExecuteL() + { + // start scheduler + CActiveScheduler* pA = new( ELeave )CActiveScheduler; + CleanupStack::PushL( pA ); + CActiveScheduler::Install( pA ); + + // create server + CXIMPRootServer* server = CXIMPRootServer::NewLC(); + server->StartL( NName::KSymbianServer ); + + //Signal client that we are started + RProcess().Rendezvous( KErrNone ); + + //Execute the server + CActiveScheduler::Start(); // CSI: 3 # + + //Cleanup + CleanupStack::PopAndDestroy( server );//server + CleanupStack::PopAndDestroy( pA ); + CActiveScheduler::Install( NULL ); + } + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::~CXIMPRootServer() +// ----------------------------------------------------------------------------- +// +CXIMPRootServer::~CXIMPRootServer() + { + CXIMPGlobals::UninstallD(); + REComSession::FinalClose(); + + #if _BullseyeCoverage + cov_write(); + #endif + } + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::CXIMPRootServer() +// ----------------------------------------------------------------------------- +// +CXIMPRootServer::CXIMPRootServer() + : CPolicyServer( CActive::EPriorityStandard, + KXIMPRootServerPlatSecPolicy ) + { + } + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::NewLC() +// ----------------------------------------------------------------------------- +// +CXIMPRootServer* CXIMPRootServer::NewLC() + { + CXIMPRootServer* self = new( ELeave ) CXIMPRootServer; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::ConstructL() +// ----------------------------------------------------------------------------- +// +void CXIMPRootServer::ConstructL() + { + CXIMPOperationFactory* operationFactory = CXIMPOperationFactory::NewL(); + CleanupStack::PushL( operationFactory ); + CXIMPGlobals::InstallL( operationFactory, NULL ); + CleanupStack::Pop( operationFactory ); + iGlobals = CXIMPGlobals::Instance(); + } + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::NewSessionL() +// ----------------------------------------------------------------------------- +// +CSession2* CXIMPRootServer::NewSessionL( const TVersion &aVersion, + const RMessage2& /* aMessage */ ) const + { + TVersion srvVersion( NVersion::KMajor, + NVersion::KMinor, + NVersion::KBuild ); + + if( !User::QueryVersionSupported( aVersion, srvVersion ) ) + { + User::Leave( KErrNotSupported ); + } + + CXIMPRootServer* self = const_cast< CXIMPRootServer* >( this ); + CSession2* session = NULL; + + TRAPD( err, session = CXIMPRootServerSessionAdapter::NewL( *self ) ); + User::LeaveIfError( err ); + return session; + } + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::SessionCreated() +// ----------------------------------------------------------------------------- +// +void CXIMPRootServer::SessionCreated() + { + iSessionCount++; + } + + +// ----------------------------------------------------------------------------- +// CXIMPRootServer::SessionDied() +// ----------------------------------------------------------------------------- +// +void CXIMPRootServer::SessionDied() + { + iSessionCount--; + if( iSessionCount == 0 ) + { + CActiveScheduler::Stop(); // CSI: 4 # + } + } + +// ----------------------------------------------------------------------------- +// E32Main() +// ENTRY POINT +// ----------------------------------------------------------------------------- +// +GLDEF_C TInt E32Main() + { + TRACE( _L("Root E32Main - enter") ); + + __UHEAP_MARK; + + User::RenameThread( NName::KMainThread ); + + CTrapCleanup* tc = CTrapCleanup::New(); + if( !tc ) + { + return KErrNoMemory; + } + + TRAPD( err, CXIMPRootServer::ExecuteL() ); + delete tc; + + __UHEAP_MARKEND; + + TRACE_1( _L("Root E32Main - exit: %d"), err ); + return err; + } + + +// END OF FILE + +