messagingappbase/msgerrorwatcher/inc/MsgErrorWatcher.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgerrorwatcher/inc/MsgErrorWatcher.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,458 @@
+/*
+* Copyright (c) 2002 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:  
+*     CMsgErrorWatcher declaration file
+*
+*/
+
+
+
+#ifndef MSGERRORWATCHER_H
+#define MSGERRORWATCHER_H
+
+// INCLUDES
+#include <f32file.h>
+#include <msvstd.h>
+#include <msvapi.h>
+#include <systemwarninglevels.hrh>    // Critical level
+#include <mmsconst.h>          // KMmsDiskSafetyMargin
+
+#include "MsgErrorWatcher.hrh"
+
+const TUint KCriticalDiskLevel = KDRIVECCRITICALTHRESHOLD;
+const TUint KCriticalLevel = KCriticalDiskLevel + KMmsDiskSafetyMargin;
+const TUint32 KDefaultTriggerLevel = 300 * 1024; // 100 kilobytes
+const TUint KTriggerMargin = 20 * 1024; // 20 kilobytes
+
+// FUNCTION PROTOTYPES
+GLREF_C void Panic( TInt aPanic ); 
+
+// FORWARD DECLARATIONS
+class CWatcherLog;
+class CMmsClientMtm;
+class CClientMtmRegistry;
+class CStringResourceReader;
+class CMsgSentItemsObserver;
+class CMsgErrorCommDbObserver;
+class CMsgErrorConnectionObserver;
+class CMsgErrorDiskSpaceObserver;
+class CMsgErrorSmsDiskSpaceObserver;
+class CMsgErrorExtSmsDiskSpaceObserver;
+class CMsgErrorRoamingObserver;
+class CMsgErrorStartupObserver;
+class CMsgErrorGlobalQuery;
+class CMsgErrorDisconnectDlg;
+class CMsgCenRepObserver;
+class CMsgLogsObserver;
+class CMsgGarbageCollection;
+
+// CLASS DECLARATION
+
+/**
+* CMsgErrorWatcher
+*
+* @lib msgerrorwatcher.dll
+* @since 2.0
+*/
+class CMsgErrorWatcher :
+    public CActive,
+    public MMsvSessionObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * The parameters must be exactly these. Defined by
+        * Symbian watcher framework
+        *
+        * @param aFs A reference to file session
+        * @param aLog A reference to watcher log
+        */
+        static CMsgErrorWatcher* NewL( TAny* aWatcherParams );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CMsgErrorWatcher();
+
+    public: // New functions
+
+        /**
+        * Callback function for roaming observer.
+        *
+        * @param aRoaming ETrue if roaming, EFalse otherwise
+        */
+        void HandleRoamingEventL( TBool aRoaming );
+
+        /**
+        * Callback function for CommDB observer.
+        */
+        void HandleCommDbEventL();
+
+        /**
+        * Callback function for connection observer.
+        */
+        void HandleConnectionEvent();
+
+        /**
+        * Callback function for disk space observer.
+        */
+        void HandleDiskSpaceEventL();
+        void HandleDiskSpaceEvent2L();
+        /**
+        * Callback function for global query observer.
+        */
+        void HandleGlobalQueryEventL( TInt aQueryId, TInt aStatus );
+
+        /**
+        * Callback function for startup state observer (currently
+        * sent items observer).
+        */
+        void HandleStartupReadyL();
+        
+        /**
+        * HandleCenRepNotificationL
+        * Handles events from central repository observer
+        */
+        void HandleCenRepNotificationL();
+        
+        /*
+        * Hadles events from logs observer
+        */
+        void ShowDeliveredNoteL( const TDesC& aRemoteParty );
+        
+        /*
+        * Hadles events from logs observer
+        */
+        void ShowReadNoteL( const TDesC& aRemoteParty );
+        
+        /*
+        * Showns read or delivered note
+        */
+        void ShowReadOrDeliveredNoteL( const TDesC& aRemoteParty, TInt aResourceId );
+        
+        
+    public: // Functions from base classes
+
+        /**
+        * From MMsvSessionObserver
+        */
+        void HandleSessionEventL(
+            TMsvSessionEvent aEvent,
+            TAny* aArg1,
+            TAny* aArg2,
+            TAny* aArg3 );
+
+    protected: // Functions from base classes
+
+        /**
+        * From CActive
+        */
+        void RunL();
+
+        /**
+        * From CActive
+        */
+        void DoCancel();
+
+    private:
+
+        /**
+        * By default Symbian OS constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Private C++ constructor.
+        *
+        * @param aFs A reference to file session
+        */
+        CMsgErrorWatcher( RFs& aFs );
+
+        /**
+        * Start watcher.
+        */
+        void StartWatcherL();
+
+        /**
+        * Stop watcher.
+        */
+        void StopWatcher();
+
+        /**
+        * Start restart timer. Timer is used when trying to reconnect
+        * to message server after watcher has been stopped due
+        * to certain message server events.
+        */
+        void StartRestartTimer();
+
+        /**
+        * Initialise iErrorMessages array
+        */
+        void InitMessageArraysL();
+
+        /**
+        * Kills all observers and resets counters.
+        */
+        void ResetWatcher();
+
+        /**
+        * Checks whether MMS Service is already found. If not
+        * gets a pointer to MMS service from MsgStore and if
+        * found updates the context of MmsClientMtm.
+        *
+        * @return ETrue if MMS service was found, EFalse otherwise
+        */
+        TBool GetMmsServiceL();
+
+        /**
+        * Initiates MMS fetch by sending a request to MMS engine.
+        */
+        void StartMmsFetchL();
+
+        /**
+        * Initiates MMS send by sending a request to MMS engine.
+        */
+        void StartMmsSendL();
+
+        /**
+        * Checks whether MMS receiving mode is "Enabled in home network"
+        * and "On". If so, activates roaming observer.
+        */
+        void CheckMmsReceivingModeL();
+
+        /**
+        * A wrapper for CMmsClient::ValidateService().
+        *
+        * @return ETrue if service is valid, EFalse otherwise.
+        */
+        TBool ValidateMmsServiceL();
+
+        /**
+        * Shows a global query when message sending, (manual)
+        * retrieving or forwarding has failed.
+        */
+        void ShowErrorMessageQueryL();
+
+        /**
+        * Shows a global note
+        *
+        * @param aNoteId The identifier of the note
+        */
+        void ShowGlobalNoteL( TMsgErrorNoteIds aNoteId );
+
+        /**
+        * Cancels all global notes
+        */
+        void CancelNotesL();
+
+        /**
+        * Finds the next message entry for which to
+        * to show an error message.
+        * @param aEntry OUT  The possibly found message entry
+        * @return Standard Symbian error code.
+        *         KErrNone if message was found.
+        */
+        TInt GetNextErrorMsg( TMsvEntry& aEntry );
+
+        /**
+        * Resolves the first text for
+        * send/(manual)retrieve/forward failure
+        * @param aEntry IN   Valid message entry
+        */
+        void ResolveErrorTextL( TMsvEntry& aEntry );
+
+        /**
+        * Resolves the possible details text
+        * for send/(manual)retrieve/forward failure
+        * @param aEntry IN   Valid message entry
+        */
+        void ResolveErrorDetailsL( TMsvEntry& aEntry );
+
+        /**
+        * Called when MMS reception fails due to insufficient
+        * disk space.
+        *
+        * @param aEntry The failed entry
+        */
+        void HandleDiskSpaceErrorL( TMsvEntry& aEntry );
+
+        /**
+        * Called when MMS reception fails due to insufficient
+        * memory.
+        *
+        * @param aEntry The failed entry
+        */
+        void HandleMemoryErrorL( TMsvEntry& aEntry );
+
+        /**
+        * Called when MMS reception fails because there is
+        * another data connection open.
+        *
+        * @param aEntry The failed entry
+        * @param aReceive, ETrue for incoming messages, EFalse for outgoing
+        */
+        void HandleConnectionErrorL( TMsvEntry& aEntry, TBool aReceive );
+
+        /**
+        * Called when MMS reception fails because there is no
+        * access point defined.
+        *
+        * @param aEntry The failed entry
+        */
+        void HandleNoAPErrorL( TMsvEntry& aEntry );
+
+        /**
+        * Called when MMS reception fails because the current
+        * access point is invalid.
+        *
+        * @param aEntry The failed entry
+        */
+        void HandleInvalidAPErrorL( TMsvEntry& aEntry, TBool aStartObserver );
+
+        /**
+        * Subfunction of HandleSessionEventL
+        * Handles root events from MsgServer observer
+        *
+        * @param aEvent     Message server event
+        * @param aEntries   Affected entries
+        */
+        void HandleRootEventL(
+            TMsvSessionEvent aEvent,
+            CMsvEntrySelection* aEntries );
+
+        /**
+        * Subfunction of HandleSessionEventL
+        * Handles local service events from MsgServer observer
+        *
+        * @param aEvent     Message server event
+        * @param aEntries   Affected entries
+        */
+        void HandleLocalServiceEventL(
+            TMsvSessionEvent aEvent,
+            CMsvEntrySelection* aEntries );
+
+        /**
+        * Subfunction of HandleSessionEventL
+        * Handles inbox events from MsgServer observer
+        *
+        * @param aEvent     Message server event
+        * @param aEntries   Affected entries
+        */
+        void HandleInboxEventL(
+            TMsvSessionEvent aEvent,
+            CMsvEntrySelection* aEntries );
+
+        /**
+        * Subfunction of HandleSessionEventL
+        * Handles outbox events from MsgServer observer
+        *
+        * @param aEvent     Message server event
+        * @param aEntries   Affected entries
+        */
+        void HandleOutboxEventL(
+            TMsvSessionEvent aEvent,
+            CMsvEntrySelection* aEntries );
+
+        /**
+        * Subfunction of HandleSessionEventL
+        * Handles MMS service events from MsgServer observer
+        *
+        * @param aEvent     Message server event
+        * @param aEntries   Affected entries
+        */
+        void HandleMmsServiceEventL(
+            TMsvSessionEvent aEvent,
+            CMsvEntrySelection* aEntries );
+
+
+        /**
+        * Resets TMsvEntry::iError of an entry saved in iCurrentEntry
+        */
+        void ResetErrorFieldL( );
+        
+        /**
+        * Resets TMsvEntry::iError of an entry given as parameter
+        */
+        void ResetErrorFieldL( TMsvEntry& aEntry );
+         
+    private:    // Data
+
+        enum TMsgErrorWatcherFlags
+            {
+            EStartupReady               = 0x0001,
+            EWatcherRunning             = 0x0002,
+            ENoAPErrorPending           = 0x0004,
+            EShowRoamingNote            = 0x0008,
+            ERoamingNoteShown           = 0x0010,
+            EReceivingDisconnectDelay   = 0x0020
+            };
+
+        enum TMsgRequestTypes
+            {
+            EMsgRequestNone = 0,
+            EMsgRequestStartingUp,
+            EMsgRequestFetching,
+            EMsgRequestFetchingAll,
+            EMsgRequestSending,
+            EMsgRequestWaitingErrorNote,
+            EMsgRequestWaitingDisconnection
+            };
+
+
+        TMsvId iMmsServiceId;
+        TMsvId iNotificationFolderId;
+        CMsvSession* iSession;
+        CMsvOperation* iOperation;
+        CClientMtmRegistry* iClientMtmRegistry;
+        CMmsClientMtm* iMmsClient;
+        CMsvEntrySelection* iMmsReceiveErrorMessages;
+        CMsvEntrySelection* iMmsSendErrorMessages;
+        CMsvEntrySelection* iErrorMessages;
+        CArrayFixFlat<TInt>* iNoteIds;
+        CStringResourceReader* iResourceReader;
+        TMsvId iCurrentEntryId;
+
+        CMsgSentItemsObserver* iSentItemsObserver;
+        CMsgErrorCommDbObserver* iCommDbObserver;
+        CMsgErrorConnectionObserver* iConnectionObserver;
+        CMsgErrorDiskSpaceObserver* iDiskSpaceObserver;
+        CMsgErrorSmsDiskSpaceObserver* iSmsDiskSpaceObserver;
+        CMsgErrorExtSmsDiskSpaceObserver* iSmsExtDiskSpaceObserver;
+        CMsgErrorRoamingObserver* iRoamingObserver;
+        CMsgErrorStartupObserver* iStartupObserver;
+        CMsgErrorDisconnectDlg* iDisconnectDlg;
+        CMsgCenRepObserver* iCenRepObserver;
+        CMsgLogsObserver* iLogsObserver;
+        CMsgGarbageCollection* iGarbageCollection;
+
+        HBufC* iErrorMsgText;
+        HBufC* iErrorMsgDetails;
+        CMsgErrorGlobalQuery* iErrorQuery;
+        CMsgErrorGlobalQuery* iDisconnectQuery;
+        CMsvEntrySelection* iErrorMsgNotes;
+
+        RFs& iFs;
+        RTimer iTimer;
+
+        TMsgRequestTypes iRequestType;
+        TUint iWatcherFlags;
+        TUint32 iMaxReceiveSize;
+        TUint iDiskSpaceErrors;
+        TUint iTimerRetries;
+    };
+
+#endif      // MSGERRORWATCHER_H
+            
+// End of File