lbs/internal/lbstestserver/src/claunchedprocess.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/internal/lbstestserver/src/claunchedprocess.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,172 @@
+// Copyright (c) 2006-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 "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "lbsmemlogger.h"
+#include "claunchedprocess.h"
+#include "csecureprocessasbase.h"
+
+
+/** Create instance of trap handler and cleanup stack
+called by the launched process! 
+
+@return Symbian error code
+@internalTechnology
+@released
+ */
+ TInt CLaunchedProcess::CompleteProcessLaunch()
+   	{
+   	__UHEAP_MARK;
+   	CTrapCleanup* cleanup=CTrapCleanup::New();
+   	TInt r=KErrNoMemory;
+   	if (cleanup)
+   		{
+ 		TRAP(r,DoCompleteProcessLaunchL());
+   		delete cleanup;
+   		}
+   	__UHEAP_MARKEND;
+   	return r;	
+   
+   	}
+      	
+
+/** Create the server process, create, install and run the active scheduler
+wait for scheduler to be stopped to return process
+
+@return Symbian error code
+@internalTechnology
+@released
+ */
+ TInt CLaunchedProcess::DoCompleteProcessLaunchL()
+ 	{ 	
+   	TInt r = KErrNone;
+   	// create and install the active scheduler we need
+   	CSecureProcessASBase* s=new(ELeave) CSecureProcessASBase();
+   	CleanupStack::PushL(s);
+   	CActiveScheduler::Install(s);
+   	
+   	// Create the memory logger object for monitoring memory
+   	LBSMEMLOG_BEGIN();
+   
+   	CBase* baseObj = s->CreateRootObjectL();
+   
+   	CleanupStack::PushL(baseObj);
+   	
+   	r = s->EntryPointL(baseObj);
+   	
+   	RProcess().Rendezvous(KErrNone);
+   	
+   	// Ready to run
+   	CActiveScheduler::Start();
+   	
+   	//
+   	// Cleanup the client
+   	CleanupStack::PopAndDestroy(1);
+
+   	// Cleanup the mem logger
+   	LBSMEMLOG_END();
+ 
+   	//
+   	// do any _FINAL _ operations. If anything.. default does nothing
+   	s->Final();
+   	// Cleanup the scheduler
+   	CleanupStack::PopAndDestroy(s);
+   	return r;
+   	}		
+
+
+/** Create instance of trap cleanup stack and the process by specified parameters
+
+@param aParams A reference to TProcessStartParams object
+@return Symbian error code
+@see TProcessStartParams
+@internalTechnology
+@released
+ */
+ TInt CLaunchedProcess::CompleteProcessLaunch(TProcessStartParams& aParams)
+	{
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New();
+	TInt r=KErrNoMemory;
+	if (cleanup)
+		{
+		TRAP(r,DoCompleteProcessLaunchL(aParams));
+		delete cleanup;
+		}
+	__UHEAP_MARKEND;
+	return r;	
+
+	}
+
+/** Create the server process by specified parameters, create, install and run the active scheduler
+wait for scheduler to be stopped to return process
+
+@param aParams A reference to TProcessStartParams object
+@return Symbian error code
+@see TProcessStartParams
+@internalTechnology
+@released
+ */
+ TInt CLaunchedProcess::DoCompleteProcessLaunchL(TProcessStartParams& aParams)
+	{	
+ 	// first check that we are about to create the right type of server
+	if(aParams.GetType() != KProcessStartParamsTypeUid)
+		{
+		// this is not a process type that we understand. Has the caller
+		// pass TServerStartParams by mistake?
+		User::Leave(KErrArgument); // this aborts the server startup
+		}
+
+	// rename our main thread	
+	User::LeaveIfError(User::RenameThread(aParams.GetProcessName()));
+	
+	TInt r = KErrNone;
+	// create and install the active scheduler we need
+	CSecureProcessASBase* s=new(ELeave) CSecureProcessASBase();
+	CleanupStack::PushL(s);
+	CActiveScheduler::Install(s);
+
+   	// Create the memory logger object for monitoring memory
+   	LBSMEMLOG_BEGIN();
+
+	CBase* baseObj = s->CreateRootObjectL();
+
+	CleanupStack::PushL(baseObj);
+	
+	r = s->EntryPointL(baseObj);
+	
+	// is the process that started us interested in known that we are alive and well
+	if(aParams.GetRendezvousRequired())
+		{		
+		// tell any starting process that we have started successfully and are
+		// now ready to receieve mesages or process events
+		RProcess::Rendezvous(KErrNone);
+		}
+	// Ready to run
+	CActiveScheduler::Start();
+	//
+	// Cleanup the client
+	CleanupStack::PopAndDestroy(1);
+
+   	// Cleanup the mem logger
+   	LBSMEMLOG_END();
+
+	//
+	// do any _FINAL _ operations. If anything.. default does nothing
+	s->Final();
+	// Cleanup the scheduler
+	CleanupStack::PopAndDestroy(s);
+	return r;
+	}		
+