emailservices/emailstore/message_store/server/inc/MessageStoreServer.h
changeset 0 8466d47a6819
child 8 e1b6206813b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailservices/emailstore/message_store/server/inc/MessageStoreServer.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,229 @@
+/*
+* 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 server.
+*
+*/
+
+
+
+#ifndef __MESSAGE_STORE_SERVER_H__
+#define __MESSAGE_STORE_SERVER_H__
+
+// ========
+// INCLUDES
+// ========
+
+#include <e32base.h>
+//<cmail>
+#include "DebugLogMacros.h"
+#include "ImsPointsecObserver.h"
+#include "ImsPointsecMonitor.h"
+#include "StoreDriveMonitor.h"
+//</cmail>
+
+#include "BackupRestoreObserver.h"
+#include "ContainerStore.h"
+#include "MessageStoreClientServer.h"
+#include "psintpropertyobserver.h" // Support for on-the-fly upgrade
+
+// ====================
+// FORWARD DECLARATIONS
+// ====================
+
+class CMessageStoreSession;
+class CShutdownServer;
+class CImsPointsecMonitor;
+
+// =============================
+// PLATFORM SECURITY DEFINITIONS
+// =============================
+
+// Total number of ranges
+const TUint KMessageStoreRangeCount = 5;
+
+// Definition of the ranges of IPC numbers
+const TInt KMessageStoreRanges[KMessageStoreRangeCount] = 
+        {
+        0,
+        KMsgStoreCmdAlwaysPass,
+        KMsgStoreCmdFirstReadUserData,
+        KMsgStoreCmdFirstWriteUserData,
+        KMsgStoreCmdLast+1 
+        }; 
+
+// Policy to implement for each of the above ranges        
+const TUint8 KMessageStoreElementsIndex[KMessageStoreRangeCount] = 
+        {
+#ifdef _DEBUG
+        CPolicyServer::EAlwaysPass,   // applies to 0th range
+#else
+        CPolicyServer::ENotSupported, // applies to 0th range
+#endif
+        CPolicyServer::EAlwaysPass,   // KMessageStoreElements index that applies to 1st range
+        0,                            // KMessageStoreElements index that applies to 2nd range
+        1,                            // KMessageStoreElements index that applies to 3rd range
+        CPolicyServer::ENotSupported  // applies to 3nd range (out of range IPC)
+        };
+
+const CPolicyServer::TPolicyElement KMessageStoreElements[] = 
+	{
+    	{_INIT_SECURITY_POLICY_C1(ECapabilityReadUserData), CPolicyServer::EFailClient},
+       	{_INIT_SECURITY_POLICY_C1(ECapabilityWriteUserData), CPolicyServer::EFailClient}
+	};
+
+// Package all the above together into a policy
+const CPolicyServer::TPolicy KMessageStorePolicy =
+        {
+        CPolicyServer::EAlwaysPass,  // specifies all connect attempts should pass
+        KMessageStoreRangeCount,     // number of ranges                                   
+        KMessageStoreRanges,         // ranges array
+        KMessageStoreElementsIndex,  // elements<->ranges index
+        KMessageStoreElements
+        };
+
+// =====
+// TYPES
+// =====
+
+enum TMessageStorePanic
+  {
+  EPanicGeneral,
+  EPanicIllegalFunction
+  };
+
+void PanicClient(const RMessagePtr2& aMessage,TMessageStorePanic aPanic);
+
+// =======
+// CLASSES
+// =======
+
+// ==============================================================================================
+// CLASS: CMessageStoreServer
+// ==============================================================================================
+class CMessageStoreServer : private CPolicyServer, 
+							private MCustomBehaviorProvider, 
+							private MBackupRestoreObserver,
+                            private MImsPointsecObserver,
+                            private MStoreDriveStateObserver,
+                            public  MPSPropertyWatcherObserver
+    {
+    public:
+
+        // ==============
+        // PUBLIC METHODS
+        // ==============
+
+        static CMessageStoreServer* NewLC();
+
+        void AddSession( CMessageStoreSession* aSession );
+
+        void DropSession( CMessageStoreSession* aSession );
+
+        // will leave with KErrInUse if a backup or restore is in progress
+        CContainerStore& MessageStoreL();
+
+        void WipeEverythingL();
+
+        #ifdef _DEBUG
+        
+            void InjectBackupRestoreEventL( TUint aEvent );
+            void InjectPointSecEvent( TBool aLock );
+            void Shutdown();
+            
+        #endif
+            
+        // FROM: MPSPropertyWatcherObserver
+        void OnPSValueChangedToRequired();
+                
+    private:
+
+        // ===============
+        // PRIVATE METHODS
+        // ===============
+
+        CMessageStoreServer();    
+        void ConstructL();
+
+        ~CMessageStoreServer();
+
+        void CreateContainerStoreL();
+        void CreatePredefinedFoldersIfNeededL();
+
+        // inherited from CPolicyServer    
+        CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const;
+        //virtual CPolicyServer::TCustomResult CustomSecurityCheckL(const RMessage2& aMsg, TInt& aAction, TSecurityInfo& aMissing );
+
+        // inherited from MQuickPropertiesFinder
+        virtual void QuickPropertiesAndCountsL( TContainerId  aType,
+        							 		    const TDesC8& aProperties,
+        									    RBuf8&        aQuickProperties,
+        										TDes8&        aCounts ) const;
+        
+        virtual void SortableFieldsL( const TDesC8& aQuickProperties, const TDesC8& aProperties, RMsgStoreSortableFields& aSortableFields ) const;
+
+        virtual void InitializeCounts( TDes8& aCounts ) const;
+        virtual void LengthsL( TUint& aCountsLength,
+                               TUint& aQuickPropertiesMaxLength ) const;
+        virtual void IncrementParentCounts( TDes8& aParentCounts, const TDesC8& aChildCounts ) const;
+        virtual void DecrementParentCounts( TDes8& aParentCounts, const TDesC8& aChildCounts ) const;	
+        virtual void LogCounts( const TDesC& aDescription, const TDesC8& aCounts ) const;
+
+        // inherited from MBackupRestoreObserver							  			
+        virtual void BackupOrRestoreInProgress( TBool aIsARestore );
+        virtual void BackupOrRestoreCompleted();	
+        
+        // inherited from MImsPointsecObserver
+        virtual void PointSecLockStarted();
+        virtual void PointSecLockEnded();
+        
+            
+        //from MStoreDriveStateObserver
+        virtual void DriveStateChangedL( TBool aState );
+        
+        void LockSystem();
+        void UnlockSystemL();
+        
+        void FindBiggestCapacityDriveL( TDriveNumber& aDrive );
+        TInt GetDriveL( TDriveNumber& aDrive );
+        void SetDriveL( const TDriveNumber aDrive );
+        
+        void SendSystemLockMessage( TInt aEvent );
+        void TPtrC8ToRBuf16L( const TPtrC8& aPtr8, RBuf& aBuf ) const;
+                
+        // ==================
+        // PRIVATE ATTRIBUTES
+        // ==================
+
+        RPointerArray<CMessageStoreSession> iSessions;
+        CShutdownServer*                    iShutdown;
+        CContainerStore*                    iMessageStore;
+        CBackupRestoreNotifier*             iBackupRestoreNotifier;
+        CImsPointsecMonitor*                iPointsecMonitor;
+        TBool                               iWipeAfterBackupRestore;
+        
+        //monitor the message store drive for mount/unmount
+        CStoreDriveMonitor*                 iStoreDriveMonitor;
+        //True if the message store is locked because drive is unmount 
+        TBool                               iLockedByDriveMonitor;
+
+        TBool                               iLockedByBackupRestore;
+        TBool                               iLockedByPointSec;
+        
+        CPSIntPropertyWatcher*              iUpgradePropertyWatcher;
+        
+        __LOG_DECLARATION
+
+    }; // end class CMessageStoreServer
+
+#endif //__MESSAGE_STORE_SERVER_H__