diff -r 5b6f26637ad3 -r f4a778e096c2 ccservices/cmsservices/cmsengine/Client/src/cmssession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ccservices/cmsservices/cmsengine/Client/src/cmssession.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,140 @@ +/* +* Copyright (c) 2007 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: +* +* +*/ + +#include +#include "cmssession.h" +#include "cmscommondefines.h" + +//CLASS DECLARATION +EXPORT_C RCmsSession::RCmsSession() : iConnected( EFalse ) + { + } + +// ---------------------------------------------------- +// RCmsClient::Version +// +// ---------------------------------------------------- +// +EXPORT_C TVersion RCmsSession::Version() const + { + return TVersion( KCmsSrvMajorVersionNumber, + KCmsSrvMinorVersionNumber, + KCmsSrvBuildVersionNumber ); + } + +// ---------------------------------------------------- +// RCmsClient::~RCmsClient +// +// ---------------------------------------------------- +// +EXPORT_C RCmsSession::~RCmsSession() + { + } + +// ---------------------------------------------------- +// RCmsClient::Connect +// +// ---------------------------------------------------- +// +EXPORT_C TInt RCmsSession::Connect() + { + #ifdef _DEBUG + RCmsSession::WriteToLog( _L8( "RCmsSession::Connect()" ) ); + #endif + TInt ret = KErrNone; + if( !iConnected ) + { + TInt threadStart = StartServer(); + #ifdef _DEBUG + RCmsSession::WriteToLog( _L8( " StartServer() returned %d" ), threadStart ); + #endif + if( threadStart == KErrNone || threadStart == KErrAlreadyExists ) + { + ret = CreateSession( KCmsServerLib, Version(), KTTDefaultMessageSlots ); + #ifdef _DEBUG + RCmsSession::WriteToLog( _L8( " CreateSession() returned %d" ), ret ); + #endif + iConnected = ( ret == KErrNone ); + } + else ret = threadStart; + } + return ret; + } + +// ---------------------------------------------------- +// RCmsSession::StartServer +// +// ---------------------------------------------------- +// +TInt RCmsSession::StartServer() + { + #ifdef _DEBUG + RCmsSession::WriteToLog( _L8( "RCmsSession::StartServer()" ) ); + #endif + TInt ret = KErrNone; + TRequestStatus status = KRequestPending; + if ( !IsRunning() ) + { + RProcess server; + ret = server.Create( KCmsServerExe, KNullDesC ); + #ifdef _DEBUG + RCmsSession::WriteToLog( _L8( " RThread::Create() returned: %d" ), ret ); + #endif + if( ret != KErrNone ) + return ret; + server.Rendezvous( status ); + status != KRequestPending ? server.Kill( 0 ) : server.Resume(); + //Wait for start or death + User::WaitForRequest( status ); + ret = server.ExitType() == EExitPanic ? KErrGeneral : status.Int(); + server.Close(); + } + return ret; + } + +// ---------------------------------------------------- +// RCmsSession::IsRunning +// +// ---------------------------------------------------- +// +TBool RCmsSession::IsRunning() + { + #ifdef _DEBUG + RCmsSession::WriteToLog( _L8( "RCmsSession::IsRunning()" ) ); + #endif + TFindServer findServer( KCmsServerLib ); + TFullName name; + return ( findServer.Next( name ) == KErrNone ); + } + +#ifdef _DEBUG +// ---------------------------------------------------- +// RCmsSession::::WriteToLog +// +// ---------------------------------------------------- +// +void RCmsSession::WriteToLog( TRefByValue aFmt,... ) + { + VA_LIST list; + VA_START( list, aFmt ); + TBuf8 buf; + buf.FormatList( aFmt, list ); + RFileLogger::Write( KCmsClientLogDir, KCmsClientLogFile, EFileLoggingModeAppend, buf ); + RDebug::RawPrint( buf ); + } +#endif //_DEBUG