webservices/wsframework/inc/senservicesession.h
changeset 0 62f9d29f7211
--- /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 <e32base.h>
+#include <e32des8.h>
+#include <e32std.h>
+
+#include "senwsdescription.h"
+#include <SenFacet.h>
+
+#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<MSenRemoteServiceConsumer> 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