emailservices/emailstore/message_store/server/inc/MessageStoreSession.h
changeset 0 8466d47a6819
child 8 e1b6206813b4
child 68 83cc6bae1de8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/message_store/server/inc/MessageStoreSession.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,242 @@
+/*
+* Copyright (c) 2006 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:  Message store session.
+*
+*/
+
+
+
+#ifndef __MESSAGE_STORE_SESSION_H__
+#define __MESSAGE_STORE_SESSION_H__
+
+// ========
+// INCLUDES
+// ========
+
+#include <e32base.h>
+//<cmail>
+#include "DebugLogMacros.h"
+//</cmail>
+
+#include "MessageStoreClientServer.h"
+#include "ContainerStore.h"
+#include "ContainerStoreSearchHandler.h"
+
+// ====================
+// FORWARD DECLARATIONS
+// ====================
+
+class CMessageStoreServer;
+class CMruAddress;
+class CBufferedMessageCreator;
+
+
+// =======
+// CLASSES
+// =======
+
+class CSearchResult : public CBase
+    {
+    public:    
+    
+        static CSearchResult* NewL( TContainerId aMessageId, TContainerId aFolderId, const TDesC8& aPropertyBuf );
+        static CSearchResult* SearchCompleteResultL();
+        
+        virtual ~CSearchResult();
+        
+        TContainerId MessageId()   { return iMessageId; }
+        TContainerId FolderId()    { return iFolderId; }
+        const RBuf8& PropertyBuf() { return iPropertyBuf; }
+        
+    protected:
+        
+        CSearchResult( TContainerId aMsgId, TContainerId aFolderId );
+        void ConstructL( const TDesC8& aPropertyBuf );
+        
+    private:
+        TContainerId  iMessageId;
+        TContainerId  iFolderId;
+        RBuf8         iPropertyBuf;    
+    };
+
+// ==============================================================================================
+// CLASS: CMessageStoreSession
+//
+// This class represents a session to the message store server.
+// ==============================================================================================
+class CMessageStoreSession : public  CSession2, 
+                             private MContainerStoreObserver,
+                             private MContainerStoreSearchClient
+    {
+    public:
+
+        // ==============
+        // PUBLIC METHODS
+        // ==============
+        
+        CMessageStoreSession( CMessageStoreServer& aMessageStoreServer ) ;
+        
+        virtual ~CMessageStoreSession();
+
+        // Called by the server when the container store is temporarily unavailable, due to conditions
+        // such as backup/restore in progress.
+        void ContainerStoreUnavailable();
+
+        // Called by the server when the container store is available again.
+        void ContainerStoreAvailable();
+
+        // Called by the server to propogate events to the session clients.
+        void SendEventToObserver( TMsgStoreEvent aEvent );
+
+        // inherited from CSession2
+        void CreateL();
+
+    private:
+
+        // ===============
+        // PRIVATE METHODS
+        // ===============
+
+        // aAlwaysSend indicates whether or not matches should be sent, even if no matches have been
+        // found.
+        void SendMatchesToClient( TBool aAlwaysSend = EFalse );
+        void DoWriteMatchesToMessageL();
+
+        // IPC message handler functions
+        void DoAuthenticatedL( const RMessage2& aMessage );
+        void DoAuthenticateL( const RMessage2& aMessage );
+        void DoClearAuthenticationL( const RMessage2& aMessage );
+        void DoHasPasswordL( const RMessage2& aMessage );
+        void DoSetPasswordL( const RMessage2& aMessage );
+        void DoChangePasswordL( const RMessage2& aMessage );
+        void DoEnableEncryptionL( const RMessage2& aMessage );
+        void DoDisableEncryptionL( const RMessage2& aMessage );
+        void DoWipeEverythingL( const RMessage2& aMessage );
+        void DoStartObserving( const RMessage2& aMessage );    
+        void DoStopObserving( const RMessage2& aMessage );    
+        void DoGetEventsL( const RMessage2& aMessage );    
+        void DoCreateAccountL( const RMessage2& aMessage ); 
+        void DoOpenAccountL( const RMessage2& aMessage ); 
+        void DoRenameAccountL( const RMessage2& aMessage ); 
+        void DoDeleteAccountL( const RMessage2& aMessage ); 
+        void DoListAccountsL( const RMessage2& aMessage ); 
+        void DoDeleteContainerL( const RMessage2& aMessage );    
+        void DoCreateContainerL( const RMessage2& aMessage ); 
+        void DoCommitContainerL( const RMessage2& aMessage );
+        void DoAbandonContainerL( const RMessage2& aMessage );
+        void DoMoveContainerL( const RMessage2& aMessage );
+        void DoCopyContainerL( const RMessage2& aMessage );
+        void DoChildrenCountsL( const RMessage2& aMessage );
+        void DoTotalCountsL( const RMessage2& aMessage );
+        void DoChildrenIdsL( const RMessage2& aMessage );
+        void DoPropertiesListL( const RMessage2& aMessage );
+        void DoFetchPropertiesL( const RMessage2& aMessage );
+        void DoUpdatePropertiesL( const RMessage2& aMessage );
+        void DoUpdatePropertyL( const RMessage2& aMessage );
+        void DoContentLengthL( const RMessage2& aMessage ); 
+        void DoFetchContentToBufferL( const RMessage2& aMessage ); 
+        void DoFetchContentToFileL( const RMessage2& aMessage ); 
+        void DoReplaceContentWithBufferL( const RMessage2& aMessage ); 
+        void DoReplaceContentWithFileL( const RMessage2& aMessage ); 
+        void DoAppendToContentL( const RMessage2& aMessage ); 
+        void DoPrependToContentL( const RMessage2& aMessage );
+        void DoRemoveContentL( const RMessage2& aMessage ); 
+        void DoOpenContentFileL( const RMessage2& aMessage );
+        void DoPrepareSearchL( const RMessage2& aMessage );
+        void DoGetMatches( const RMessage2& aMessage );
+        void DoCancelSearch( const RMessage2& aMessage );
+        void DoClearSearchResultCache( const RMessage2& aMessage );
+        void DoStartSortingL( const RMessage2& aMessage );
+        void DoGetSortedRowsL( const RMessage2& aMessage );
+        void DoGetIteratorGroupCountL( const RMessage2& aMessage );
+        void DoGetSortedIdsAndFlagsL( const RMessage2& aMessage );
+        void DoGetSortedIndexOfL( const RMessage2& aMessage );
+        void DoGetSortedIdsL( const RMessage2& aMessage );
+        void DoGetSortedIdsAndGroupCountL( const RMessage2& aMessage );
+        void DoEndSortingL( const RMessage2& aMessage );
+        
+        void DoSetMaxMruAdressCountL( const RMessage2& aMessage );
+        void DoSetMruAddressListL( const RMessage2& aMessage );
+        void DoGetMruAddressListL( const RMessage2& aMessage );
+
+        void DoBeginBatchInsertL( const RMessage2& aMessage );
+        void DoFinishBatchInsertL( const RMessage2& aMessage );
+        
+        // inherited from CSession2
+        void ServiceL(const RMessage2& aMessage);
+        void ServiceError(const RMessage2& aMessage, TInt aError);
+
+        // inherited from MContainerStoreObserver
+        virtual void ContainerModified( TOperation aOperation, 
+                const RArray<TContainerId>& aHierarchy, 
+                TContainerId aNewParentId, 
+                const TDesC8& aQuickProperties );
+        
+        virtual void AuthenticationChanged( TBool aAuthenticated );
+        virtual void AccountModified( TOperation aOperation, TInt32 aOwnerId, const TDesC8& aName, const TDesC8& aNewName, TContainerId aMailboxId );
+
+        // inherited from MSearchClient
+        virtual void MatchFound( TContainerId aMsgId, TContainerId aFolderId, const TDesC8& aPropertyBuf );
+        virtual void SearchComplete( TInt aStatus );
+        
+        void ReadString8ArrayL(  const RMessage2& aMessage, TInt aIndex, RPointerArray<HBufC8>& aArray );
+        void ReadString16ArrayL( const RMessage2& aMessage, TInt aIndex, RPointerArray<HBufC>& aArray );
+        void ReadIdArrayL( const RMessage2& aMessage, TInt aIndex, RArray<TContainerId>& aArray );
+        
+        // FUNCTIONS TO SUPPORT AUTOMATED UNIT TESTING
+        #ifdef _DEBUG
+            void DoInjectBackupRestoreEventL( const RMessage2& aMessage );
+            void DoInjectPointSecEvent( const RMessage2& aMessage );
+            void DoSimulateLowDiskSpaceL( const RMessage2& aMessage );
+            void DoGetEncryptionStateL( const RMessage2& aMessage );
+            void DoShutdownServer( const RMessage2& aMessage );
+        #endif
+
+        void DoMatchFoundL( TContainerId aMsgId, TContainerId aFolderId, const TDesC8& aPropertyBuf );
+        
+        CBufferedMessageCreator& GetBufferedMessageCreatorL();
+        
+        // ==================
+        // PRIVATE ATTRIBUTES
+        // ==================
+        
+        CMessageStoreServer&   iServer;
+
+        // These variables are used in DoPropertiesListL, which has a client request that could span
+        // several messages.    
+        RArray<TContainerId>               iIds;
+        RPointerArray<HBufC8>              iPropertyNames;
+        RPointerArray<HBufC>               iSearchStrings;
+        TBool                              iUsingQuery;
+        TMsgStorePropertiesListQueryParams iQueryParams;
+
+        // observer-related attributes    
+        RMessage2              iObserverMessage;    
+        RArray<TMsgStoreEvent> iEventQueue;
+        TBool                  iIsObserving;
+
+        // search-related attributes
+        RMessage2                          iGetMatchesMessage;
+        CContainerStoreSearchHandler*      iSearchHandler;
+        RPointerArray<CSearchResult>       iMatchMessages;
+        RPointerArray<CMruAddress>         iMruAddressArray;
+        RArray<TMsgStoreId>                iSortSessionIds;
+        
+        CBufferedMessageCreator* iBufferedMessageCreator;
+        
+        __LOG_DECLARATION
+
+    }; // end class CMessageStoreSession
+
+#endif //__MESSAGE_STORE_SESSION_H__