diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/protocol/inc/ncdprotocolimpl.h --- /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 + +#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& aConfigPairs ); + + void SetHardwareConfigurationL( + CNcdRequestConfigurationHardware& aConfig, + RPointerArray& aConfigPairs ); + + // Adds user configurations to the request config + void AddConfigurationsToSoftwareDetailsL( + CNcdRequestConfigurationSoftware& aConfig, + RPointerArray& 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& aUserConfig, + const TDesC& aKey ) const; + + // Adds client's capabilities and engine's/provider's hardcoded capabilities + void AddCapabilitiesL( + CNcdRequestConfigurationSoftware& aConfig, + RPointerArray& 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& 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& aCookies ); + + // Adds the cookies from the array to the configuration request + // and removes them from the array + void AddCookiesToConfigRequestL( + CNcdRequestConfigurationData& aConfig, + RPointerArray& aCookies ); + + // Searches for the given key + TInt FindKey( const TDesC& aKey, + const RPointerArray& aArray ) const; + + + // Adds display details to aConfig from aConfigPairs + TInt AddDisplayDetailsL( + CNcdRequestConfigurationHardware& aConfig, + RPointerArray& 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& 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 iHomeMcc; + TBuf iHomeMnc; + + // Context-specific data, owned + RPointerArray iContexts; + + TUint32 iProtocolOptions; + }; + + +#endif