sl@0: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: sl@0: EXPORT_C void CSimulProcServer::SessionClosed() sl@0: { sl@0: iSessionCount--; sl@0: if (iSessionCount == 0) sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: sl@0: sl@0: EXPORT_C CSimulProcServer::CSimulProcServer() sl@0: : CServer2(EPriorityNormal) sl@0: { sl@0: } sl@0: sl@0: sl@0: EXPORT_C CSimulProcServer::~CSimulProcServer() sl@0: { sl@0: } sl@0: sl@0: sl@0: EXPORT_C CSimulProcSession::CSimulProcSession() sl@0: /** sl@0: * Constructor sl@0: */ sl@0: { sl@0: } sl@0: sl@0: EXPORT_C CSimulProcSession::~CSimulProcSession() sl@0: /** sl@0: * Destructor sl@0: */ sl@0: { sl@0: const CSimulProcServer* p=reinterpret_cast(Server()); sl@0: // // Shuts Down the server if this is the last open session sl@0: const_cast(p)->SessionClosed(); sl@0: } sl@0: sl@0: sl@0: sl@0: sl@0: sl@0: EXPORT_C CSession2* CSimulProcServer::NewSessionL(const TVersion& /*aVersion*/,const RMessage2& /*aMessage*/) const sl@0: /** sl@0: * @param RMessage - RMessage for the session open sl@0: * Secure version sl@0: */ sl@0: { sl@0: CSimulProcSession* session = new (ELeave) CSimulProcSession(); sl@0: const_cast(this)->iSessionCount++; sl@0: return session; sl@0: } sl@0: sl@0: sl@0: sl@0: EXPORT_C void CSimulProcSession::ServiceL(const RMessage2& aMessage) sl@0: /** sl@0: * @param aMessage - Function and data for the session sl@0: * Session was created by pure virtual CTestServer::NewSessionL() sl@0: * Message Functions defined in TestExecuteClient.h sl@0: * sl@0: * EOpenTestStep - Creates a new subsession sl@0: * ERunTestStep - Executes the test step asynchronously sl@0: * EAbortTestStep - Kill()'s the executing test step sl@0: * ECloseTestStep - Free's the resource sl@0: * sl@0: * Secure and non-secure variants sl@0: * There are two modes of operation: sl@0: * Test step is opened with the shared data boolean set to FALSE: sl@0: * Create a new CStepControl instance and hence a new thread in its own heap sl@0: * Consecutive or Concurrent operation sl@0: * Test step is opened with the shared data boolean set to TRUE: sl@0: * Create a CPersistentStepControl and keep reusing it, and its thread sl@0: * Consecutive operation only sl@0: */ sl@0: { sl@0: switch(aMessage.Function()) sl@0: { sl@0: case EMMTSOpenTestStep : sl@0: { sl@0: TBuf<256> stepName; sl@0: // Read the step name from the descriptor sl@0: aMessage.ReadL(0,stepName); sl@0: const CSimulProcServer* p=reinterpret_cast(Server()); sl@0: iTestStep = p->CreateTestStep(stepName); sl@0: aMessage.Complete(KErrNone); sl@0: } sl@0: sl@0: break; sl@0: case EMMTSStartProcessing: sl@0: { sl@0: if (!iTestStep) sl@0: aMessage.Complete(KErrNotReady); sl@0: else sl@0: { sl@0: if (iActiveCallback) sl@0: iActiveCallback->Cancel(); sl@0: delete iActiveCallback; sl@0: iActiveCallback = NULL; sl@0: iActiveCallback = new (ELeave) CActiveCallback(aMessage); sl@0: iTestStep->StartProcessing(iActiveCallback->ActiveStatus()); sl@0: } sl@0: } sl@0: sl@0: break; sl@0: case EMMTSStopProcessing : sl@0: { sl@0: if (!iTestStep) sl@0: aMessage.Complete(KErrNotReady); sl@0: else sl@0: { sl@0: TBuf8<256> message; sl@0: TVerdict verdict = iTestStep->EndProcessingAndReturnResult(message); sl@0: TPckgBuf v(verdict); sl@0: aMessage.WriteL(0,v); sl@0: aMessage.WriteL(1,message); sl@0: aMessage.Complete(KErrNone); sl@0: } sl@0: break; sl@0: } sl@0: case EMMTSClose : sl@0: { sl@0: aMessage.Complete(KErrNone); sl@0: } sl@0: sl@0: break; sl@0: default: sl@0: break; sl@0: } sl@0: } sl@0: sl@0: void CSimulProcSession::CActiveCallback::RunL() sl@0: { sl@0: iMessage.Complete(iStatus.Int()); sl@0: } sl@0: sl@0: void CSimulProcSession::CActiveCallback::DoCancel() sl@0: { sl@0: sl@0: } sl@0: sl@0: CSimulProcSession::CActiveCallback::CActiveCallback(const RMessage2& aMessage) sl@0: : CActive(EPriorityNormal), iMessage(aMessage) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: TRequestStatus& CSimulProcSession::CActiveCallback::ActiveStatus() sl@0: { sl@0: SetActive(); sl@0: iStatus = KRequestPending; sl@0: return iStatus; sl@0: } sl@0: sl@0: sl@0: EXPORT_C CSimulProcTestStep::CSimulProcTestStep() sl@0: { sl@0: } sl@0: sl@0: EXPORT_C CSimulProcTestStep::~CSimulProcTestStep() sl@0: { sl@0: }