--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/scheduledsendmtm/schedulesendexe/inc/SchSendExe.h Wed Nov 03 22:41:46 2010 +0530
@@ -0,0 +1,211 @@
+// Copyright (c) 2001-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:
+//
+
+
+#ifndef SCHSENDEXE_H_
+#define SCHSENDEXE_H_
+
+#ifdef _DEBUG
+#undef _MSG_NO_LOGGING
+#endif
+
+
+#include <msvschedulesend.h> //for SCHSENDLOG and KSchSendLogDir
+
+#ifdef _DEBUG
+//#define _SCHSENDEXE_TEST //undefine when submitting code
+#endif
+
+#ifdef _SCHSENDEXE_TEST
+#pragma message("WARNING: Test code enabled")
+const TInt KMsvSendExeOneMinute = 1000000 * 60 / 30;
+#else
+const TInt KMsvSendExeOneMinute = 1000000 * 60;
+#endif
+
+const TInt KSendExeActiveTimeout = KMsvSendExeOneMinute / 12; // 10 secs
+const TInt KSchSendExeMinReschedule = KMsvSendExeOneMinute * 1; // 1 mins
+const TInt KSchSendExeMaxReschedule = KMsvSendExeOneMinute * 3; // 4 mins
+const TInt KDefaultPriority = CActive::EPriorityStandard;
+const TInt KMsvSendExeGrowth = 5;
+
+class CScheduledTask;
+
+//
+//
+// Local Function Declarations
+//
+//
+
+enum TSchSendExePanic
+ {
+ EMultipleMtms,
+ ENoMessagesInSelection,
+ ENoSendCommand,
+ EOperationCompletedTooSoon,
+ ETooManyOperationsCompleted,
+ EObjectNotNull
+ };
+
+void gPanic(TSchSendExePanic aPanic);
+void gPanic(TInt aPanic);
+
+TInt Execute(const TDesC& aFileName, RFile& aFile );
+void DoExecuteL(const TDesC& aFileName, RFile& aFile );
+
+class CMsvSendExeActive;
+
+
+/**
+
+The CProgressTimer class
+Calls iOperation.ProgressL() every iPollInterval microseconds.
+Used by CMsvSendExeActive.
+
+*/
+class CProgressTimer : public CTimer
+ {
+public:
+ static CProgressTimer* NewL(CMsvOperation& aOperation, const TTimeIntervalMicroSeconds32& aPollInterval);
+ void Start();
+ ~CProgressTimer();
+
+private:
+ CProgressTimer(CMsvOperation& aOperation, const TTimeIntervalMicroSeconds32& aPollInterval);
+ void RunL();
+ CMsvOperation& iOperation;
+ TTimeIntervalMicroSeconds32 iPollInterval;
+ };
+
+
+
+/**
+
+The CMsvSendExe class
+Reads the task file and starts the corresponding messaging operations.
+
+*/
+class CMsvSendExe : public MMsvSessionObserver, CActive
+ {
+public:
+
+ static CMsvSendExe* StartLC(const TDesC& aFileName, RFile& aFile );
+
+ ~CMsvSendExe();
+
+ void HandleSessionEventL(MMsvSessionObserver::TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) {};
+ TBool IsSendActive(); // {return IsActive();}
+ void OperationComplete(const CMsvSendExeActive& aActive, TInt aError);
+
+#ifndef _MSG_NO_LOGGING
+ static void FLog(const TDesC& aFileName, TRefByValue<const TDesC16> aFmt, ...);
+#endif
+
+private:
+
+ CMsvSendExe(const TDesC& aFileName, RFile& aFile );
+
+ void ConstructL();
+
+ void DoCancel();
+ void RunL();
+
+ void ProcessFileL();
+ void CallMtmL();
+
+ void RetrievePackagesL();
+ void AddPackageL(const CScheduledTask& aTask);
+
+ void RetrieveMessagesL();
+
+ void AddTaskL(const TMsvSchedulePackage& aPackage);
+ void AddTaskL(const TMsvSchedulePackage& aPackage, const TUid& aMtm);
+
+ void RescheduleOnError(const CMsvSendExeActive& aActive, TInt aError);
+ void RescheduleOnError(const CMsvEntrySelection& aSelection, const TMsvSchedulePackage& aPackage, TInt aError);
+ void RescheduleAllL(TInt aError);
+ void CompleteReschedule(RScheduler& aScheduler, const TSchedulerItemRef& aRef, TInt aCount);
+
+ void DoResheduleOnErrorL(RScheduler& aScheduler, const CMsvEntrySelection& aSelection, const TMsvSchedulePackage& aPackage, TInt aError, TSchedulerItemRef& aRef, TInt& aCount, TTime& aStartTime);
+ void FailOnError(const CMsvEntrySelection& aActive, TInt aError);
+ void RestoreScheduleSettingsL(TMsvId aServiceId, const TUid& aMtm, CMsvScheduleSettings& aSettings);
+ TBool FindorCreateScheduleL(RScheduler& aScheduler, TTime& aStartTime, const CMsvScheduleSettings& aSettings, TSchedulerItemRef& aRef);
+ void UpdateEntryL(CMsvEntry& aMsvEntry, TMsvEntry& aEntry, const TSchedulerItemRef& aRef, const TTaskInfo& aInfo, const TTime& aStartTime);
+
+ CMsvSession* iSession;
+ const TDesC& iFileName;
+
+ RFile& iTaskFile;
+
+ TTime iCreated;
+ RPointerArray<CMsvSendExeActive> iOperations;
+ RArray<TMsvSchedulePackage> iPackages;
+ CActiveSchedulerWait iActiveSchedulerWait;
+
+#ifdef _DEBUG
+ TInt iOperationsComplete;
+#endif
+ };
+
+class CMsvSendExeActive : public CActive
+ {
+ public:
+ static CMsvSendExeActive* NewLC(CMsvSession& aSession, CMsvSendExe& aParent, const TMsvSchedulePackage& aPackage, const TUid& aMtm, TInt aPriority = EPriorityStandard);
+ ~CMsvSendExeActive();
+ void StartL();
+ void AppendL(TMsvId aId);
+ inline TInt MsgCount() const;
+ inline const TMsvSchedulePackage& Package() const;
+ inline const TUid& Mtm() const;
+ inline const CMsvEntrySelection& Selection() const;
+
+ private:
+ CMsvSendExeActive(CMsvSession& aSession, CMsvSendExe& aParent, const TMsvSchedulePackage& aPackage, const TUid& aMtm, TInt aPriority);
+ void ConstructL();
+ void RunL();
+ void DoCancel();
+
+ private:
+
+ CMsvSession& iSession;
+ CMsvSendExe& iParent;
+ CProgressTimer* iTimer;
+ CMsvOperation* iOperation;
+ CMsvEntrySelection* iSelection;
+ TMsvSchedulePackage iPackage;
+ TUid iMtm;
+ };
+
+inline TInt CMsvSendExeActive::MsgCount() const
+ {
+ return iSelection->Count();
+ }
+
+inline const CMsvEntrySelection& CMsvSendExeActive::Selection() const
+ {
+ return *iSelection;
+ }
+
+inline const TMsvSchedulePackage& CMsvSendExeActive::Package() const
+ {
+ return iPackage;
+ }
+
+inline const TUid& CMsvSendExeActive::Mtm() const
+ {
+ return iMtm;
+ }
+
+#endif