diff -r 000000000000 -r bde4ae8d615e os/security/cryptomgmtlibs/securitycommonutils/source/scsserver/startup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/security/cryptomgmtlibs/securitycommonutils/source/scsserver/startup.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,95 @@ +/* +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* Boilerplate code starts up server and exits the process when +* the server has stopped. +* +*/ + + +/** + @file +*/ + +#include +#include + +NONSHARABLE_CLASS(CSystemActiveScheduler) : public CActiveScheduler + { + virtual void Error(TInt aError) const; + }; + +void CSystemActiveScheduler::Error(TInt aError) const + { + // Ignore the error and continue... + RDebug::Printf("SCS- Active object failed with code %d - IGNORED\n", aError); + } + +static void RunServerL(TScsServerFactory aServerFactoryLC) +/** + Allocate and start the session counting server. + + @param aServerFactoryLC Factory function defined in the implementation + EXE, which allocates an instance of the server object + and puts it on the cleanup stack. + */ + { + CActiveScheduler* as = new(ELeave) CSystemActiveScheduler; + CleanupStack::PushL(as); + CActiveScheduler::Install(as); + + // the server is started when it is allocated + (void) aServerFactoryLC(); + + // tell launching process the server has started successfully + RProcess::Rendezvous(KErrNone); + + CActiveScheduler::Start(); + + // the active scheduler has been stopped here because there have + // been no current sessions for the shutdown period. + CleanupStack::PopAndDestroy(2, as); + } + +EXPORT_C TInt StartScsServer(TScsServerFactory aServerFactoryLC) +/** + This function must be called from the server executable's E32Main function. + It sets up a cleanup stack and active scheduler before starting the server. + + If the server is started successfully then this function does not return + until the server shuts down. + + @param aServerFactoryLC Factory function defined in the implementation + EXE, which allocates an instance of the server object + and puts it on the cleanup stack. + @return Symbian OS error code. KErrNone indicates success, + and any other value indicates failure. + */ + { + __UHEAP_MARK; + + // allocating a cleanup stack also installs it + CTrapCleanup* tc = CTrapCleanup::New(); + if (tc == 0) + return KErrNoMemory; + + TRAPD(r, RunServerL(aServerFactoryLC)); + + delete tc; + + __UHEAP_MARKEND; + + return r; + } +