diff -r 000000000000 -r 62f9d29f7211 webservices/wsframework/inc/msenservicemanager.h --- /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 +#include // RFileLogger +#include // 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 RWSDescriptionArray; +typedef RPointerArray RSenCredentialArray; +typedef RArray 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& 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