diff -r 000000000000 -r e4d67989cc36 genericservices/taskscheduler/SCHSVR/SCHTASK.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericservices/taskscheduler/SCHSVR/SCHTASK.CPP Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,275 @@ +// 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 "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 "SCHTASK.H" +#include "taskfile.h" +#include "SCHEXEC.H" +#include + +/** +Returns the index of the slot in the process environment data that contains the +shared file server session (RFs) handle passed from the Task Scheduler. + +@return The index of the shared file server session handle +@see RFile::AdoptFromCreator +*/ +EXPORT_C TInt TScheduledTaskFile::FsHandleIndex() + { + return KTaskFsHandleIndex; + } + +/** +Returns the index of the slot in the process environment data that contains the +shared file (RFile) handle passed from the Task Scheduler. + +@return The index of the shared file handle +@see RFile::AdoptFromCreator +*/ +EXPORT_C TInt TScheduledTaskFile::FileHandleIndex() + { + return KTaskFileHandleIndex; + } + +/** Creates the object from the specified stream. + +@param aStream The stream containing the external representation of this object. +@return A new instance of a CScheduledTask object. */ +EXPORT_C CScheduledTask* CScheduledTask::NewLC(RReadStream& aStream) + { + CScheduledTask* self = new(ELeave) CScheduledTask; + CleanupStack::PushL(self); + self->InternalizeL(aStream); + return self; + } + +CScheduledTask::CScheduledTask() + { + } +/** +@internalComponent +*/ +CScheduledTask::CScheduledTask(TTaskInfo& aInfo, + HBufC* aData, + TScheduleType aScheduleType, + const TSecurityInfo& aSecurityInfo) +: iInfo(aInfo), + iData(aData), + iScheduleType(aScheduleType), + iSecurityInfo(aSecurityInfo) + { + iPLink.iPriority = aInfo.iPriority; + } + +CScheduledTask::~CScheduledTask() + { + delete iData; + } +/** +Remove from queue +@internalComponent only used by server +*/ +void CScheduledTask::Remove() + { + iPLink.Deque(); + } + +/** +queue offset +@internalComponent only used by server +*/ +TInt CScheduledTask::Offset() + { + return (_FOFF(CScheduledTask,iPLink)); + } + + +/** Gets the detailed information for the task. + +@return Detailed information about a task. */ +EXPORT_C const TTaskInfo& CScheduledTask::Info() const + { + return iInfo; + } + +/** Gets a reference to the data to be passed to the program on execution. + +@return A reference to the descriptor containing the data. */ +EXPORT_C const HBufC& CScheduledTask::Data() const + { + return *iData; + } + +/** Gets the time when the task stops being valid. + +If the executing program determines that this time is in the past, then it +should not run the task. + +@return The time when the task stops being valid */ +EXPORT_C const TTsTime& CScheduledTask::ValidUntil() const + { + return iValidUntil; + } + +/** +Gets the schedules type. +*/ +EXPORT_C TScheduleType CScheduledTask::ScheduleType() const + { + return iScheduleType; + } + +/** +Gets the security information for this scheduled task. This information +is the securityID, VenforID and capabilities of the client who created +the schedule responsible for invoking this task. +*/ +EXPORT_C const TSecurityInfo& CScheduledTask::SecurityInfo() const + { + return iSecurityInfo; + } + +/** +Is this task due? +@internalComponent only used by server +*/ +TBool CScheduledTask::Due() const + { + return iDue; + } + +/** +Decrement repeat counter +@internalComponent only used by server +*/ +void CScheduledTask::DecRepeat() + { + iInfo.iRepeat--; + } + +/** +Set due flag. +@internalComponent only used by server +*/ +void CScheduledTask::SetDue(TBool aDue) + { + iDue = aDue; + } + +/** +Mark task as being due. +@param aValidUntil time this task will be valid until. +This information will be passed to the registered executable, +so they may check whether the task should still be executed. +@internalComponent only used by server +*/ +void CScheduledTask::OnDue(const TTsTime& aValidUntil) + { + iValidUntil = aValidUntil; + iDue = ETrue; + } + +/** +Return flag that determines if task is transisent or persistent. +@internalComponent only used by server +*/ +TBool CScheduledTask::Persists() const + {return iPersists;} + +/** +Mark task as belonging to a persistent schedule. +@internalComponent only used by server +*/ +void CScheduledTask::SetPersists() + {iPersists = ETrue;} + +/** +externalize data to stream. +@internalComponent only used by server +*/ +void CScheduledTask::ExternalizeL(RWriteStream& aStream) const + { + aStream << *iData; + aStream << iValidUntil; + aStream << iInfo; + aStream.WriteInt32L(iScheduleId); + aStream.WriteInt32L(iScheduleType); + aStream << iSecurityInfo; + aStream.WriteInt32L(iPersists); + } + +void CScheduledTask::InternalizeL(RReadStream& aStream) + { + iData = HBufC::NewL(aStream, KMaxTInt); + aStream >> iValidUntil; + aStream >> iInfo; + iScheduleId = aStream.ReadInt32L(); + iScheduleType = static_cast(aStream.ReadInt32L()); + aStream >> iSecurityInfo; + iPersists = aStream.ReadInt32L();; + } + +/** +Gets the schedulesID +@internalComponent only used by server +*/ +TInt CScheduledTask::ScheduleId() const + { + return iScheduleId; + } + +/** +Sets the schedules ID +@internalComponent only used by server +*/ +void CScheduledTask::SetScheduleId(TInt aScheduleId) + { + iScheduleId = aScheduleId; + } + + +// Streaming operators for TSecurityInfo +RWriteStream& operator<<(RWriteStream& aWriteStream, + const TSecurityInfo& aSecurityInfo) + { + //write security policy + aWriteStream.WriteUint32L(aSecurityInfo.iSecureId); + aWriteStream.WriteUint32L(aSecurityInfo.iVendorId); + // write capabilities by looping through all available + for (TUint jj = 0; jj < ECapability_Limit; ++jj) + if(aSecurityInfo.iCaps.HasCapability((TCapability)jj)) + aWriteStream.WriteUint8L(jj); + aWriteStream.WriteUint8L(ECapability_HardLimit); // terminate capabilities with hard limit + return aWriteStream; + } + +RReadStream& operator>>(RReadStream& aReadStream, + TSecurityInfo& aSecurityInfo) + { + + aSecurityInfo.iSecureId = aReadStream.ReadUint32L(); + aSecurityInfo.iVendorId = aReadStream.ReadUint32L(); + aSecurityInfo.iCaps.SetEmpty(); + TCapability cap = ECapability_None; + aSecurityInfo.iCaps.AddCapability(cap); + while (cap != ECapability_HardLimit ) + { + aSecurityInfo.iCaps.AddCapability(cap); + cap = (TCapability)aReadStream.ReadUint8L(); + } + return aReadStream; + } + + +