diff -r 000000000000 -r 4e1aa6a622a0 sysstatemgmt/systemstatemgr/cle/src/clecli.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sysstatemgmt/systemstatemgr/cle/src/clecli.cpp Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,146 @@ +// Copyright (c) 2008-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: +// + +#include "clecli.h" +#include "clesrv.h" + +/** + Construct the client-side CLE session. + +*/ +RCleSession::RCleSession() +: RSessionBase(),iVersion( KCleCliVersionMajor, KCleCliVersionMinor, KCleCliVersionBuild ) + { + } //lint !e1401 not initialized by constructor (iSpare) + + + +/** + Connect to the CLE server. If the server is not found, this function will attempt to start it + and retry connecting to it. + +@leave KErrNoMemory if no memory. +@leave One of the system-wide error codes. +*/ +void RCleSession::ConnectL() + { + // Guard against multiple calls. + if( KNullHandle != iHandle ) + { + User::Leave( KErrAlreadyExists ); + } + + const TInt err = CreateSession(KCleSrvName, iVersion, KCleSrvMsgSlots); + if( (KErrNotFound == err) || (KErrServerTerminated == err) ) + { + User::LeaveIfError( CCleServer::StartCleSrv(KCleSrvName) ); + User::LeaveIfError( CreateSession(KCleSrvName, iVersion, KCleSrvMsgSlots) ); + } + else + { + User::LeaveIfError( err ); + } + } + +/** + Connect to the CLE server with the specified name. If the server is not found, this function will attempt to start it + and retry connecting to it. + +@param aServerName The name of the CLE server to connect to +@leave KErrNoMemory if no memory. +@leave One of the system-wide error codes. +*/ +void RCleSession::ConnectL(const TDesC& aServerName) + { + // Guard against multiple calls. + if( KNullHandle != iHandle ) + { + User::Leave( KErrAlreadyExists ); + } + + const TInt err = CreateSession(aServerName, iVersion, KCleSrvMsgSlots); + if( (KErrNotFound == err) || (KErrServerTerminated == err) ) + { + User::LeaveIfError( CCleServer::StartCleSrv(aServerName) ); + User::LeaveIfError( CreateSession(aServerName, iVersion, KCleSrvMsgSlots) ); + } + else + { + User::LeaveIfError( err ); + } + } + +void RCleSession::Close() + { + // Guard against illegal operations if non-open. + if( Handle() ) + { + ExecuteCommandListCancel(); + } + RSessionBase::Close(); + } + + +/** + Sends the pointer of the command list to the CLE server for reconstruction and execution + of the commands. + The system currently only supports one call per client session. + + @param aCmdList A constructed command list to be passed to the CLE server for execution. + @param aStatus The TRequestStatus is completed by server-side code when + all commands in a list have been initiated. KErrNone if list execution is successful. A system-wide error code + in case of error. KErrCancel if a call is made to ExecuteCommandListCancel() during list processing. + +*/ + void RCleSession::ExecuteCommandList( const CSsmCommandList& aCmdList, TRequestStatus& aStatus ,TCmdErrorSeverity& /*aSeverity*/) + { + TRequestStatus* clientStatus = &aStatus; + + if( aCmdList.Count() == 0 ) + { + // Empty cmd list? Notify the client benignly and don't bother the server. + User::RequestComplete( clientStatus, KErrArgument ); + + return; + } + + if( !Handle() ) + { + // Suggests that a call to ConnectL() might have been overlooked. + User::RequestComplete( clientStatus, KErrDisconnected ); + + return; + } + TIpcArgs args( &aCmdList ); + SendReceive( ECleSrvExecuteCmdList, args, aStatus ); + } + + + +/** + Cancels a currently executing command list. + + @see ExecuteCommandList() + +*/ +void RCleSession::ExecuteCommandListCancel() + { + + if( Handle() ) + { + SendReceive( ECleSrvExecuteCmdListCancel ); + } + + }