diff -r 000000000000 -r c6b0df440bee dbgsrv/coredumpserver/server/src/coredumpserver.cpp --- /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 +#include +#include + +// 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(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 ); + }