--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmserver/Server/Include/ASSrvSession.h Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,311 @@
+// Copyright (c) 1999-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 __ASSRVSESSION_H__
+#define __ASSRVSESSION_H__
+
+// System includes
+#include <e32base.h>
+#include <babitflags.h>
+
+// User includes
+#include "ASSrvAlarm.h"
+#include "ASSrvAnyEventObserver.h"
+#include "ASSrvSessionCollection.h"
+#include "ASSrvAlarmQueueObserver.h"
+
+// Constants
+const TInt KAlarmServerMaxNumberOfChangeEventsToBuffer = 10;
+
+// Classes referenced
+class CASSrvServerWideData;
+class CASSrvSessionEngine;
+
+// Enumerations
+
+
+//
+// ----> CASSrvSession (header)
+//
+/**
+ * This class acts as a simple wrapper around the IPC client-server framework,
+ * and drives a real underlying engine, which is actually responsible for all the
+ * server-wide object manipulation. This allows the server functionality to be
+ * tested in isolation from the client API, providing better test coverage.
+ */
+class CASSrvSession : public CSession2, public MASSrvAnyEventObserver, public MASSrvSession
+ {
+//
+public: // STATIC CONSTRUCT / DESTRUCT
+//
+ static CASSrvSession* NewL(CASSrvServerWideData& aServerWideData);
+ ~CASSrvSession();
+
+//
+private: // INTERNAL CONSTRUCT
+//
+ CASSrvSession(CASSrvServerWideData& aServerWideData);
+ void ConstructL();
+
+//
+public: // CALLED FROM CASSrvServer dtor
+//
+
+ void HandleServerDestruction();
+
+//
+private: // FROM MASSrvAnyEventObserver
+//
+
+ void MASSrvAnyEventHandleChange(TAlarmChangeEvent aEvent, TAlarmId aAlarmId);
+
+//
+public: // FROM MASSrvSession
+//
+
+ TASSrvSessionId MASSrvSessionId() const;
+
+ void MASSrvSessionFullName(TDes& aDes) const;
+
+//
+private: // FROM CSession2
+//
+ void ServiceL(const RMessage2& aMessage);
+
+//
+private: // INTERNAL
+//
+ TBool DoServiceL();
+
+//
+private: // CMD - ALARM SPECIFIC FUNCTIONALITY
+//
+ TBool CmdAlarmAddL();
+ TBool CmdAlarmAddWithNotificationL();
+ TBool CmdAlarmNotificationCancelAndDeQueueL();
+ TBool CmdGetAlarmDetailsL();
+ TBool CmdAlarmDeleteL();
+ TBool CmdGetAlarmCategoryL();
+ TBool CmdGetAlarmOwnerL();
+ TBool CmdSetAlarmStatusL();
+ TBool CmdSetAlarmStatusForCalendarFileL();
+ TBool CmdGetAlarmStatusL();
+ TBool CmdSetAlarmDayOrTimedL();
+ TBool CmdGetAlarmDayOrTimedL();
+ TBool CmdGetAlarmCharacteristicsL();
+ TBool CmdSetAlarmCharacteristicsL();
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+ TBool CmdSetWakeupL();
+#endif
+#ifdef SYMBIAN_ALARM_REPEAT_EXTENSIONS
+ TBool CmdGetAlarmDaysL();
+ TBool CmdSetAlarmDaysL();
+ TBool CmdSetContinuousL();
+ TBool CmdContinuousL();
+#endif
+ TBool CmdSetClientDataL();
+ TBool CmdOrphanAlarmL();
+
+
+//
+private: // CMD - ALARM DATA FUNCTIONALITY
+//
+ TBool CmdAlarmDataAttachL();
+ TBool CmdAlarmDataDetachL();
+ TBool CmdAlarmDataSizeL();
+ TBool CmdGetAlarmDataL();
+
+//
+private: // CMD - CATEGORY-SPECIFIC FUNCTIONALITY
+//
+ TBool CmdSetAlarmStatusByCategoryL();
+ TBool CmdGetAlarmCountForCategoryL();
+ TBool CmdAlarmDeleteAllByCategoryL();
+ TBool CmdAlarmDeleteByCalendarFileL();
+ TBool CmdAlarmDeleteByCategoryL();
+ TBool CmdGetAvailableCategoryListL();
+ TBool CmdGetAlarmIdListForCategoryL();
+
+//
+private: // CMD - MISC FUNCTIONALITY
+//
+ TBool CmdAlarmCountByStateL();
+ TBool CmdGetAlarmIdListByStateL();
+ TBool CmdGetAlarmIdListL();
+ TBool CmdGetNextDueAlarmIdL();
+ TBool CmdNumberOfActiveAlarmsInQueueL();
+
+//
+private: // CMD - SOUND CONTROL
+//
+ TBool CmdSetAlarmSoundStateL();
+ TBool CmdGetAlarmSoundStateL();
+ TBool CmdSetAlarmSoundsSilentUntilL();
+ TBool CmdSetAlarmSoundsSilentForL();
+ TBool CmdGetAlarmSoundsSilentUntilL();
+ TBool CmdCancelAlarmSilenceL();
+ TBool CmdGetAlarmSoundsTemporarilySilencedL();
+ TBool CmdSetAlarmPlayIntervalsL();
+ TBool CmdGetAlarmPlayIntervalsL();
+
+//
+private: // CMD - CHANGE NOTIFICATION
+//
+ TBool CmdNotifyChangeL();
+ TBool CmdNotifyChangeCancelL();
+
+//
+private: // CMD - DEBUG ONLY
+//
+ TBool CmdDbgShutDownServerL();
+ TBool CmdDbgFailAllocL();
+ TBool CmdDbgPreventUserNotifyL();
+ TBool CmdDbgSnoozeAlarmL();
+ TBool CmdDbgSetEnvChgHandling();
+
+//
+private: // CMD - FROM MASShdAlarmInfoProvider
+//
+ TBool CmdInfoAlarmCountL();
+ TBool CmdInfoAlarmByIndexL();
+
+//
+private: // CMD - MISC
+//
+ TBool CmdFetchTransferBufferL();
+
+//
+private: // MISCELLANEOUS
+//
+
+ void RequestExpiryNotificationL(TASSrvAlarm& aAlarm);
+ void AlarmDataAttachL(TASSrvAlarm& aAlarm);
+
+
+//
+private: // INTERNAL FLAGS
+//
+
+ /**
+ * Flags for this session
+ */
+ enum TAlarmSessionFlags
+ {
+ /**
+ * Indicates that the client has an outstanding notification request
+ */
+ EAlarmSessionFlagsNotifyPending = 0
+ };
+
+//
+private: // INTERNAL METHODS
+//
+
+ /**
+ * Access the server wide data
+ */
+ inline CASSrvServerWideData& ServerData() const { return iServerWideData; }
+
+ /**
+ * Access the transfer buffer
+ */
+ inline CBufBase& TransferBuffer() const { return *iTransferBuffer; }
+
+ void StreamAlarmIdsToTransferBufferL(RArray<TAlarmId>& aArray);
+
+ void CompleteChangeNotificationMessage(TInt aCompletionCode, TAlarmId aAlarmId);
+
+ inline const RMessage2& Message() const { return *iMessage; }
+
+ void ConvertFromUtcToLocal(TASShdAlarm& aAlarm) const;
+ void ConvertFromLocalToUtc(TASShdAlarm& aAlarm) const;
+
+//
+private: // INTERNAL CLASSES
+//
+
+ //
+ // ----> TASSrvBufferredEvent (header)
+ //
+ /**
+ * A collection class which associates an Alarm Id with a specific event.
+ * This class is used to group notification events.
+ */
+ class TASSrvBufferredEvent
+ {
+ //
+ public: // CONSTRUCT
+ //
+ inline TASSrvBufferredEvent(TInt aCode, TAlarmId aId) : iCode(aCode), iAlarmId(aId) { }
+
+ //
+ public: // ACCESS
+ //
+ inline TInt Code() const { return iCode; }
+ inline TAlarmId AlarmId() const { return iAlarmId; }
+
+ //
+ private: // MEMBER DATA
+ //
+ TInt iCode;
+ TAlarmId iAlarmId;
+ };
+
+//
+private: // MEMBER DATA
+//
+
+ /**
+ * The server wide data handle
+ */
+ CASSrvServerWideData& iServerWideData;
+
+ /**
+ * General flags used by this class
+ */
+ TBitFlags iFlags;
+
+ /**
+ * For outstanding change notification events. This is NOT used for
+ * specific alarm expiry notifications.
+ */
+ RMessage2 iAlarmQueueChangeNotificationMessage;
+
+ /**
+ * A change event buffer - so that clients don't miss events.
+ */
+ RArray<TASSrvBufferredEvent> iChangeEventBuffer;
+
+ /**
+ * A temporary heap-based alarm object, which is written to by the client-side
+ * when data needs to be passed from client to server (or vice-versa). Saves
+ * creating lots of temporary TASSrvAlarm objects on the stack.
+ */
+ TASSrvAlarm iAlarmSink;
+
+ /**
+ * Used to transfer collections of objects between server and client.
+ */
+ CBufBase* iTransferBuffer;
+
+ /**
+ * Manipulates the actual alarm server objects
+ */
+ CASSrvSessionEngine* iSessionEngine;
+
+ const RMessage2* iMessage;
+ };
+
+#endif