diff -r 675a964f4eb5 -r 35751d3474b7 cryptomgmtlibs/securitytestfw/test/testutil/server/testutilsession.cpp --- a/cryptomgmtlibs/securitytestfw/test/testutil/server/testutilsession.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptomgmtlibs/securitytestfw/test/testutil/server/testutilsession.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,463 +1,472 @@ -/* -* 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 the License "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: -* TestUtil - server implementation -* -*/ - - - - -/** - @file - @test - @internalComponent -*/ - -#include "testutilserver.h" -#include "testutilsession.h" -#include "testutilclientserver.h" - -// Timer implementation -CGenericTimer* CGenericTimer::NewL(MTimeoutClient& aClient) - { - CGenericTimer* self = new(ELeave) CGenericTimer(aClient); - CleanupStack::PushL(self); - self->ConstructL(); // calls CTimer::Construct - CleanupStack::Pop(self); - return self; - } - -CGenericTimer::CGenericTimer(MTimeoutClient& aClient) - : CTimer(-1), iClient(aClient) - { - CActiveScheduler::Add(this); - } - -void CGenericTimer::RunL() - { - // When the timeout expires, then call the client's handler - iClient.HandleTimeout(); - }; - -// file detector implementation -CTestFileDetector* CTestFileDetector::NewL(const RMessage2& aMessage, RFs& aFs) - { - CTestFileDetector* self = new (ELeave) CTestFileDetector(aMessage, aFs); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -CTestFileDetector::CTestFileDetector(const RMessage2& aMessage, RFs& aFs) - :CActive(EPriorityNormal), iFs(aFs), iMessage(aMessage) - { - iTimeInterval = iMessage.Int1(); - CActiveScheduler::Add(this); - } - -CTestFileDetector::~CTestFileDetector() - { - Cancel(); - delete iTimer; - delete iFileName; - } - -void CTestFileDetector::ConstructL() - { - if (iTimeInterval!=0) - { - iTimer=CGenericTimer::NewL(*this); - } - iFileName = CTestUtilSessionCommon::AllocateInputBufferLC(iMessage, 0); - CleanupStack::Pop(); - } - -void CTestFileDetector::DetectFile() - { - if (!iTimer) - { - CheckAndComplete(); - } - else - { - TEntry entry; - TInt err=iFs.Entry(iFileName->Des(), entry); - if (err == KErrNone) - { - TPckgC exists(ETrue); - iMessage.WriteL(2, exists); - iMessage.Complete(KErrNone); - } - else - { - iTimer->After(iTimeInterval*1000); - iFs.NotifyChange(ENotifyFile, - iStatus, - iFileName->Des()); - SetActive(); - } - } - } - -void CTestFileDetector::RunL() - { - if (iTimer) - { - iTimer->Cancel(); - } - CheckAndComplete(); - } - -void CTestFileDetector::DoCancel() - { - iFs.NotifyChangeCancel(iStatus); - } - -void CTestFileDetector::HandleTimeout() - { - Cancel(); - CheckAndComplete(); - } - -void CTestFileDetector::CheckAndComplete() - { - TEntry entry; - TInt err=iFs.Entry(iFileName->Des(), entry); - if (err == KErrNone) - { - TPckgC exists(ETrue); - iMessage.WriteL(2, exists); - iMessage.Complete(KErrNone); - } - else if (err == KErrNotFound - || err == KErrPathNotFound - || err == KErrNotReady - || err == KErrCorrupt) - { - TPckgC exists(EFalse); - iMessage.WriteL(2, exists); - iMessage.Complete(KErrNone); - } - else - { - iMessage.Complete(err); - } - } - -// CTestUtilSession Implementation -CTestUtilSession::CTestUtilSession() - { - } - -CTestUtilSession::~CTestUtilSession() - { - Server().DropSession(); - for (TInt i = 0;i < iLockedFileHandles.Count(); i++) - { - iLockedFileHandles[i].Close(); - } - iLockedFileHandles.Close(); - - delete iFileWatcher; - delete iDetector; - } - -void CTestUtilSession::CreateL() - { - Server().AddSession(); - } - -_LIT(KBP, ":\\"); -_LIT(KFAT,"Fat"); - -void CTestUtilSession::ServiceL(const RMessage2& aMessage) - { - switch (aMessage.Function()) - { - case ECopy: - { - HBufC* source = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - HBufC* destination = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,1); - - TInt err = Server().FileMan().Copy(*source, *destination, CFileMan::ERecurse | CFileMan::EOverWrite); - if (err == KErrNone) - { - // Turn off the read only attributes - TTime time(0); // must specify 0, or a valid time, otherwise sets time to a random value and causes -6/-21 errors - err = Server().FileMan().Attribs(*destination, 0, KEntryAttReadOnly, time, CFileMan::ERecurse); - } - - CleanupStack::PopAndDestroy(destination); - CleanupStack::PopAndDestroy(source); - - aMessage.Complete(err); - break; - } - case EMove: - { - HBufC* source = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - HBufC* destination = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,1); - - TInt err = Server().FS().Rename(*source,*destination); - if (err == KErrNone) - { - // Turn off the read only attributes - TTime time(0); // must specify 0, or a valid time, otherwise sets time to a random value and causes -6/-21 errors - err = Server().FileMan().Attribs(*destination, 0, KEntryAttReadOnly, time, CFileMan::ERecurse); - } - - CleanupStack::PopAndDestroy(destination); - CleanupStack::PopAndDestroy(source); - - aMessage.Complete(err); - break; - } - case EDelete: - { - HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - TEntry entry; - TInt err = Server().FS().Entry(*fileName, entry); - if (err == KErrNone) - { - if (entry.IsDir()) - { - TPath pathName(*fileName); - if (pathName[pathName.Length() - 1] != KPathDelimiter) - { - pathName.Append(KPathDelimiter); - } - err = Server().FileMan().RmDir(pathName); - } - else - { - err = Server().FS().Delete(*fileName); - } - } - CleanupStack::PopAndDestroy(fileName); - - aMessage.Complete(err); - break; - } - case ERmDir: - { - HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - TParsePtrC parsePtr(*fileName); - if(parsePtr.IsRoot()) - { - User::Leave(KErrAccessDenied); - } - TInt err = Server().FileMan().RmDir(*fileName); - CleanupStack::PopAndDestroy(fileName); - - aMessage.Complete(err); - break; - } - case EMkDirAll: - { - HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - TInt err = Server().FS().MkDirAll(*fileName); - CleanupStack::PopAndDestroy(fileName); - - aMessage.Complete(err); - break; - } - case EFileExists: - { - delete iDetector; - iDetector=CTestFileDetector::NewL(aMessage, - Server().FS()); - iDetector->DetectFile(); - break; - } - case ELock: - { - HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - RFile lockFile; - TInt err = lockFile.Open(Server().FS(), *fileName, EFileWrite); - if (err == KErrNone) - iLockedFileHandles.Append(lockFile); - - CleanupStack::PopAndDestroy(fileName); - aMessage.Complete(err); - break; - } - case EUnlock: - { - HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - TInt err = KErrNotFound; - TFileName lockedFileName; - for (TInt i = 0; i < iLockedFileHandles.Count() && err;i++) - { - TInt err2 = iLockedFileHandles[i].FullName(lockedFileName); - User::LeaveIfError(err2); - if (lockedFileName.MatchF(*fileName) != KErrNotFound) - { - iLockedFileHandles[i].Close(); - iLockedFileHandles.Remove(i); - err = KErrNone; - } - } - CleanupStack::PopAndDestroy(fileName); - aMessage.Complete(err); - break; - } - case EFormat: - { - TInt drive = aMessage.Int0(); - TBool formatFatOnly = aMessage.Int1(); - TChar aDriveChar; - User::LeaveIfError(Server().FS().DriveToChar(drive, aDriveChar)); - TBuf<3> bfDrv; - bfDrv.Append(aDriveChar); - bfDrv.Append(KBP); - - RFormat format; - TInt count; - User::LeaveIfError(format.Open(Server().FS(), bfDrv, EHighDensity, count)); - CleanupClosePushL(format); - - if (formatFatOnly) - { - User::LeaveIfError(format.Next(count)); - } - else - { - while (count > 0) - { - User::LeaveIfError(format.Next(count)); - } - } - - CleanupStack::PopAndDestroy(&format); - aMessage.Complete(KErrNone); - break; - } - case EMount: - { - TInt drive = aMessage.Int0(); - User::LeaveIfError(Server().FS().Connect()); - //Mount the drive synchronizely to make sure the drive is ready for the next operation - User::LeaveIfError(Server().FS().MountFileSystem(KFAT, drive, ETrue)); - aMessage.Complete(KErrNone); - break; - } - case EUnMount: - { - TInt drive = aMessage.Int0(); - TFileName fsName; - User::LeaveIfError(Server().FS().FileSystemName(fsName, drive)); - User::LeaveIfError(Server().FS().DismountFileSystem(fsName, drive)); - aMessage.Complete(KErrNone); - break; - } - case ESetReadOnly: - { - HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - TInt setReadOnly = aMessage.Int1(); - TUint setmask; - TUint clearmask; - if (setReadOnly) - { - // Setting read only attribute - setmask = KEntryAttReadOnly; - clearmask = 0; - } - else - { - // Clearing read only attribute - setmask = 0; - clearmask = KEntryAttReadOnly; - } - - // Turn off the read only attributes - TTime time(0); - TInt err = Server().FileMan().Attribs(*fileName, setmask, clearmask, time); - CleanupStack::PopAndDestroy(fileName); - aMessage.Complete(err); - break; - } - case EGetFileHandle: - { - HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - RFile file; - CleanupClosePushL(file); - User::LeaveIfError(file.Open(Server().FS(), *fileName, EFileRead | EFileShareReadersOnly)); - User::LeaveIfError(file.TransferToClient(aMessage, 1)); - CleanupStack::PopAndDestroy(2, fileName); // file - break; - } - case EWatchFile: - { - if (iFileWatcher) - { - if (iFileWatcher->IsActive()) - { - aMessage.Complete(KErrServerBusy); - break; - } - else - { - delete iFileWatcher; - iFileWatcher = NULL; - } - } - // Create a new file watcher for this session - iFileWatcher = CFileWatcher::NewL(Server().FS(), aMessage); - break; - } - case EWatchFileCancel: - { - if (iFileWatcher) - { - iFileWatcher->Cancel(); - aMessage.Complete(KErrNone); - } - else - { - // No file watch request to cancel! - aMessage.Complete(KErrNotReady); - } - break; - } - case EGetNumFiles: - { - HBufC* dirPath = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); - CDir* dirContents = NULL; - - User::LeaveIfError(Server().FS().GetDir(*dirPath, KEntryAttNormal, ESortNone, dirContents)); - TPckg numFiles(dirContents->Count()); - - delete dirContents; - aMessage.WriteL(1, numFiles); - aMessage.Complete(KErrNone); - CleanupStack::PopAndDestroy(dirPath); - break; - } - default: - { - PanicClient(aMessage,EPanicIllegalFunction); - break; - } - } - } - -void CTestUtilSession::ServiceError(const RMessage2& aMessage,TInt aError) - { - if (aError==KErrBadDescriptor) - PanicClient(aMessage,EPanicBadDescriptor); - CSession2::ServiceError(aMessage,aError); - } -// End of file +/* +* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* TestUtil - server implementation +* +*/ + + +/** + @file + @test + @internalComponent +*/ + +#include "testutilserver.h" +#include "testutilsession.h" +#include "testutilclientserver.h" + +// Timer implementation +CGenericTimer* CGenericTimer::NewL(MTimeoutClient& aClient) + { + CGenericTimer* self = new(ELeave) CGenericTimer(aClient); + CleanupStack::PushL(self); + self->ConstructL(); // calls CTimer::Construct + CleanupStack::Pop(self); + return self; + } + +CGenericTimer::CGenericTimer(MTimeoutClient& aClient) + : CTimer(-1), iClient(aClient) + { + CActiveScheduler::Add(this); + } + +void CGenericTimer::RunL() + { + // When the timeout expires, then call the client's handler + iClient.HandleTimeout(); + }; + +// file detector implementation +CTestFileDetector* CTestFileDetector::NewL(const RMessage2& aMessage, RFs& aFs) + { + CTestFileDetector* self = new (ELeave) CTestFileDetector(aMessage, aFs); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CTestFileDetector::CTestFileDetector(const RMessage2& aMessage, RFs& aFs) + :CActive(EPriorityNormal), iFs(aFs), iMessage(aMessage) + { + iTimeInterval = iMessage.Int1(); + CActiveScheduler::Add(this); + } + +CTestFileDetector::~CTestFileDetector() + { + Cancel(); + delete iTimer; + delete iFileName; + } + +void CTestFileDetector::ConstructL() + { + if (iTimeInterval!=0) + { + iTimer=CGenericTimer::NewL(*this); + } + iFileName = CTestUtilSessionCommon::AllocateInputBufferLC(iMessage, 0); + CleanupStack::Pop(); + } + +void CTestFileDetector::DetectFile() + { + if (!iTimer) + { + CheckAndComplete(); + } + else + { + TEntry entry; + TInt err=iFs.Entry(iFileName->Des(), entry); + if (err == KErrNone) + { + TPckgC exists(ETrue); + iMessage.WriteL(2, exists); + iMessage.Complete(KErrNone); + } + else + { + iTimer->After(iTimeInterval*1000); + iFs.NotifyChange(ENotifyFile, + iStatus, + iFileName->Des()); + SetActive(); + } + } + } + +void CTestFileDetector::RunL() + { + if (iTimer) + { + iTimer->Cancel(); + } + CheckAndComplete(); + } + +void CTestFileDetector::DoCancel() + { + iFs.NotifyChangeCancel(iStatus); + } + +void CTestFileDetector::HandleTimeout() + { + Cancel(); + CheckAndComplete(); + } + +void CTestFileDetector::CheckAndComplete() + { + TEntry entry; + TInt err=iFs.Entry(iFileName->Des(), entry); + if (err == KErrNone) + { + TPckgC exists(ETrue); + iMessage.WriteL(2, exists); + iMessage.Complete(KErrNone); + } + else if (err == KErrNotFound + || err == KErrPathNotFound + || err == KErrNotReady + || err == KErrCorrupt) + { + TPckgC exists(EFalse); + iMessage.WriteL(2, exists); + iMessage.Complete(KErrNone); + } + else + { + iMessage.Complete(err); + } + } + +// CTestUtilSession Implementation +CTestUtilSession::CTestUtilSession() + { + } + +CTestUtilSession::~CTestUtilSession() + { + Server().DropSession(); + for (TInt i = 0;i < iLockedFileHandles.Count(); i++) + { + iLockedFileHandles[i].Close(); + } + iLockedFileHandles.Close(); + + delete iFileWatcher; + delete iDetector; + } + +void CTestUtilSession::CreateL() + { + Server().AddSession(); + } + +_LIT(KBP, ":\\"); +_LIT(KFAT,"Fat"); + +void CTestUtilSession::ServiceL(const RMessage2& aMessage) + { + switch (aMessage.Function()) + { + case ECopy: + { + HBufC* source = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + HBufC* destination = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,1); + + TInt err = Server().FileMan().Copy(*source, *destination, CFileMan::ERecurse | CFileMan::EOverWrite); + if (err == KErrNone) + { + // Turn off the read only attributes + TTime time(0); // must specify 0, or a valid time, otherwise sets time to a random value and causes -6/-21 errors + err = Server().FileMan().Attribs(*destination, 0, KEntryAttReadOnly, time, CFileMan::ERecurse); + } + + CleanupStack::PopAndDestroy(destination); + CleanupStack::PopAndDestroy(source); + + aMessage.Complete(err); + break; + } + case EMove: + { + HBufC* source = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + HBufC* destination = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,1); + + TInt err = Server().FS().Rename(*source,*destination); + if (err == KErrNone) + { + // Turn off the read only attributes + TTime time(0); // must specify 0, or a valid time, otherwise sets time to a random value and causes -6/-21 errors + err = Server().FileMan().Attribs(*destination, 0, KEntryAttReadOnly, time, CFileMan::ERecurse); + } + + CleanupStack::PopAndDestroy(destination); + CleanupStack::PopAndDestroy(source); + + aMessage.Complete(err); + break; + } + case EDelete: + { + HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + TEntry entry; + TInt err = Server().FS().Entry(*fileName, entry); + if (err == KErrNone) + { + if (entry.IsDir()) + { + TPath pathName(*fileName); + if (pathName[pathName.Length() - 1] != KPathDelimiter) + { + pathName.Append(KPathDelimiter); + } + err = Server().FileMan().RmDir(pathName); + } + else + { + err = Server().FS().Delete(*fileName); + } + } + CleanupStack::PopAndDestroy(fileName); + + aMessage.Complete(err); + break; + } + case ERmDir: + { + HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + TParsePtrC parsePtr(*fileName); + if(parsePtr.IsRoot()) + { + User::Leave(KErrAccessDenied); + } + TInt err = Server().FileMan().RmDir(*fileName); + CleanupStack::PopAndDestroy(fileName); + + aMessage.Complete(err); + break; + } + case EMkDirAll: + { + HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + TInt err = Server().FS().MkDirAll(*fileName); + CleanupStack::PopAndDestroy(fileName); + + aMessage.Complete(err); + break; + } + case EFileExists: + { + delete iDetector; + iDetector=CTestFileDetector::NewL(aMessage, + Server().FS()); + iDetector->DetectFile(); + break; + } + case ELock: + { + HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + RFile lockFile; + TInt err = lockFile.Open(Server().FS(), *fileName, EFileWrite); + if (err == KErrNone) + iLockedFileHandles.Append(lockFile); + + CleanupStack::PopAndDestroy(fileName); + aMessage.Complete(err); + break; + } + case EUnlock: + { + HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + TInt err = KErrNotFound; + TFileName lockedFileName; + for (TInt i = 0; i < iLockedFileHandles.Count() && err;i++) + { + TInt err2 = iLockedFileHandles[i].FullName(lockedFileName); + User::LeaveIfError(err2); + if (lockedFileName.MatchF(*fileName) != KErrNotFound) + { + iLockedFileHandles[i].Close(); + iLockedFileHandles.Remove(i); + err = KErrNone; + } + } + CleanupStack::PopAndDestroy(fileName); + aMessage.Complete(err); + break; + } + case EFormat: + { + TInt drive = aMessage.Int0(); + TBool formatFatOnly = aMessage.Int1(); + TChar aDriveChar; + User::LeaveIfError(Server().FS().DriveToChar(drive, aDriveChar)); + TBuf<3> bfDrv; + bfDrv.Append(aDriveChar); + bfDrv.Append(KBP); + + RFormat format; + TInt count; + User::LeaveIfError(format.Open(Server().FS(), bfDrv, EHighDensity, count)); + CleanupClosePushL(format); + + if (formatFatOnly) + { + User::LeaveIfError(format.Next(count)); + } + else + { + while (count > 0) + { + User::LeaveIfError(format.Next(count)); + } + } + + CleanupStack::PopAndDestroy(&format); + aMessage.Complete(KErrNone); + break; + } + case EMount: + { + TInt drive = aMessage.Int0(); + User::LeaveIfError(Server().FS().Connect()); + //Mount the drive synchronizely to make sure the drive is ready for the next operation + User::LeaveIfError(Server().FS().MountFileSystem(KFAT, drive, ETrue)); + aMessage.Complete(KErrNone); + break; + } + case EUnMount: + { + TInt drive = aMessage.Int0(); + TFileName fsName; + User::LeaveIfError(Server().FS().FileSystemName(fsName, drive)); + User::LeaveIfError(Server().FS().DismountFileSystem(fsName, drive)); + aMessage.Complete(KErrNone); + break; + } + case ESetReadOnly: + { + HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + TInt setReadOnly = aMessage.Int1(); + TUint setmask; + TUint clearmask; + if (setReadOnly) + { + // Setting read only attribute + setmask = KEntryAttReadOnly; + clearmask = 0; + } + else + { + // Clearing read only attribute + setmask = 0; + clearmask = KEntryAttReadOnly; + } + + // Turn off the read only attributes + TTime time(0); + TInt err = Server().FileMan().Attribs(*fileName, setmask, clearmask, time); + CleanupStack::PopAndDestroy(fileName); + aMessage.Complete(err); + break; + } + case EGetFileHandle: + { + HBufC* fileName = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + RFile file; + CleanupClosePushL(file); + User::LeaveIfError(file.Open(Server().FS(), *fileName, EFileRead | EFileShareReadersOnly)); + User::LeaveIfError(file.TransferToClient(aMessage, 1)); + CleanupStack::PopAndDestroy(2, fileName); // file + break; + } + case EWatchFile: + { + if (iFileWatcher) + { + if (iFileWatcher->IsActive()) + { + aMessage.Complete(KErrServerBusy); + break; + } + else + { + delete iFileWatcher; + iFileWatcher = NULL; + } + } + // Create a new file watcher for this session + iFileWatcher = CFileWatcher::NewL(Server().FS(), aMessage); + break; + } + case EWatchFileCancel: + { + if (iFileWatcher) + { + iFileWatcher->Cancel(); + aMessage.Complete(KErrNone); + } + else + { + // No file watch request to cancel! + aMessage.Complete(KErrNotReady); + } + break; + } + case EGetNumFiles: + { + HBufC* dirPath = CTestUtilSessionCommon::AllocateInputBufferLC(aMessage,0); + CDir* dirContents = NULL; + + User::LeaveIfError(Server().FS().GetDir(*dirPath, KEntryAttNormal, ESortNone, dirContents)); + TPckg numFiles(dirContents->Count()); + + delete dirContents; + aMessage.WriteL(1, numFiles); + aMessage.Complete(KErrNone); + CleanupStack::PopAndDestroy(dirPath); + break; + } + case ESetSecureClock: + { + TTime currentTime(0); + currentTime.UniversalTime(); + TTimeIntervalSeconds increment(aMessage.Int0()); + currentTime += increment; + User::SetUTCTimeSecure(currentTime); + aMessage.Complete(KErrNone); + + } + break; + default: + { + PanicClient(aMessage,EPanicIllegalFunction); + break; + } + } + } + +void CTestUtilSession::ServiceError(const RMessage2& aMessage,TInt aError) + { + if (aError==KErrBadDescriptor) + PanicClient(aMessage,EPanicBadDescriptor); + CSession2::ServiceError(aMessage,aError); + } +// End of file