williamr@2: /* williamr@2: * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Class derives the XML service description and further extends williamr@2: * it by adding consumer policy interface implementation. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: #ifndef SEN_SERVICE_PATTERN_H williamr@2: #define SEN_SERVICE_PATTERN_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CSenConsumerPolicy; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * Class derives the XML service description and further extends williamr@2: * it by implementing consumer policy interface. williamr@2: * williamr@2: * Service pattern is typically used by Basic Web Service consumers, williamr@2: * which often know, which policy to use in the communication with williamr@2: * certain Web Service Provider (WSP). williamr@2: * williamr@2: * For example, a Basic Web Service consumer application might want williamr@2: * strictly define certain Internet Access Point (IAP) to be used when williamr@2: * initializing new service connection. Such an application can simply williamr@2: * instantiate new ServicePattern and set pre-known IAP ID into it. williamr@2: * williamr@2: * The main purpose of this class is to simplify the initialization williamr@2: * of service connections for Basic Web Services. williamr@2: * williamr@2: * It is important to note, that all the consumer policy information entered williamr@2: * via ServicePattern extending the MSenConsumerPolicy is treated williamr@2: * in "policy-per-client" terms. In other words, any consumer williamr@2: * policy information will not be stored for latter use of other williamr@2: * applications (even they might happen to use same WSP and contract!). williamr@2: * williamr@2: * This is due the nature of Service Pattern: it acts as a consumer williamr@2: * originated filter, after which a service will be resolved. williamr@2: * williamr@2: * Any service which "meets" the Service Pattern "constraints", is williamr@2: * considered as a "match", because such service accepts this williamr@2: * (search) pattern. williamr@2: * williamr@2: * @lib SenServDesc.lib williamr@2: * @since Series60 3.0 williamr@2: */ williamr@2: class CSenServicePattern : public CSenXmlServiceDescription, public MSenConsumerPolicy williamr@2: williamr@2: { williamr@2: public: // Constructors and destructor williamr@2: williamr@2: /** williamr@2: * Standard 2 phase constructors williamr@2: */ williamr@2: IMPORT_C static CSenServicePattern* NewL(); williamr@2: williamr@2: /** williamr@2: * Standard 2 phase constructors williamr@2: */ williamr@2: IMPORT_C static CSenServicePattern* NewLC(); williamr@2: williamr@2: /** williamr@2: * Standard 2 phase constructor williamr@2: * @param aNamespaceURI namespace URI for the service pattern. williamr@2: */ williamr@2: IMPORT_C static CSenServicePattern* NewL(const TDesC8& aNamespaceURI); williamr@2: williamr@2: /** williamr@2: * Standard 2 phase constructor williamr@2: * @param aNamespaceURI namespace URI for the service pattern. williamr@2: */ williamr@2: IMPORT_C static CSenServicePattern* NewLC(const TDesC8& aNamespaceURI); williamr@2: williamr@2: /** williamr@2: * Standard 2 phase constructor. williamr@2: * @param aEndPoint service pattern endpoint. williamr@2: * @param aContract service pattern contract. williamr@2: */ williamr@2: IMPORT_C static CSenServicePattern* NewL( const TDesC8& aEndPoint, williamr@2: const TDesC8& aContract ); williamr@2: williamr@2: /** williamr@2: * Standard 2 phase constructor. williamr@2: * @param aEndPoint service pattern endpoint. williamr@2: * @param aContract service pattern contract. williamr@2: */ williamr@2: IMPORT_C static CSenServicePattern* NewLC( const TDesC8& aEndPoint, williamr@2: const TDesC8& aContract ); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: IMPORT_C virtual ~CSenServicePattern(); williamr@2: williamr@2: // New functions williamr@2: williamr@2: /** williamr@2: * Convenience method for writing out the consumer policy as XML williamr@2: * in UTF-8 form. williamr@2: * @since Series60 3.0 williamr@2: * @return consumer policy as UTF-8 form XML. williamr@2: */ williamr@2: IMPORT_C HBufC8* ConsumerPolicyAsXmlL(); williamr@2: williamr@2: // Functions from base classes williamr@2: williamr@2: // From CSenXmlServiceDescription williamr@2: williamr@2: /** williamr@2: * Compares that both service description and possible williamr@2: * policy inside of it matches with this instance. williamr@2: * @since Series60 3.0 williamr@2: * @param aPattern the service description to compare to williamr@2: * @return ETrue both service description and policy information williamr@2: * matches, otherwise EFalse. If some value is not set williamr@2: * in current instance, it is not compared. williamr@2: */ williamr@2: IMPORT_C TBool Matches(MSenServiceDescription& aServicePattern); williamr@2: williamr@2: /** williamr@2: * Callback function which implements the XML content handler interface. williamr@2: * Parses the consumer policies independently. williamr@2: * @since Series60 3.0 williamr@2: * @param aNsUri The namespace URI of the new element williamr@2: * @param aLocalName The local name of the new element williamr@2: * @param aQName The qualified name of the new element williamr@2: * @param aAttributes The attributes of the new element williamr@2: */ williamr@2: IMPORT_C void StartElementL(const TDesC8& aNsUri, williamr@2: const TDesC8& aLocalName, williamr@2: const TDesC8& aQName, williamr@2: const RAttributeArray& aAttributes); williamr@2: williamr@2: // From MSenConsumerPolicy williamr@2: IMPORT_C virtual void SetConsumerIapIdL(TUint32 aIapId); williamr@2: IMPORT_C virtual TInt ConsumerIapId(TUint32& aCurrentIapId); williamr@2: IMPORT_C virtual void SetConsumerIdentityProviderIdsL( williamr@2: CSenIdentityProviderIdArray8& aList); williamr@2: williamr@2: IMPORT_C virtual TInt AddConsumerIdentityProviderIdL( williamr@2: const TDesC8& aProviderId); williamr@2: williamr@2: IMPORT_C virtual const CSenIdentityProviderIdArray8& williamr@2: ConsumerIdentityProviderIds8L(); williamr@2: williamr@2: IMPORT_C virtual TBool AcceptsConsumerPolicy( williamr@2: MSenConsumerPolicy& aPolicyPattern); williamr@2: williamr@2: IMPORT_C virtual TInt RebuildFromConsumerPolicy( williamr@2: MSenConsumerPolicy& aTemplate); williamr@2: williamr@2: protected: // New functions williamr@2: williamr@2: /** williamr@2: * C++ constructor. williamr@2: * @since Series60 3.0 williamr@2: * @param aType enumeration defininng the type of this class. williamr@2: */ williamr@2: IMPORT_C CSenServicePattern( williamr@2: MSenServiceDescription::TDescriptionClassType aType); williamr@2: williamr@2: /** williamr@2: * Base constructor offered to sub class implementations. williamr@2: * @since Series60 3.0 williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(); williamr@2: williamr@2: /** williamr@2: * Base constructor offered to sub class implementations. williamr@2: * @since Series60 3.0 williamr@2: * @param aNamespaceURI the localname for XML element representation williamr@2: * of this class. williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aNamespaceURI); williamr@2: williamr@2: /** williamr@2: * Base constructor offered to sub class implementations. williamr@2: * @since Series60 3.0 williamr@2: * @param aEndPoint is the actual endpoint to the service williamr@2: * @param aContract of the service, typically some URI williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(const TDesC8& aEndPoint, const TDesC8& aContract); williamr@2: williamr@2: public: williamr@2: /** williamr@2: * Sets the Consumer SNAP ID. williamr@2: * @param aSnapId A TUint32 Snap ID williamr@2: */ williamr@2: IMPORT_C void SetConsumerSnapIdL(TUint32 aSnapId); williamr@2: /** williamr@2: * Gets the Consumer SNAP ID. williamr@2: * @param aCurrentSnapId A TUint32 reference to be filled in with the williamr@2: * value of the SNAP ID. williamr@2: * @return KErrNone if no error, or some of the system williamr@2: * wide error codes. williamr@2: */ williamr@2: IMPORT_C TInt ConsumerSnapId(TUint32& aCurrentSnapId); williamr@2: williamr@2: protected: // Data williamr@2: williamr@2: // Consumer policy class instance, used as a delegate in parsing williamr@2: CSenConsumerPolicy* iConsumerPolicy; williamr@2: }; williamr@2: williamr@2: #endif SEN_SERVICE_PATTERN_H williamr@2: williamr@2: // End of File