--- /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