diff -r 000000000000 -r 62f9d29f7211 webservices/wsframework/inc/senservicesession.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wsframework/inc/senservicesession.h Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,327 @@ +/* +* 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 SEN_SERVICE_SESSION_H +#define SEN_SERVICE_SESSION_H + +// INCLUDES +#include +#include +#include + +#include "senwsdescription.h" +#include + +#include "msenremoteservicesession.h" +#include "msenservicesession.h" + +#include "msenserviceinvocationframework.h" +#include "MSenServiceConsumer.h" +#include "msenremoteserviceconsumer.h" +#include "msencoreservicemanager.h" + +// CONSTANTS +_LIT8(KMessageThread, "urn:com.nokia.serene.facet.message-thread"); + +// DATA TYPES +typedef RPointerArray RServiceConsumerArray; + +// FORWARD DECLARATIONS +class CSIF; +class CSenTransportBase; +class MSenRemoteHostlet; + +// CLASS DECLARATION +class CSenServiceSession : public CSenWSDescription, + public MSenRemoteServiceSession, + public MSenServiceSession + { + public: + + // New functions + + IMPORT_C virtual TInt InitializeFromL(MSenServiceDescription& aServiceDescription); + + /** + * Parse the service session related information out of a message + * sent by the service. Default is to do nothing. + * Subclasses should override this. + * @param aString containing a message received from a service. + * @param String with parsed data + * @return TInt - a KErrNone or error + */ + IMPORT_C virtual TInt ParseResponseL(const TDesC8& aInput, + HBufC8*& aOutput); + + /** + * Ask the core service manager to save this service session into + * XML DAO database. + * + * This convenience method can be called from within other methods of + * this class or subclass, or by some service invocation framework + * implementations. + * Leave codes: Symbian system-wide error codes. + */ + IMPORT_C virtual void SaveL(); + + /** + * This getter method does not trigger any execution, it just returns + * the current status of this session. + * @return TInt the status of this service session. + */ + IMPORT_C virtual TInt StatusL(); + + /** + * Compute the status of the ServiceSession. If the status + * changes to (or from) of "KSenConnectionStatusReady" + * the service consumers are notified. Internally, method + * calls ComputeStatusL(). + * @return TInt status code indicating the current status, + * which may have changed when this method was executed. + * + */ + IMPORT_C virtual TInt SetStatusL(); + + /** + * Method computes the current status of this service session. + * Subclasses typically override this. Method does NOT set + * the internal status variable of this class and so it NEITHER + * notifies consumer(s) about the computed result. + * @return integer (TInt), which indicates current, but only + * computed status of this service session. + */ + IMPORT_C virtual TInt ComputeStatusL(); + + /** + * Adds a service consumer for this session. + * + * This service consumer will be notified of service responses + * (to it's own queries) and of all status changes. + * This method needs to be implemented -- often some + * service invocation framework specific subclass. + * @param aConsumer is the service consumer object that exposes + * the MSenRemoteServiceConsumer interface. Typically some + * Symbian server-side session, which represents "remote" + * consumer application, separate process behind IPC boundary. + * @return KErrNone or some system-wide error code + */ + virtual TInt AddConsumerL(MSenRemoteServiceConsumer& aConsumer) = 0; + + + // from MSenRemoteServiceSession + IMPORT_C TInt RemoveConsumerL(MSenRemoteServiceConsumer& aConsumer); + + /** + * Return a iterator over a list with the consumers (clients) of this + * ServiceSession. + * This method is called from within several other methods of the abstract + * ServiceSession class. + * This method should be implemented by a subclass + * specific to a ServiceInvocationFramework implementation. + * Ownership of the aConsumers is NOT transfered to the caller. + * @param aConsumers List of the current consumers. + * Owned by ServiceSession. + * @return TInt - a KErrNone or error + */ + virtual TInt Consumers(RServiceConsumerArray& aConsumers) const = 0; + + // Functions from base classes + + // from MSenRemoteServiceSession + + IMPORT_C virtual TInt SetTransportPropertiesL(const TDesC8& aProperties, + MSenRemoteServiceConsumer& aConsumer); + + IMPORT_C virtual TInt TransportPropertiesL(HBufC8*& aProperties, + MSenRemoteServiceConsumer& aConsumer); + + IMPORT_C virtual TInt SubmitL(const TDesC8& aMessage, + const TDesC8& aTransportProperties, + MSenRemoteServiceConsumer& aConsumer, + HBufC8*& aResponse); + + IMPORT_C virtual TInt SendL( const TDesC8& aMessage, + const TDesC8& aTransportProperties, + MSenRemoteServiceConsumer& aConsumer, + TInt& aTxnId, + HBufC8*& aRevalidationError ); + + virtual TInt SubmitSoapL(const TDesC8& aSoapMessage, + const TDesC8& aTransportProperties, + MSenRemoteServiceConsumer& aConsumer, + HBufC8*& aResponse) = 0; + + virtual TInt SendSoapL( const TDesC8& aSoapMessage, + const TDesC8& aTransportProperties, + MSenRemoteServiceConsumer& aConsumer, + TInt& aTxnId, + HBufC8*& aRevalidationError ) = 0; + + // from MSenServiceDescription + IMPORT_C virtual TBool Matches(MSenServiceDescription& aPattern); + IMPORT_C virtual TInt HasFacetL(const TDesC8& aURI, TBool& aHasFacet); + IMPORT_C virtual TInt FacetValue(TDesC8& aURI, HBufC8*& aValueTo); + IMPORT_C virtual TInt AddFacetL(const CSenFacet& aFacet); + IMPORT_C virtual TInt SetFacetL(const CSenFacet& aFacet); + IMPORT_C virtual TInt RemoveFacet(const TDesC8& aURI); + IMPORT_C virtual TInt FacetsL(RFacetArray& aFacetArray); + IMPORT_C virtual TInt ScoreMatchL(MSenServiceDescription& aPattern); + + // from MSenRemoteServiceSession + IMPORT_C virtual TBool IsReadyL(); // This method equals with isValid() in Java ref-impl + IMPORT_C virtual TInt CompleteServerMessagesOnOffL(const TBool& aCompleteOnOff); + + // from CSenWSDescription (overrides) + virtual void SetContractL(const TDesC8& aContract) = 0; + virtual void SetEndPointL(const TDesC8& aEndPoint) = 0; + virtual TPtrC8 FrameworkVersion() = 0; + + // implement the MSenRemoteServiceSession: + IMPORT_C virtual TPtrC8 Endpoint(); + IMPORT_C virtual TPtrC8 Contract(); + IMPORT_C TPtrC8 FrameworkId(); + + IMPORT_C virtual MSenRemoteServiceConsumer* RemoteConsumerL(const TDesC8& aSenderID); + IMPORT_C virtual void WriteExtensionsAsXMLToL(RWriteStream& aWriteStream); + + IMPORT_C MSenServiceDescription::TDescriptionClassType DescriptionClassType(); + IMPORT_C MSenServiceDescription& AsServiceDescription(); + + IMPORT_C void SetTransportL(CSenTransportBase* aTransport); + IMPORT_C MSenTransport* Transport() const; + IMPORT_C MSenTransport& TransportL(MSenRemoteServiceConsumer& aRequestor); + + // Destructor + IMPORT_C virtual ~CSenServiceSession(); + + + // From MSenServiceSession: + virtual TInt SendToConsumerL(HBufC8* apMessage, + const TInt aTxnId, + MSenRemoteServiceConsumer& aConsumer, + MSenProperties* aResponseTransportProperties = NULL) = 0; + + virtual TInt SendErrorToConsumerL(const TInt aErrorCode, + HBufC8* apError, + const TInt aTxnId, + MSenRemoteServiceConsumer& aConsumer, + MSenProperties* aResponseTransportProperties = NULL) = 0; + + + /** + * In addition of meeting the MSenServiceSession interface, service session + * extends this method to be available for the sessions (frameworks) themselves: + * any session class implementation should override this method in order to + * provide a possibility for the service invocation framework to recover from + * particular (SOAP and other) errors. + * + * @param aErrorCode is the error code identifying this error + * @param aError is the error message - actual response from service + * @param aConsumer is the consumer of the service. It could + * be CSenClientSession or some subclass of CSenInternalConsumer + * (like in Liberty ID-WSF it could be authentication service client + * or discovery service client). + * @param aTxnId is the transaction id of this async responsed error. + * @param aResponseTransportProperties includes the response properties + * from transport + * @return KErrNone if error message was successfully delivered to + * consumer(s). Otherwise, some system-wide error code. + */ + + virtual TInt HandleErrorL(const TInt aErrorCode, + HBufC8* apError, + const TInt aTxnId, + MSenRemoteServiceConsumer& aConsumer, + MSenProperties* aResponseTransportProperties = NULL) = 0; + + + + // from MSenRemoteHostlet: + + IMPORT_C TInt SetHostletL(MSenRemoteHostlet* aHostlet); + IMPORT_C MSenRemoteHostlet* Hostlet() const; + + // From MSenServiceSession: + IMPORT_C virtual TInt SendToHostletL(MSenRemoteHostlet& aReceiver, + const TDesC8& aMessage, + const TInt aTxnId, + MSenRemoteServiceConsumer& aFrom, + MSenProperties* aProperties); + + IMPORT_C virtual TInt ProvideHostletResponseL( MSenRemoteHostlet& aProvider, + const TInt aTxnId, + const TInt aServiceCode, + const TDesC8& aRecipientsConsumerId, + CSenChunk& aMessageChunk ); + + // From CSenWSDescription: + IMPORT_C virtual TBool HasSuperClass( TDescriptionClassType aType ); + IMPORT_C virtual TInt SetTransportCueL(const TDesC8& aCue); + IMPORT_C virtual TPtrC8 TransportCue(); +//new + IMPORT_C virtual TInt RefreshMTL(HBufC8*& aRevalidationError); + protected: + + /** + * C++ default constructor. + */ + IMPORT_C CSenServiceSession(TDescriptionClassType aType, MSIF& aFramework); + + /** + * BaseConstructL is made available for subclasses, since they should call + * it in their own ConstructL or BaseConstructL method. + */ + IMPORT_C void BaseConstructL(); + + // Filelogging method: + IMPORT_C RFileLogger* Log() const; + + /** + * Note that this non-virtual method allows subclasses to notify about following + * *pre-state* kind of status codes ONLY (from SenServiceConnection.h): + * + * const TInt KSenConnectionStatusAuthentication = 3; // pre-state + * const TInt KSenConnectionStatusDiscovery = 4; // pre-state + * const TInt KSenConnectionStatusMetadataExchange = 5; // pre-state + * + * In other words, this method cannot be used in credential state notfications (valid / expired). + */ + //void SendStatusToConsumersL(const TInt aStatus); + TInt iStatus; + + protected: // Data + MSIF& iFramework; // Not owned + RServiceConsumerArray iConsumerList; + MSenRemoteHostlet* ipHostlet; // Not owned + + private: // Data + //TInt iStatus; + RFacetArray iFacets; // Owned + CSenTransportBase* ipTransport; // Owned + TBool iTransportOwned; + }; + +#endif // SEN_SERVICE_SESSION_H + +// End of File \ No newline at end of file