dbgsrv/coredumpserver/server/src/coredumpserver.cpp
changeset 0 c6b0df440bee
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbgsrv/coredumpserver/server/src/coredumpserver.cpp	Tue Mar 02 10:33:16 2010 +0530
@@ -0,0 +1,188 @@
+// 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 "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:
+// core_dump_server.cpp
+//
+
+// System includes
+#include <e32cmn.h>
+#include <e32std.h>
+#include <e32svr.h>
+
+// Project includes
+#include "coredumpserver.h"
+#include "coredumpsession.h"
+#include "flashdatasource.h"
+
+/**
+This is the version of the security server that we have developed our code against
+and it comes from the interface definition of the DSS at the time of compilation.
+*/
+const TVersion securityServerVersion( 
+				KDebugServMajorVersionNumber, 
+				KDebugServMinorVersionNumber, 
+				KDebugServPatchVersionNumber );
+
+/*
+* Called to panic the server (in event of partial construction or serious error)
+*/
+void CCoreDumpServer::PanicServer(TCoreDumpServerPanic aPanic)
+	{
+        //are we using this??
+	User::Panic(KCoreDumpServerName, aPanic);
+	}
+	
+CCoreDumpServer* CCoreDumpServer::NewL()
+{
+	CCoreDumpServer* self = CCoreDumpServer::NewLC();
+    CleanupStack::Pop();
+    return self;
+}
+	
+/*
+* Symbian OS 1st stage construction
+*/
+CCoreDumpServer* CCoreDumpServer::NewLC()
+	{
+	//RDebug::Print( _L("CCoreDumpServer* CCoreDumpServer::NewLC()\n"));
+	CCoreDumpServer* self = new (ELeave) CCoreDumpServer();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+	
+/*
+* Destructor
+*/
+CCoreDumpServer::~CCoreDumpServer()
+	{
+    //LOG_MSG("->CCoreDumpServer::~CCoreDumpServer\n");
+    iSecSess.Close();
+	}
+
+/*
+* Called when a new session is to be created
+*/
+CSession2* CCoreDumpServer::NewSessionL( const TVersion& aVersion, 
+									   const RMessage2& /*aMessage*/ ) const
+	{
+
+	//RDebug::Printf( "->CCoreDumpServer::NewSessionL()\n" );
+    
+    RSecuritySvrSession &session = const_cast<RSecuritySvrSession&>(iSecSess);
+    
+	THandleInfo dssSessionInfo;
+	session.HandleInfo( & dssSessionInfo );
+
+	if( dssSessionInfo.iNumOpenInProcess > 1 )
+		{
+        //if there is already a session with DSS this means that we started it already for someone else
+		RDebug::Print( _L("CCoreDumpServer::NewSessionL() : Error : Session to DSS already in use by CDS\n"));
+		User::Leave( KErrAlreadyExists );
+		}
+
+	// Check the client-side API version number against the server version number.
+	TVersion serverVersion(	KCoreDumpServMajorVersionNumber,
+							KCoreDumpServMinorVersionNumber,
+							KCoreDumpServBuildVersionNumber);
+
+	LOG_MSG4( "CCoreDumpServer::NewSessionL() : Server version: major=%d,minor=%d,build=%d\n",
+		KCoreDumpServMajorVersionNumber, KCoreDumpServMinorVersionNumber, KCoreDumpServBuildVersionNumber );
+
+	LOG_MSG4( "  Client API built against : major=%d,minor=%d,build=%d\n", 
+		aVersion.iBuild, aVersion.iMajor, aVersion.iMinor );
+
+	if( !User::QueryVersionSupported( serverVersion, aVersion ) )
+		{
+		// This server version is incompatible with the version of the server the 
+		// client-side API was built against
+		RDebug::Printf( "CCoreDumpServer::NewSessionL() : Leaving due to incompatible versions\n" );
+		User::Leave( KErrNotSupported );
+		}
+
+	//LOG_MSG("CCoreDumpServer::NewSessionL - creating new core dump session\n");
+	return CCoreDumpSession::NewL(session);
+	}
+
+/*
+* Called when a session is opened
+*/
+void CCoreDumpServer::SessionOpened()
+	{
+	//LOG_MSG("->CCoreDumpServer::SessionOpened()\n");
+	++iNumSessions;
+	}
+
+
+/*
+* Called when a session is closed 
+*/
+void CCoreDumpServer::SessionClosed()
+	{
+	//LOG_MSG("->CCoreDumpServer::SessionClosed()\n");
+	if(--iNumSessions < 1) // No more sessions connected to the server, shut down the server
+		{
+	    //LOG_MSG("CCoreDumpServer::SessionClosed() -> CActiveScheduler::Stop()\n");
+		CActiveScheduler::Stop();
+		}
+	}
+   
+
+/*
+* Called when the server active object's RunL() leaves
+*/
+TInt CCoreDumpServer::RunError(TInt aError)
+	{
+	Message().Complete(aError);
+    
+	// Call Restart(), as RunL() left before server got chance to re-issue its request
+	ReStart();
+
+	return KErrNone;
+	}
+
+// PRIVATE MEMBER FUNCTIONS
+
+/*
+* C++ Constructor
+*/
+CCoreDumpServer::CCoreDumpServer( TInt aPriority )
+	: CServer2( aPriority ), 
+	  iNumSessions( 0 )
+	{
+	// No implementation required
+	}
+	
+
+/*
+* Symbian OS 2nd stage construction. Called from CCoreDumpServer::NewLC()
+*/	
+void CCoreDumpServer::ConstructL()
+	{
+	//LOG_MSG("->CCoreDumpServer::ConstructL()\n" );
+
+	TInt err = iSecSess.Connect( securityServerVersion );
+
+	if( KErrNone != err )
+		{
+		_LIT( KDssStartErrorMsg ,"Core Dump Server: Unable to Start/Connect to Debug Security Server");
+		User::InfoPrint( KDssStartErrorMsg );
+
+		LOG_MSG2("CCoreDumpServer::ConstructL() - unable to open security server session! err:%d\n", err);
+		User::Leave(err);
+		}
+
+    err = iSecSess.ShareAuto();
+    
+	StartL( KCoreDumpServerName );
+	}