diff -r 000000000000 -r 72b543305e3a mmsengine/mmswatcher/inc/mmswatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsengine/mmswatcher/inc/mmswatcher.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,284 @@ +/* +* Copyright (c) 2002, 2003 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: +* Mms Notification dispatcher +* +*/ + + + +#ifndef MMSWATCHER_H +#define MMSWATCHER_H + +// INCLUDES +#include +#include + +#include "mmscenrepobserver.h" + +// CONSTANTS + +// MACROS + +// DATA TYPES + +enum TMmsWatcherStates + { + EInvalid = 0, + EStartup, + EMessageVariation, + EGarbageCollection, + EScheduling, + EWaiting, + }; + +// FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS +class CWatcherLog; +class CEnvironmentChangeNotifier; +#ifdef __WINS__ +class CMmsPollingTimer; +#endif + +// CLASS DECLARATION + +// Small class for push entry +class CMmsPushEntry :public CBase + { + public: // Constructors and destructor + + CMmsPushEntry(); + virtual ~CMmsPushEntry(); + + public: + HBufC8* iData; + TInt iStatus; + CMsvOperation* iOperation; + }; + +/** +* Mms Watcher performs all tasks that require waiting for some events +* @lib mmswatcher.lib +* @since 1.0 +*/ +class CMmsWatcher : + public CActive, + public MMsvSessionObserver, + public MMmsCenRepNotifyHandler + { + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aFs file system handle + * @param aLog watcher logger class reference (not used) + */ + static CMmsWatcher* NewL(TAny* aWatcherParams); + + /** + * Destructor. + */ + virtual ~CMmsWatcher(); + + public: // New functions + + public: // Functions from base classes + + /** + * From MMmsCenRepNotifyHandler + * HandleCenRepNotificationL is a callback function which is called when + * a CenRepObserver receives an event. + * There can be several observers running and they all call this callback + * when they need to. + * @param aRepositoryUid identifies the repository where the key under + * observation is located. + * @param aKey identifies the particular key under observation. + * @param aValue specifies the new changed value of the key. + */ + void HandleCenRepNotificationL( + const TUid aRepositoryUid, + const TInt32 aKey, + const TInt aValue ); + + /** + * From MMsvSessionObserver needed to open message server session + * NOTE that CMmsPollingTimer uses this same callback. + * @param aEvent event code from message server, + * rest of parameters depend on event. See Symbian documentation. + */ + void HandleSessionEventL(TMsvSessionEvent aEvent, TAny*, TAny*, TAny*); + + protected: // New functions + + protected: // Functions from base classes + + private: + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(); + + /** + * constructor. + * @param apriority actrive object priority. + * @param aLog watcher logger class reference (not used). + */ + CMmsWatcher(TInt aPriority, CWatcherLog& aLog); + + /** + * Perform one operation in state machine + */ + void DoRunL(); + + /** + * From CActive: Active object completion + */ + void RunL(); + + /** + * From CActive: Cancel current operation. + */ + void DoCancel(); + + /** + * remove first entry from queuedMessages array + */ + void Dequeue(); + + /** + * remove handled entry + */ + void RemoveSent(); + + /** + * Send next waiting entry to Server mtm + */ + void HandleNextInQueueL(); + + /** + * create notification + * @param aUrl address of the message (path & filename) + * @param aSize size of the message (file) + * @return pointer to buffer containing the encoded notification + */ + HBufC8* CreateNotificationL(TDesC8& aUrl, TInt aSize); + + /** + * Initialization including garbage collection + */ + void StartupL(); + + /** + * Garbage collection + */ + void GarbageCollectionL(); + + /** + * Operator message variation + */ + void MessageVariationL(); + + /** + * Create an entry into MMS folder + * @param aFolder folder id + * @return id of created entry. KMsvNullIndexEntryId if cannot be created + */ + TMsvId CreateEntryL( TMsvId aFolder ); + + /** + * Open msv server session + * Either the first time, or because it has been closed + */ + void OpenSessionL(); + + /** + * Environment change functionS + */ + static TInt EnvironmentChanged(TAny* aThis); + void HandleEnvironmentChange(); + + /** + * GetMessagingEntriesL reads service entryId and NotificationFolderId + * from MmsSettings. If values are null, they are created. + */ + void GetMessagingEntriesL( const TBool aMessageStoreHasChanged = EFalse ); + +#ifdef __WINS__ + /** + * LocalModeL reads the localmode status from settings + */ + TBool LocalModeL(); + + /** + * ReadLocalModeDirectoriesL is only for emulator use + */ + void ReadLocalModeConfigData(); +#endif + + public: // Data + + protected: // Data + + private: // Data + TMsvId iService; + TMsvId iNotificationFolder; + TInt iState; + CWatcherLog& iLog; + TInt iLastError; + CMsvSession* iSession; + CArrayPtrFlat* iQueuedMessages; + CMsvOperation* iOperation; + RTimer iTimer; + RFs iFs; + TInt iMessageDrive; // default is C: + // Collection of event flags telling which event has triggered garbage + // collection. More than one event may be specified at the same time. + TUint32 iEvents; + // Copy of the events, must be saved in case MMS Server MTM is unreachable + TUint32 iOldEvents; + // The moment when media became unavailable + TTime iMediaUnavailableTime; + // To keep track of MessageStore availability + // (based on mediaAvailable/unavailable events) + TBool iMediaAvailable; + // Observer to watch environment time changes + CEnvironmentChangeNotifier* iNotifier; + // Observer of offline mode changes + CMmsCenRepObserver* iOfflineObserver; + // encapsulation version + TInt16 iMmsVersion; +#ifdef __WINS__ + // MMS Watcher might be used for polling localmode directory + // (emulator only) + TInt iPollingInterval; + CMmsPollingTimer* iPollingTimer; + // Specifies the folder from where incoming mms messages are looked for + // Local mode works automatically in emulator only + TFileName iLocalModeIn; +#endif + + public: // Friend classes + protected: // Friend classes + private: // Friend classes + + }; + +// panic function +GLREF_C void gPanic( TMmsPanic aPanic ); + +#endif // MMSWATCHER_H + +// End of File