diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/inc/ncdproviderimpl.h --- /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