ncdengine/provider/protocol/inc/ncdprotocolimpl.h
changeset 0 ba25891c3a9e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ncdengine/provider/protocol/inc/ncdprotocolimpl.h	Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,323 @@
+/*
+* 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:   CNcdProtocol declaration
+*
+*/
+
+
+#ifndef C_NCDPROTOCOL_H
+#define C_NCDPROTOCOL_H
+
+#include <e32base.h>
+
+#include "ncdparserobserver.h"
+#include "ncdprotocol.h"
+#include "ncddeviceservice.h"
+#include "ncduserconfiguration.h"
+#include "ncdprotocoldefaultobserver.h"
+
+class CNcdSessionHandler;
+class MNcdParser;
+class CNcdRequestBase;
+class CNcdRequestConfigurationData;
+class CNcdRequestConfigurationClient;
+class CNcdRequestConfigurationSoftware;
+class CNcdRequestConfigurationHardware;
+class CCatalogsSmsUtils;
+class CNcdKeyValuePair;
+class CNcdKeyValueMap;
+class MCatalogsContext;
+class MNcdDatabaseStorage;
+class MNcdStorageManager;
+class MNcdConfigurationManager;
+class CNcdProtocolDefaultObserverImpl;
+class MNcdProtocolDefaultObserver;
+class MNcdSessionHandler;
+class MNcdConfigurationProtocolCookie;
+class CNcdSubscriptionManager;
+class CNcdConfigurationProtocolDetailImpl;
+class TCatalogsVersion;
+
+/**
+ * Protocol entry point.
+ *
+ * @note Requests are created with NcdRequestGenerator
+ *
+ */
+class CNcdProtocol : public CBase, public MNcdProtocol
+    {  
+public:
+    
+    /**
+     * Protocol options are set with SetProtocolOptions
+     */
+    enum TNcdProtocolOptions
+        {
+        /**
+         * Send IMEI in the client configuration
+         */ 
+        ESendImei = 1
+        };
+    
+public:
+    /**
+     * Creator
+     */
+    static CNcdProtocol* NewL(
+        MNcdConfigurationManager& aConfigurationManager,
+        CNcdSubscriptionManager& aSubscriptionManager );
+       
+    /**
+     * Destructor
+     */ 
+    ~CNcdProtocol();
+    
+private:
+
+    /**
+     * Constructor
+     */
+    CNcdProtocol(
+        MNcdConfigurationManager& aConfigurationManager,
+        CNcdSubscriptionManager& aSubscriptionManager );
+    
+    /**
+     * ConstructL
+     */
+    void ConstructL();
+    
+public: // From MNcdProtocol
+
+    /**
+     * @see MNcdProtocol::CreateParserL()
+     */
+    MNcdParser* CreateParserL( MCatalogsContext& aContext,
+        const TDesC& aServerUri );
+
+
+    /**
+     * @see MNcdProtocol::ProcessPreminetRequestL()
+     */
+    HBufC8* ProcessPreminetRequestL( const MCatalogsContext& aContext, 
+        CNcdRequestBase& aRequest, 
+        const TDesC& aServerUri,
+        TBool aForceConfigurationData = EFalse );
+
+    /**
+     * @see MNcdProtocol::ProcessConfigurationRequestL()
+     */
+    HBufC8* ProcessConfigurationRequestL( const MCatalogsContext& aContext, 
+        CNcdRequestConfiguration& aRequest );
+    
+    
+    /**
+     * @see MNcdProtocol::SessionHandler()
+     */
+    MNcdSessionHandler& SessionHandlerL( 
+        const MCatalogsContext& aContext ) const;
+        
+
+public: // New methods
+    
+    /**
+     * Sets protocol options
+     * 
+     * @param aOptions A combination of TNcdProtocolOptions
+     */
+    void SetProtocolOptions( TUint32 aOptions );
+
+private: // New methods
+
+    // Adds client-info to the given request configuration (except cookies)
+    void AddClientInfoToRequestL( 
+        const MCatalogsContext& aContext, 
+        CNcdRequestConfigurationData& aConfig );
+
+
+    // Adds engine's client-info the request
+    void AddEngineClientInfoToRequestL( 
+        CNcdRequestConfigurationData& aConfig );
+
+    void SetNetworkInfoL( CNcdRequestConfigurationData& aConfig );   
+    
+    void AddSoftwareConfigurationL( const MCatalogsContext& aContext,
+        CNcdRequestConfigurationClient& aClient,
+        RPointerArray<CNcdKeyValuePair>& aConfigPairs );
+        
+    void SetHardwareConfigurationL( 
+        CNcdRequestConfigurationHardware& aConfig,
+        RPointerArray<CNcdKeyValuePair>& aConfigPairs );
+
+    // Adds user configurations to the request config
+    void AddConfigurationsToSoftwareDetailsL( 
+        CNcdRequestConfigurationSoftware& aConfig,
+        RPointerArray<CNcdKeyValuePair>& aUserConfig) const;
+
+    // Adds a single protocol detail
+    CNcdConfigurationProtocolDetailImpl* CreateDetailLC( 
+        const TDesC& aKey, const TDesC& aValue ) const;
+
+    void AddSoftwareUserConfigurationL( 
+        CNcdRequestConfigurationSoftware& aConfig,
+        void (CNcdRequestConfigurationSoftware::*aValueSetter)( const TDesC& ),
+        RPointerArray<CNcdKeyValuePair>& aUserConfig, 
+        const TDesC& aKey ) const;
+
+    // Adds client's capabilities and engine's/provider's hardcoded capabilities
+    void AddCapabilitiesL( 
+        CNcdRequestConfigurationSoftware& aConfig,
+        RPointerArray<CNcdKeyValuePair>& aUserConfig ) const;
+        
+    // Checks if the engine supports the given capability or not
+    // Engine's caps are hardcoded in this method
+    TBool IsCapabilitySupported( const TDesC& aCapability ) const;
+        
+    // Adds cookies to the array
+    // Returns ETrue if cookies were removed due to expiration
+    TBool AddCookiesL( const MCatalogsContext& aContext, 
+        RPointerArray<MNcdConfigurationProtocolCookie>& aCookies,
+        const TDesC& aServerUri,
+        const TDesC& aNamespace );
+        
+    // Adds the cookies from the array to the request and removes them
+    // from the array
+    void AddCookiesToRequestL( 
+        CNcdRequestBase& aRequest,
+        RPointerArray<MNcdConfigurationProtocolCookie>& aCookies );
+
+    // Adds the cookies from the array to the configuration request 
+    // and removes them from the array
+    void AddCookiesToConfigRequestL( 
+        CNcdRequestConfigurationData& aConfig,
+        RPointerArray<MNcdConfigurationProtocolCookie>& aCookies );
+
+    // Searches for the given key
+    TInt FindKey( const TDesC& aKey, 
+        const RPointerArray<CNcdKeyValuePair>& aArray ) const;
+
+
+    // Adds display details to aConfig from aConfigPairs
+    TInt AddDisplayDetailsL( 
+        CNcdRequestConfigurationHardware& aConfig,
+        RPointerArray<CNcdKeyValuePair>& aConfigPairs );
+
+    // Interprets the given display value
+    TInt InterpretDisplayValue( 
+        const TDesC& aValue, TInt& aDispNumber, TInt& aWidth, 
+        TInt& aHeight, TInt& aColors ) const;
+
+    // Adds the possible product code to the hardware details.
+    void AddProductCodeToHardwareDetailsL(     
+        CNcdRequestConfigurationHardware& aConfig,
+        RPointerArray<CNcdKeyValuePair>& aConfigPairs );
+                
+    /**
+     * Gets flash player UID and version.
+     *
+     * @param aUid On return, contains the UID of flash-player installed
+     *             on the device.
+     * @param aVersion On return, contains the version of flash-player
+     *                 installed on the device.
+     * @return ETrue If the flash player data was found, otherwise false.
+     */
+    TBool FlashPlayerDataL( TUid& aUid, TCatalogsVersion& aVersion );
+    
+    /**
+     * Adds additional firmware details to hardware details
+     */
+    void AddFirmwareDetailsToHardwareDetailsL(     
+        CNcdRequestConfigurationHardware& aConfig );
+
+    /**
+     * A helper method for adding a hardware detail
+     */
+    void AddHardwareDetailL( 
+        CNcdRequestConfigurationHardware& aConfig,
+        const TDesC& aKey,
+        const TDesC& aValue );
+
+private:
+
+    // forward declaration
+    class CContextData;
+
+    CContextData& CreateContextDataL( const MCatalogsContext& aContext );
+    TInt FindContextData( const MCatalogsContext& aContext ) const;
+
+    static TBool MatchContextDatas( const CContextData& aFirst, 
+        const CContextData& aSecond );
+
+
+private: // Data types
+
+    /**
+     * Context-specific data
+     */
+    class CContextData : public CBase, 
+        public MNcdParserSessionObserver
+        {
+        public:
+            CContextData( const MCatalogsContext& aContext,                 
+                CNcdSessionHandler* aSessionHandler );
+                
+            ~CContextData();
+            
+            /**
+             * Session handler getter
+             */
+            MNcdSessionHandler& SessionHandler() const;
+             
+            
+            TUid FamilyId() const;
+             
+        private: // From MNcdParserSessionObserver
+
+            /**
+             * @see MNcdParserSessionObserver::SessionL
+             */
+            void SessionL( const TDesC& aSessionId, const TDesC& aServerUri,
+                const TDesC& aNameSpace );
+                
+        private:
+            // Context's family id
+            TUid iFamilyId;            
+            
+            // Session handler
+            CNcdSessionHandler* iSessionHandler;
+            
+        };
+
+
+private: // Data
+            
+    MNcdConfigurationManager& iConfigurationManager;
+    CNcdSubscriptionManager& iSubscriptionManager;
+        
+    // Owned
+    CCatalogsSmsUtils* iSmsUtils;    
+    
+    // Not owned
+    MNcdDeviceService* iDeviceService;
+    
+    TBuf<MNcdDeviceService::KMccLength> iHomeMcc;
+    TBuf<MNcdDeviceService::KMncLength> iHomeMnc;
+
+    // Context-specific data, owned
+    RPointerArray<CContextData> iContexts;
+    
+    TUint32 iProtocolOptions;
+    };
+
+
+#endif