--- /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 );
+ }