ncdengine/provider/server/inc/ncdproviderimpl.h
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/server/inc/ncdproviderimpl.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,453 @@
+/*
+* 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:   Contains CNcdProvider class
+*
+*/
+
+
+#ifndef NCD_PROVIDER_H
+#define NCD_PROVIDER_H
+
+
+#include "catalogscommunicable.h"
+#include "catalogshttpconnectionmanager.h"
+
+
+class CNcdNodeManager;
+class CNcdFavoriteManager;
+class CNcdPurchaseHistoryDb;
+class CNcdOperationManager;
+class CNcdSubscriptionManager;
+class CNcdStorageManager;
+class CNcdProtocol;
+class CCatalogsTransport;
+class MNcdConfigurationManager;
+class MCatalogsHttpSession;
+class MCatalogsSmsSession;
+class MCatalogsContext;
+class MCatalogsAccessPointManager;
+class CNcdProviderUtils;
+class MCatalogsHttpSession;
+class RFs;
+class CNcdReportManager;
+class TCatalogsConnectionMethod;
+class CNcdHttpUtils;
+class CNcdServerReportManager;
+class MNcdProviderCloseObserver;
+class CNcdGeneralManager;
+
+struct TNcdProviderContext
+    {
+    MCatalogsHttpSession* iHttpSession;
+    MCatalogsSmsSession* iSmsSession;
+    CNcdReportManager* iReportManager;
+    
+    TNcdProviderContext() : 
+        iHttpSession( NULL ),
+        iSmsSession( NULL ),
+        iReportManager( NULL )
+        {
+        }
+    };
+    
+/**
+ *  CNcdProvider provides functions to ...
+ *  @lib ?library
+ *  @since S60 ?S60_version *** for example, S60 v3.0
+ */
+class CNcdProvider : public CCatalogsCommunicable,
+    public MCatalogsHttpConnectionConfirmationObserver,
+    public MCatalogsHttpConnectionErrorObserver
+    {
+
+public:
+
+    /**
+     * TNcdProviderFunctionNumber should be used when proxies are requesting 
+     * services by calling ReceiveMessageL function of this class.
+     */
+    enum TNcdProviderFunctionNumber
+        {
+        /**
+         *
+         */
+         ENcdProviderNodeManagerHandle,       
+
+        /**
+         *
+         */
+         ENcdProviderPurchaseHistoryHandle,       
+
+        /**
+         *
+         */
+         ENcdProviderOperationManagerHandle,       
+
+        /**
+         *
+         */
+         ENcdProviderSubscriptionManagerHandle, 
+         
+        /**
+         *
+         */
+         ENcdProviderFavoriteManagerHandle,
+         
+         /**
+          *
+          */
+        ENcdProviderServerReportManagerHandle,
+        
+        /**
+         *
+         */
+         ENcdProviderRelease,
+         
+         /**
+          * 
+          */
+         ENcdProviderAddConfiguration,
+
+         /**
+          * 
+          */         
+         ENcdProviderRemoveConfiguration,
+
+
+         /**
+          * 
+          */         
+         ENcdProviderRetrieveConfigurations,
+
+
+         /**
+          * 
+          */         
+         ENcdProviderSetDefaultAccessPoint,
+
+         
+         /**
+          *
+          */
+         ENcdProviderClientId,         
+         
+         /**
+          *
+          */
+         ENcdProviderClearCache,
+         
+         
+         /**
+          */
+         ENcdGetProviderInfo,
+         
+         /**
+          *
+          */
+         ENcdProviderIsSimChanged,
+         
+         /**
+          *
+          */
+         ENcdProviderIsFixedAp,
+         
+         /**
+          *
+          */
+         ENcdProviderSyncSeenInfo
+         
+        };
+
+
+    enum TNcdProviderInfo
+        {
+        ENcdProviderInfoType,
+        ENcdProviderInfoVersion,
+        ENcdProviderInfoUid,
+        ENcdProviderInfoProvisioning
+        };
+
+
+
+    /**
+     * NewLC
+     *
+     * @param aProviderIndex Local index of the provider.
+     * @return CNcdProvider* Pointer to the created object 
+     * of this class.
+     */
+    static CNcdProvider* NewLC( 
+        const TUid& aFamilyId,
+        MNcdProviderCloseObserver& aCloseObserver,
+        const TDesC& aEngineRoot,
+        CCatalogsTransport& aTransport,
+        CNcdStorageManager& aStorageManager );
+
+
+    /**
+     * Destructor
+     */
+    virtual ~CNcdProvider();
+
+public:
+
+    void PrepareSessionL( MCatalogsSession& aSession, TUint32 aOptions );
+
+    /**
+     * Informs objects of session removal. They should not use
+     * given session in anyway anymore
+     *
+     * @since S60 ?S60_version
+     * @param aSession Session that is not in use anymore.
+     */   
+    void HandleSessionRemoval( MCatalogsSession& aSession );
+
+    void GetProviderContextL( MCatalogsContext& aContext, TNcdProviderContext& aProviderContext );
+
+    CNcdNodeManager& NodeManager();
+
+    MCatalogsAccessPointManager& AccessPointManager();
+    
+    const TUid& FamilyId() const;
+    
+    const TDesC& FamilyName() const;
+    
+    TInt DatabaseClearingStatus() const;
+
+public: // CCatalogsCommunicable
+
+    /**
+     * TNcdNodeFunctionNumber describes the functionality that
+     * may be required using this function.
+     *
+     * @see CCatalogsCommuniCable::ReceiveMessage
+     */
+    virtual void ReceiveMessage( MCatalogsBaseMessage* aMessage,
+                                 TInt aFunctionNumber );
+
+    void ReceiveMessageL( 
+        MCatalogsBaseMessage& aMessage,
+        TInt aFunctionNumber  );
+
+    /**
+     * @see CCatalogsCommunicable::CounterPartLost
+     */
+    virtual void CounterPartLost( const MCatalogsSession& aSession );
+
+public: // MCatalogsHttpConnectionConfirmationObserver
+
+    virtual TCatalogsHttpConnectionConfirmationState 
+        HandleConnectionConfirmationRequestL( 
+            MCatalogsHttpSession& aSession, 
+            const TCatalogsConnectionMethod& aMethod );
+
+
+public: // MCatalogsHttpConnectionErrorObserver
+
+
+    virtual void HandleConnectionErrorL( 
+        MCatalogsHttpSession& aSession,
+        const TCatalogsConnectionMethod& aMethod, 
+        TInt aError );
+
+
+protected:
+
+    /**
+     * Constructor
+     */
+    CNcdProvider( 
+        const TUid& aFamilyId,
+        MNcdProviderCloseObserver& aCloseObserver,
+        const TDesC& aEngineRoot,
+        CCatalogsTransport& aTransport,
+        CNcdStorageManager& aStorageManager );
+
+    /**
+     * Creates the nodemanager and the data storer.
+     */
+    void ConstructL();
+
+
+    // Here are all the functions that are used when ReceiveMessageL is called
+    // and the functionality is delegated according to the given function 
+    // number.
+
+    // Gives the operationmanager handle to the proxy 
+    void NodeManagerHandleRequestL( 
+        MCatalogsBaseMessage& aMessage ) const;
+
+    // Gives the Purchase History handle to the proxy.
+    void PurchaseHistoryHandleRequestL( MCatalogsBaseMessage& aMessage ) const;
+
+    // Gives the operationmanager handle to the proxy 
+    void OperationManagerHandleRequestL( 
+        MCatalogsBaseMessage& aMessage ) const;
+
+    // Gives the subscriptionmanager handle to the proxy 
+    void SubscriptionManagerHandleRequestL( 
+        MCatalogsBaseMessage& aMessage ) const;
+
+    // Gives the favoritemanager handle to the proxy 
+    void FavoriteManagerHandleRequestL( 
+        MCatalogsBaseMessage& aMessage ) const;
+
+    void ServerReportManagerHandleRequestL(
+        MCatalogsBaseMessage& aMessage ) const;
+
+    // Removes one reference of this object from the session.
+    // ( There may be multiple references, but we take care of our own. )
+    void ReleaseRequestL( MCatalogsBaseMessage& aMessage ) const;
+
+
+    void AddConfigurationRequestL( MCatalogsBaseMessage& aMessage );
+    
+    void RemoveConfigurationRequestL( MCatalogsBaseMessage& aMessage );
+    
+    void RetrieveConfigurationsRequestL( 
+        MCatalogsBaseMessage& aMessage );
+
+    void SetDefaultAccessPointRequestL( 
+        MCatalogsBaseMessage& aMessage );
+        
+    void CreateClientIdRequestL(
+        MCatalogsBaseMessage& aMessage );
+        
+    // Clears client cache
+    void ClearCacheRequestL(
+        MCatalogsBaseMessage& aMessage );
+
+    void GetInfoRequestL(
+        MCatalogsBaseMessage& aMessage );
+        
+    void IsSimChangedRequestL( MCatalogsBaseMessage& aMessage );
+    
+    void IsFixedApRequestL( MCatalogsBaseMessage& aMessage );
+    
+    void SyncSeenInfoRequestL( MCatalogsBaseMessage& aMessage );
+
+    void AllowCacheCleaningL( 
+        const MCatalogsContext& aContext, 
+        TBool aAllow );
+    
+    TBool StartupBeginL( const TDesC& aEnginePath );
+
+    void CheckDatabaseVersionsL( const TDesC& aEnginePath );
+
+    
+    void StartupEndL();        
+        
+    void ClearProviderFilesL( const TDesC& aEnginePath );
+    
+    void ClearDatabasesL( const TDesC& aEnginePath );
+    void ClearPurchaseHistoryL();
+    void ClearTempFilesL(); 
+   
+    void HandleShutdownFileL();
+    
+    // Manages the storages if SIM card is changed.
+    // aClearStorages determines whether storages are cleared or not
+    void ManageStoragesL( 
+        const MCatalogsContext& aContext, 
+        TBool aClearStorages );
+    
+    // Hashes IMSI with SHA-1
+    HBufC8* HashImsiLC();
+
+    HBufC8* ConvertDataToTextL( const TDesC8& aData ) const;
+    
+    void PurchaseHistoryPathLC( RBuf& aPath ) const;
+    
+    void FamilyPathLC( RBuf& aPath ) const;
+    
+    void HandleProviderOptionsL( 
+        const MCatalogsContext& aContext, 
+        TUint32 aOptions,
+        MCatalogsHttpSession& aHttpSession );
+    
+private:
+
+    // Prevent these two if they are not implemented
+    CNcdProvider( const CNcdProvider& aObject );
+    CNcdProvider& operator =( const CNcdProvider& aObject );
+      
+
+private: // data
+
+    // ID of the family this provider instance belongs to
+    TUid iFamilyId;
+    
+    TUidName iFamilyName;
+    
+    MNcdProviderCloseObserver& iCloseObserver;
+    
+    const TDesC& iEngineRoot;
+    
+    // Local provider index number of this provider. Used to index context provider fields,
+    // for example.
+    TInt iProviderIndex;
+
+    // Node manager is used to manage the creation of nodes
+    CNcdNodeManager* iNodeManager;
+    
+    // Purchase history
+    CNcdPurchaseHistoryDb* iPurchaseHistory;
+
+    // Operation manager is used to manage the creation of operations
+    CNcdOperationManager* iOperationManager;
+
+
+    // Subscription manager manages subscription info
+    CNcdSubscriptionManager* iSubscriptionManager;
+
+
+    // Storage manager is used to manage all storages in the provider    
+    CNcdStorageManager& iStorageManager;
+    
+    // Protocol handler manages protocol sessions and provides access
+    // to response parser and request processing
+    CNcdProtocol* iProtocolHandler;
+    
+    // Transport
+    CCatalogsTransport& iTransport;
+    
+    MNcdConfigurationManager* iConfigurationManager;
+    
+    // Access point manager is used to manage creation of access points
+    MCatalogsAccessPointManager* iAccessPointManager;
+    
+    // Favorite manager is used to manage favorite node list.
+    CNcdFavoriteManager* iFavoriteManager;
+    
+    // Server report manager is used to manage server report sending.
+    CNcdServerReportManager* iServerReportManager;
+       
+    // ETrue if the SIM has been changed since previous startup    
+    TBool iSimChanged;
+    
+    // ETrue while provider is starting up
+    TBool iProviderStartingUp;
+    
+    CNcdHttpUtils* iHttpUtils;
+    
+    // ETrue if the engine was not shutdown properly last time
+    TBool iShutdownFailed;
+      
+    CNcdGeneralManager* iGeneralManager;
+        
+    TInt iDatabaseClearingStatus;
+    };
+
+
+#endif // NCD_PROVIDER_H