diff -r 000000000000 -r 2e3d3ce01487 commonappservices/alarmserver/Server/Include/ASSrvSession.h --- /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 +#include + +// 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& 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 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