webservices/wsframework/inc/senwebservicesession.h
changeset 0 62f9d29f7211
child 29 5743aa3a72c3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsframework/inc/senwebservicesession.h	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,312 @@
+/*
+* 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_WEB_SERVICE_SESSION_H
+#define SEN_WEB_SERVICE_SESSION_H
+
+//  INCLUDES
+#include "senservicesession.h"
+#include "seninternalcredential.h"
+
+// FORWARD DECLARATIONS
+class MSenServiceConsumer;
+class MServiceDescription;
+class CSenCredential;
+class CSenSoapMessage;
+
+// CLASS DECLARATION
+class CSenWebServiceSession : public CSenServiceSession,
+                              public MSenCredentialObserver
+    {
+    public: // Destructor
+        IMPORT_C virtual ~CSenWebServiceSession();
+
+        // New functions
+        IMPORT_C virtual TInt InitializeFromL(MSenServiceDescription& aServiceDescription);
+
+        /**
+        * Computes the status of this session (checks the credentials).
+        * @return the status code, one of the following:
+        * 
+        */
+        IMPORT_C virtual TInt ComputeStatusL();
+
+        /*
+        * Computes the status of this session and returns the status.
+        * @return ETrue, if this session is expired and has invalid credentials
+        *         EFalse, if this session is is ready and has valid credentials
+        */
+        IMPORT_C virtual TBool IsExpiredL(); // Remove, not called from anywhere
+
+        IMPORT_C virtual TInt AddCredentialL(CSenCredential& aCredential);
+        IMPORT_C virtual TInt ConstructSecurityTokenL(CSenCredential& aCredential,
+                                                      HBufC8*& aToken);
+
+        IMPORT_C virtual TInt NewMessageL(CSenSoapMessage*& aMessage);
+        IMPORT_C virtual TInt MessageForSendingL(const TDesC8& aBody,
+                                                 const TDesC8& aSenderID,
+                                                 CSenSoapMessage*& aMessage);
+
+        IMPORT_C virtual TInt ParseResponseL(const TDesC8& aResponse,
+                                             HBufC8*& aParsed);
+
+
+        IMPORT_C virtual CSenXmlReader* XmlReader();
+        IMPORT_C virtual TInt ParseResponseL(const TDesC8& aResponse,
+                                         CSenSoapMessage*& aMessage);
+
+        IMPORT_C virtual TInt ParseMessageL(CSenSoapMessage& aSOAPMessage);
+
+        /**
+        * Adds a consumer. Takes ownership!
+        * @return KErrNone if no errors, otherwise some system-wide errorcode
+        */
+        IMPORT_C virtual TInt AddConsumerL(MSenRemoteServiceConsumer& aConsumer);
+        IMPORT_C virtual MSenRemoteServiceConsumer* Consumer();
+
+        /**
+        * Return an array in which the consumers (clients) of this ServiceSession
+        * reside. 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.
+        * @param    aConsumers  List of the current consumers. Owned by
+        *           ServiceSession.
+        * Ownership of the aConsumers is NOT transfered to the caller
+        * @return TInt - a KErrNone or error
+        */
+        IMPORT_C virtual TInt Consumers(RServiceConsumerArray& aConsumers) const;
+
+        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 );
+
+
+        IMPORT_C virtual TInt SubmitSoapL(const TDesC8& aSoapMessage, 
+                                          const TDesC8& aTransportProperties,
+                                          MSenRemoteServiceConsumer& aConsumer,
+                                          HBufC8*& aResponse);
+
+        IMPORT_C virtual TInt SendSoapL( const TDesC8& aSoapMessage, 
+                                         const TDesC8& aTransportProperties,
+                                         MSenRemoteServiceConsumer& aConsumer,
+                                         TInt& aTxnId,
+                                         HBufC8*& aRevalidationError );
+
+        /**
+        * Method checks if this session is ready to interact with (remote)
+        * service. Typically, if service invocation framework requires 
+        * credentials, they are checked inside this method.
+        * @return boolean indicating if this session is ready (ETrue) or
+        *         not (EFalse) to interact with (possibly remote) service.
+        */
+        IMPORT_C virtual TBool IsReadyL();
+
+        // SOAP processing callback functions:
+        IMPORT_C virtual TInt SendSoapMessageToConsumerL( CSenSoapMessage* apMessage,
+                                                          const TInt aTxnId,
+                                                          MSenRemoteServiceConsumer& aConsumer,
+                                                          MSenProperties* aResponseTransportProperties );
+
+        /**
+        * This synchronous method (pair for SubmitL) checks if the service 
+        * invocation framework (this session) can handle this fault, and 
+        * if not, then an attempt is made to delivered this fault to session
+        * consumer.
+        *
+        * @param aSoapMessage is the SOAP message representing fault.
+        * @param aResponse is where either SOAP fault OR - if some
+        * framework (like ID-WSF) was able to handle this fault (recover)
+        *        - the valid response from the service, achieved
+        *        by re-submitted request (for example to new endpoint,
+        *        if the handled fault was "endpoint moved" -type fault.
+        * @param aResponseTransportProperties will contain the properties of
+        * handled error (either for fault OR valid response -transaction)
+        *        
+        * 
+        * @return KErrSenSoapFault, if this error (fault) could not be handled.
+        *         In this case, aResponse contains (extracted) SOAP fault
+        *         element.
+        *         KErrNone, if recovery was possible and successful, and
+        *                   then aResponse contains valid response from 
+        *                   the service. The SOAP fault, which was taken
+        *                   care here - between (remote) service and
+        *                   framework - remains thus "hidden" from actual 
+        *                   web service consumer.
+        *         KErrSenSoapFault, if fault could not be handled. Now
+        *                   aResponse will contain the extracted SOAP
+        *                   fault element as UTF-8 descriptor (TDesC8)
+        *         KErrSenInternal, the SOAP fault could not be found from
+        *                   aSoapMessage.
+        *         KErrNotFound - the consumer could not be found.
+        */
+        IMPORT_C virtual TInt HandleSoapFaultL(CSenSoapMessage* apSoapMessage,
+                                               HBufC8*& aResponse /*,
+                                               CSenTransportProperties*& aResponseTransportProperties */);
+       
+        /**
+        * This asynchronous method (pair for SendL) checks if the service 
+        * invocation framework (this session) can handle this fault, and 
+        * if not, then an attempt is made to delivered this fault to 
+        * session consumer.
+        *
+        * @param aSoapMessage is the SOAP message representing fault.
+        * @param aErrorCode, is the error code received from transport
+        * @param aTxnId is the transaaction id from transport, which 
+        *        can be used to map this error response to consumer's 
+        *        request.
+        * @param aConsumer is the consumer which was calling the transport
+        *        and originally sent the request.
+        * @param aResponseTransportProperties includes response properties
+        * for the handled error
+        * @return KErrNone, if error was either succesfully handled or
+        *         processed (delivered to consumer) The SOAP fault, which 
+        *         was taken care between (remote) service and ID-WSF framework
+        *         is hereby "hidden" from actual web service consumer.
+        */
+        IMPORT_C virtual TInt HandleSoapFaultL(CSenSoapMessage* apSoapMessage,
+                                           const TInt aErrorCode,
+                                           const TInt aTxnID,
+                                           MSenRemoteServiceConsumer& aConsumer,
+                                           MSenProperties* aResponseTransportProperties);
+
+
+        // From MSenServiceSession:
+        IMPORT_C TInt SendToConsumerL(HBufC8* aMessage,
+                                      const TInt aTxnId,
+                                      MSenRemoteServiceConsumer& aConsumer,
+                                      MSenProperties* aResponseTransportProperties = NULL); 
+
+        IMPORT_C TInt SendErrorToConsumerL(const TInt aErrorCode,
+                                           HBufC8* apError,
+                                           const TInt aTxnId,
+                                           MSenRemoteServiceConsumer& aConsumer,
+                                           MSenProperties* aResponseTransportProperties = NULL); 
+
+        IMPORT_C TInt HandleErrorL(const TInt aErrorCode,
+                                   HBufC8* apError,
+                                   const TInt aTxnId,
+                                   MSenRemoteServiceConsumer& aConsumer,
+                                   MSenProperties* aResponseTransportProperties = NULL); 
+
+        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 );
+
+        IMPORT_C virtual void SetFrameworkHeadersL(CSenSoapMessage& aMsg);
+        IMPORT_C virtual TInt SetUserNameL(TDesC8& aUsername);
+
+        IMPORT_C virtual TPtrC8 Endpoint();
+        IMPORT_C virtual TPtrC8 Contract();
+        IMPORT_C virtual TPtrC8 FrameworkId();
+        IMPORT_C virtual TPtrC8 FrameworkVersion();
+        IMPORT_C virtual const TTime& ValidUntilL();
+        IMPORT_C virtual void SetContractL(const TDesC8& aContract);
+        IMPORT_C virtual void SetEndPointL(const TDesC8& aURI);
+        IMPORT_C virtual void SetSecurityL(const TDesC8& aSecurity);
+        IMPORT_C virtual void SetCredentialPtrL(RSenCredentialPtr aCredentialPtr);	//codescannerwarnings
+        IMPORT_C virtual void FillCredentialIdentifierL(CSenCredentialIdentifier& aIdentifier);
+        IMPORT_C virtual void StartTransaction();
+        IMPORT_C virtual void TransactionCompleted();
+        IMPORT_C virtual void WriteAsXMLToL(RWriteStream& aWriteStream);
+        IMPORT_C virtual TTimeIntervalMicroSeconds ClientServerInterval();
+        IMPORT_C virtual void SetClientServerIntervalL(TTimeIntervalMicroSeconds aInterval);	//codescannerwarnings
+        IMPORT_C TBool HasConsumer() const;
+
+        
+        // From CSenWSDescription:
+        IMPORT_C virtual TBool HasSuperClass( TDescriptionClassType aType );
+        IMPORT_C virtual TInt SetTransportCueL(const TDesC8& aCue);
+        IMPORT_C virtual TPtrC8 TransportCue();
+
+        IMPORT_C TInt TryToSearchValidCredentialL();	//codescannerwarnings
+        
+        IMPORT_C virtual void CredentialChanged(TSenCredentialChange aChange, TAny* aPointer);
+        
+        // from MSenRemoteServiceSession
+//        IMPORT_C TInt RemoveConsumerL(MSenRemoteServiceConsumer& aConsumer);
+
+        IMPORT_C TInt GetCredentialIdL();
+        
+        IMPORT_C TInt AddCredentialObserverL(CSenInternalCredential& aCredential);
+
+    protected:
+        
+        /**
+        * C++ default constructor.
+        */
+        IMPORT_C CSenWebServiceSession( TDescriptionClassType aType,
+                                        MSIF& aFramework);
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */                              
+        IMPORT_C void ConstructL();
+    
+        IMPORT_C HBufC8* SecurityL();
+        
+        IMPORT_C TBool HasSecurity();
+        
+        void SetCredentialIdL(TInt aCredentialId);	//codescannerwarnings
+        
+    private:
+        TInt HandleBodyWithoutParsingL(CSenSoapMessage& aMessage, const TDesC8& aResponse);
+    
+    protected: // Data
+        TTimeIntervalMicroSeconds iClientServerInterval;
+
+         // Data, which also subclasses can access
+        TTime iValidUntil;
+        
+        RSenCredentialPtr  iCredentialPtr;
+        HBufC8* iTransportCue; 
+
+    private: // Data
+        HBufC8* iEndpoint;
+        HBufC8* iContract;
+        HBufC8* iFrameworkId;
+       
+
+        // credentials as xml
+        HBufC8* iSecurity;
+    };
+
+#endif // SEN_WEB_SERVICE_SESSION_H
+
+// End of File