webservices/wsframework/inc/msenservicemanager.h
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsframework/inc/msenservicemanager.h	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,410 @@
+/*
+* Copyright (c) 2002-2005 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: Header declaration
+*
+*/
+
+
+
+
+
+
+
+
+#ifndef M_SEN_SERVICE_MANAGER_H
+#define M_SEN_SERVICE_MANAGER_H
+
+//  INCLUDES
+#include <e32std.h>
+#include <flogger.h> // RFileLogger
+#include <badesca.h> // CDesCArray etc
+
+#include "msentransportfactory.h"
+
+// FORWARD DECLARATIONS
+class CSenXmlReader;
+class MSenServiceDescription;
+class MSenIdentityManager;
+class MSenRemoteServiceConsumer;
+class CSenWSDescription;
+class CSenServiceSession;
+class CSenIdentityProvider;
+class CSenBaseFragment;
+class MSenProviderPolicy;
+class MSenConsumerPolicy;
+class RStringPool;
+class CSenInternalCredential;
+class RSenCredentialPtr;
+
+// DATA TYPES
+typedef RPointerArray<CSenWSDescription> RWSDescriptionArray;
+typedef RPointerArray<CSenInternalCredential> RSenCredentialArray;
+typedef RArray<RSenCredentialPtr> RSenCredentialPtrArray;
+
+// CLASS DECLARATION
+
+/**
+* MSenServiceManager represents the client side interface of a
+* CoreServiceManager
+* The methods defined in this interface may executed from a client
+* (ServiceConnection) via the server-side session (SenClientSession).
+* Note that the singleton CoreServiceManager also has a number of public
+* methods (defined in MSenCoreServiceManager interface) that are used by
+* e.g. plug-ins, that are expected to operate in the same process as the
+* CoreServiceManager.
+*/
+class MSenServiceManager : public MSenTransportFactory
+    {
+    public:
+    
+        // New functions
+        
+        /**
+        * @param aServiceConnection is the ServiceConnection to 
+        * be initialized. Method attempts to initialize connection
+        * according to a pattern, which this service manager receives.
+        * Pattern is spesified by some service consumer (WSC app's), 
+        * which requests a new connection to be initialized.
+        * Therefore, the new connection should be to a service that
+        * has a service description matching with the pattern.
+        * @param aPattern is a - typically partial - service description
+        * that is used as a search pattern.
+        * @param aErrorMsg may contain the error message (SOAP-ENV or SOAP 
+        * fault) in case that this function is returning an error from service
+        * @return KErrNone or a system-wide error code, if error occurred.
+        */
+        virtual TInt InitServiceConnectionL( MSenRemoteServiceConsumer& aServiceConsumer,
+                                             CSenWSDescription& aPattern,
+                                             HBufC8*& aErrorMsg) = 0;
+        /**
+        * Search for services whose service descriptions using a contract URI.
+        * @param   aMatches is the list into which 0 or more ServiceDescriptions
+        * will be appended, if one or more matches are found. Onership of the
+        * appended pointers is not transferred to the caller.
+        * @param   aContract is the URI which specifies the searhed contract.
+        * @return KErrNone if successful, or otherwise a system-wide error code.
+        */
+        virtual TInt ServiceDescriptionsL( RWSDescriptionArray& aMatches,
+                                           const TDesC8& aContract ) = 0;
+        
+        /**
+        * Search for services with a matching ServiceDescription,
+        * which can contain any combination of contract, endpoint and facets.
+        * @param   aMatches is the list into which 0 or more service descriptions
+        * will be appended. Ownership of appended pointers is not transferred to
+        * the caller.
+        * @param aPattern is the service description used as "search pattern", 
+        * as a kind of "search mask". This means, that it is typically a "partial"
+        * service description, which fields include only those fields that need
+        * to match - the content of other fields (elements) is not relevant to
+        * the caller.
+        * @return KErrNone if successful, or otherwise a system-wide error code.
+        */
+        virtual TInt ServiceDescriptionsL( RWSDescriptionArray& aMatches,
+                                           MSenServiceDescription& aPattern ) = 0;
+
+        /**
+        * Used by applications to inform the Service Manager about a service,
+        * for example about an Authentication Service, which typically cannot
+        * be discovered through other means.
+        * @param aServiceDescription which is being registered.
+        * @return KErrNone if registration was successful or otherwise:
+        *  a system error
+        */
+        virtual TInt RegisterServiceDescriptionL( CSenWSDescription* apServiceDescription ) = 0;
+
+        /**
+        * Used by application to to inform the Service Manager about a service
+        * which no longer is available. The ServiceManager will remove the
+        * service from its database as soon as it is no longer used.
+        * @param aServiceDescription
+        * @return KErrNone if registration succeeded or otherwise some system-wide
+        * error code.
+        */
+        virtual TInt UnregisterServiceDescriptionL( MSenServiceDescription& aServiceDescription ) = 0;
+
+        /**
+        * Method attempts to find new framework using given FrameworkId. If framework ECOM
+        * is found, the a pointer to it's configuration reader (fragment) is returned, or
+        * NULL otherwise.
+        */
+        virtual CSenBaseFragment* InstallFrameworkL( const TDesC8& aFrameworkId ) = 0;
+
+        /**
+        * Return the XML reader instance used and owned by this Core Service Manager
+        */
+        virtual CSenXmlReader* XMLReader() = 0;
+
+        /**
+        * @return totally randomly generated (but not cryptographically strong)
+        * GUID. The GUID is based on the MD5 hash of a random number and the 
+        * current time. 
+        */
+        virtual HBufC8* RandomGuidL() = 0;
+
+        /*
+        * @return pointer to the file logger owned by this Core Service Manager
+        */
+        virtual RFileLogger* Log() const = 0;
+
+        virtual void IncrementConnections() = 0;
+        virtual void DecrementConnections() = 0;
+
+        /**
+        * Register an IdentityProvider for the current active Identity.
+        * Ownerships is transferred. Method is typically implemented
+        * by some Identity Manager which this Core Service Manager knows.
+        * @param aIdp a registered IdentityProvider
+        * @return KErrNone or system-wide error code.
+        */
+        virtual TInt RegisterIdentityProviderL( CSenIdentityProvider* aIdp ) = 0;
+
+        /**
+        * Unregister an IdentityProvider for the current active Identity.
+        * Method is typically implemented by some Identity Manager which 
+        * this Core Service Manager knows.
+        * @param aIdp an unregistered IdentityProvider
+        * @return true if successful.
+        */
+        virtual TBool UnregisterIdentityProviderL( CSenIdentityProvider& aIdp ) = 0;
+
+        /**
+        * Associate a service to an IdentityProvider.
+        * @param aServiceID the contract or endpoint of a service
+        * @param aProviderID the id of an IdentityProvider
+        * @return true if successful. Failure may be caused by non-existence
+        * of the IdentityProvider for the current user.
+        */
+        virtual TBool AssociateServiceL( const TDesC8& aServiceID,
+                                         const TDesC8& providerID ) = 0;
+
+        /**
+         * Dissociate a service from an IdentityProvider.
+         * @param aServiceID the contract or endpoint of a service
+         * @param aProviderID the id of an IdentityProvider
+         * @return true if successful. Failure may be caused by non-existence
+         * of the IdentityProvider for the current user.
+         */
+        virtual TBool DissociateServiceL( const TDesC8& aServiceID,
+                                          const TDesC8& aProviderID ) = 0;
+
+        virtual void SetShowPasswordDialog( const TBool aState ) = 0;
+
+        /**
+         *  Check if there is an existing service description with identical data
+         *  already in the database. The service description in the database can
+         *  contain more information than the pattern, but all the pattern 
+         *  information MUST match exactly for a match.
+         *  @param  aContains contains the boolean value in return, ETrue if found,
+         *          EFalse if not
+         *  @param  aPattern the service description data to be searched.
+         *  @return KErrNone or other system-wide Symbian error codes.
+         */
+        virtual TInt ContainsServiceDescriptionL( TBool& aContains,
+                                                  CSenWSDescription& aPattern ) = 0;
+
+        /**
+         *  Check if there is an existing identity provider with identical data
+         *  already in the database. The identity provider in the database can
+         *  contain more information than the pattern identity provider, 
+         *  but all the pattern information MUST match exactly for a match.
+         *  @param  aContains contains the boolean value in return, ETrue if found,
+         *          EFalse if not
+         *  @param  aPattern the identity provider data to be searched.
+         *  @return KErrNone or other system-wide Symbian error codes.
+         */
+        virtual TInt ContainsIdentityProviderL( TBool& aContains,
+                                                CSenIdentityProvider& aIDP) = 0;
+
+        /**
+        * Notifies all framework plug-ins about certain event
+        * @param aEvent is the event code passed to all plug-ins
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL( const TInt aEvent ) = 0;
+
+        /**
+        * Notifies all framework plug-ins about certain event and
+        * object.
+        * @param aEvent is the event code passed to all plug-ins
+        * @param aArgument is an additional object pointer may be
+        * passed. NULL is also accepted.
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL( const TInt aEvent, 
+                                        TAny* aArgument ) = 0;
+
+
+        /**
+        * Notifies only those frameworks plug-ins, which match
+        * with given framework ID (aFrameworkID)
+        * @param aEvent is the event code passed to certain plug-ins
+        * @param aFrameworkID spesifies which frameworks are need to
+        * be notified. Note, that if aFrameworkID is KNullDesC8 
+        * (zero-length),then all known framework plug-ins are notified
+        * about the event.
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL( const TDesC8& aFrameworkID,
+                                        const TInt aEvent ) = 0;
+
+        /**
+        * Notifies only those frameworks plug-ins, which match
+        * with given framework ID (aFrameworkID) and 
+        * an additional object pointer may be passed
+        * NULL is also accepted
+        * @param aEvent is the event code passed to certain plug-ins
+        * @param aFrameworkID spesifies which frameworks are need to
+        * be notified. Note, that if aFrameworkID is KNullDesC8 
+        * (zero-length),then all known framework plug-ins are notified
+        * about the event.
+        * @param aArgument is an additional object pointer may be
+        * passed. NULL is also accepted.
+        * @return some system-wide error code, if an error occurred
+        */
+        virtual TInt NotifyFrameworksL( const TDesC8& aFrameworkID,
+                                        const TInt aEvent,
+                                        TAny* aArgument ) = 0;
+
+        /**
+        * Calculates the size of service descriptions, in bytes.
+        * Internally, this method calls WriteAsXMLToL() from each
+        * service description instance found inside aArray.
+        *
+        * @param aArray contains the service descriptions, which
+        * size in XML is requested.
+        * @return total amount of bytes that XML representation of
+        *         service descriptions included in aArray take.
+        *
+        * In case of error, this method will leaves and passes on
+        * the system-wide error code in question.
+        */
+        virtual TInt SizeOfServiceDescriptionsL( RWSDescriptionArray& aArray ) = 0;
+        
+        /**
+        * Calculates the size of credentials, in bytes.
+        * Internally, this method calls WriteAsXMLToL() from each
+        * credential instance found inside aArray.
+        *
+        * @param aArray contains the credentials, which size in
+        *               XML is requested.
+        * @return       total amount of bytes that XML representation
+        *               of credentials included in aArray take.
+        *
+        * In case of error, this method will leaves and passes on
+        * the system-wide error code in question.
+        */
+        virtual TInt SizeOfCredentialsL( RSenCredentialArray& aArray ) = 0;
+        virtual TInt SizeOfIdentityProvidersL(const RPointerArray<CSenIdentityProvider>& aArray) = 0;
+
+
+        /**
+        * Getter for WSF-wide string pool. Any subcomponent utilizing
+        * a string pool based API should use this instance, which is
+        * owned by service manager implementation behind this interface.
+        * @return RStringPool reference to string pool owned by the manager
+        *
+        */
+        virtual RStringPool& StringPool() = 0;
+
+        /**
+        * Method attempts to add an entry to the list of active hostlet connection
+        * endpoints.
+        * @param aEndpoint is the identifier, typically some URN, representing the
+        *        endpoint. It is expected to be locally unique. MSenRemoteHostlet
+        *        implementations typically call this method to figure out whether
+        *        the endpoint proposed by actual Hostlet Connection is available
+        *        or not. In case of error, that error is then normally propagated
+        *        all the way back to the public API, so that constructor -- 
+        *        CSenHostletConnection::NewL will leave.
+        * @return KErrNone if add succeeded
+        *         KErrSenEndpointReserved, if the endpoint is already allocated 
+        *         for some other hostlet connection.
+        * Note: KErrSenEndpointReserved is defined in SenHostletConnection.h
+        */
+//        virtual TInt AddActiveHostletConnectionEndpointL(const TDesC8& aEndpoint) = 0;
+
+        /**
+        * Removes entry from the list of active hostlet connection endpoints.
+        * @param aEndpoint is the identifier, typically some URN, representing the
+        *        endpoint. MSenRemoteHostlet impelemtations typically call this method
+        *        when the hostlet connection (server-side session) is being de-allocated.
+        * @return KErrNone if add succeeded
+        *         KErrSenEndpointReserved, if the endpoint is already allocated 
+        *         for some other hostlet connection.
+        * Note: KErrSenEndpointReserved is defined in SenHostletConnection.h
+        */
+//        virtual TInt RemoveActiveHostletConnectionEndpoint(const TDesC8& aEndpoint) = 0;
+
+        virtual TInt NextTransactionId() = 0;
+        
+		virtual TInt CredentialsL( const CSenWSDescription& aPattern,
+								   RSenCredentialArray& aCredentials ) = 0;
+
+		virtual TInt CredentialsL( const CSenWSDescription& aPattern,
+								   const CSenIdentityProvider& aIdP,
+								   RSenCredentialArray& aCredentials ) = 0;
+
+		virtual TInt CredentialsL( const CSenWSDescription& aPattern,
+								   RSenCredentialPtrArray& aCredentials ) = 0;
+
+		virtual TInt CredentialsL( const CSenWSDescription& aPattern,
+								   const CSenIdentityProvider& aIdP,
+								   RSenCredentialPtrArray& aCredentials ) = 0;
+
+		virtual RSenCredentialPtr AddCredentialL( CSenInternalCredential* apCredential,
+		                                           TInt& aErrorTo ) = 0;
+
+		virtual RSenCredentialPtr AddCredentialL( CSenIdentityProvider* apIdP,
+									               CSenInternalCredential* apCredential,
+									               TInt& aErrorTo ) = 0;
+
+		virtual RSenCredentialPtr AddCredentialL( const TDesC8& aCredential,
+		                                           TInt& aErrorTo ) = 0;
+
+		virtual RSenCredentialPtr AddCredentialL( CSenIdentityProvider* apIdP,
+									               const TDesC8& aCredential,
+									               TInt& aErrorTo ) = 0;
+
+		virtual TInt RemoveCredentialsL( const CSenWSDescription& aPattern ) = 0;
+
+		virtual TInt RemoveCredentialsL( const CSenWSDescription& aPattern,
+										 const CSenIdentityProvider& aIdP ) = 0;
+        
+        virtual TInt RemoveCredentialsL(const TDesC8& aProviderId) = 0;
+										
+        virtual TInt RemoveCredentialL( TInt aInternalCredentialId ) = 0; //codescannerwarnings
+        
+        virtual RSenCredentialPtr CredentialL( TInt aInternalCredentialId,
+                                               TInt& aErrorTo ) = 0;
+
+        virtual RSenCredentialPtr UpdateCredentialL( TInt aInternalCredentialId,
+                                                     CSenInternalCredential* apCredential,
+                                                     TInt& aErrorTo ) = 0;
+        
+        virtual RSenCredentialPtr UpdateCredentialL( TInt aInternalCredentialId,
+                                                     const TDesC8& aCredential,
+                                                     TInt& aErrorTo ) = 0;
+										
+        virtual TInt FindMatchingIdentityProviderL( CSenIdentityProvider &aIdp,
+                                                    CSenIdentityProvider*& apMatch ) = 0;
+                                                   
+        virtual TInt UpdateIdentityProviderL( CSenIdentityProvider& aIdp ) = 0;
+        
+        virtual TInt NextConnectionID() = 0;
+    };
+
+#endif // M_SEN_SERVICE_MANAGER_H
+
+// End of File