--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ccservices/cmsservices/cmsengine/Client/src/cmssession.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -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 <flogger.h>
+#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( KCmsServerName );
+ TFullName name;
+ return ( findServer.Next( name ) == KErrNone );
+ }
+
+#ifdef _DEBUG
+// ----------------------------------------------------
+// RCmsSession::::WriteToLog
+//
+// ----------------------------------------------------
+//
+void RCmsSession::WriteToLog( TRefByValue<const TDesC8> aFmt,... )
+ {
+ VA_LIST list;
+ VA_START( list, aFmt );
+ TBuf8<KClientLogBufferMaxSize> buf;
+ buf.FormatList( aFmt, list );
+ RFileLogger::Write( KCmsClientLogDir, KCmsClientLogFile, EFileLoggingModeAppend, buf );
+ RDebug::RawPrint( buf );
+ }
+#endif //_DEBUG