webservices/wsstar/wsstarplugin/inc/wsstarservicesession.h
changeset 0 62f9d29f7211
child 23 a1df79fa35b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsstar/wsstarplugin/inc/wsstarservicesession.h	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,337 @@
+/*
+* Copyright (c) 2006-2006 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 WSSTAR_SERVICE_SESSION_H
+#define WSSTAR_SERVICE_SESSION_H
+
+// INCLUDES
+#include "msenremoteserviceconsumer.h"
+#include "msenserviceinvocationframework.h"
+
+#include "wsstarplugin.h"
+#include "senwebservicesession.h"
+#include "wsstarsessionconsumer.h"
+#include <xmlengfilecontainer.h>
+#include <xmlengchunkcontainer.h>
+#include <xmlengelement.h>
+#include "sensoapmessagedom2.h"
+
+class CWSStarCredentialObserver;
+// CONSTANTS
+namespace WSStarSession
+    {
+    _LIT8(KProviderIDTag,                  "<ProviderID>");
+    _LIT8(KProviderIDEndTag,               "</ProviderID>");
+    _LIT8(KTrustAnchorTag,                 "<TrustAnchor>");
+    _LIT8(KTrustAnchorEndTag,              "</TrustAnchor>");
+    _LIT8(KPOPBase64Tag,                   "<POP>");
+    _LIT8(KPOPBase64EndTag,                "</POP>");
+    _LIT8(KTokenTypeTag,                   "<TokenType>");
+    _LIT8(KTokenTypeEndTag,                "</TokenType>");
+    _LIT8(KSTRTag,                          "<STR>");
+    _LIT8(KSTREndTag,                       "</STR>");
+    _LIT8(KBinaryTypeTag,                   "<BinaryType>");
+    _LIT8(KBinaryTypeEndTag,                "</BinaryType>");
+    
+    _LIT8(KClusterTypeTag,                   "<Cluster>");
+    _LIT8(KClusterEndTypeTag,                "</Cluster>");
+    
+    _LIT8(KServiceInterval,             "<ServiceInterval>");
+    _LIT8(KServiceIntervalEnd,          "</ServiceInterval>");
+
+    
+    //related to ticket
+    _LIT8(KPhoneTimeWhenMTResolvedTag,        "<PhoneTimeWhenMTResolved>");
+    _LIT8(KPhoneTimeWhenMTResolvedEndTag,        "</PhoneTimeWhenMTResolved>");
+    _LIT8(KCreatedTag,        "<Created>");
+    _LIT8(KCreatedEndTag,        "</Created>");  
+    //_LIT8(KProviderIdElementLocalName,  "ProviderID");
+    _LIT8(KPOPBase64LocalName,  "POP");
+    _LIT8(KSTRLocalName,  "STR");
+    _LIT8(KBinaryTypeLocalName,  "BinaryType");
+    _LIT8(KTrustAnchorElementLocalName,  "TrustAnchor");
+    _LIT8(KClusterLocalName,        "Cluster");
+    _LIT8(KPhoneTimeWhenMTResolvedLocalName,        "PhoneTimeWhenMTResolved");
+    _LIT8(KCreatedLocalName,        "Created");
+    _LIT8(KTokenType,        "TokenType");
+    }
+
+
+
+// CLASS DECLARATION
+/**
+ * WSStar Service Session.
+ * Represent session between client and service in ws* framework.
+ */
+class CWSStarServiceSession : public CSenWebServiceSession
+    {
+
+friend class CWSStarPlugin;
+
+public: // Constructors and destructor
+
+    static CWSStarServiceSession* NewL(MSIF& aFramework);
+    static CWSStarServiceSession* NewLC(MSIF& aFramework);
+
+    virtual ~CWSStarServiceSession();
+
+    // From SenServiceSession
+    virtual MSenRemoteServiceConsumer* RemoteConsumerL(
+                                                const TDesC8& aSenderID);
+    
+    virtual TBool Matches(MSenServiceDescription& aPattern);
+    virtual TInt ScoreMatchL(MSenServiceDescription& aPattern);
+    
+    virtual void WriteExtensionsAsXMLToL(RWriteStream& aWriteStream);
+
+
+    //From SenWebServiceSession
+    virtual TInt SendL( const TDesC8& aMessage, 
+                        const TDesC8& aTransportProperties,
+                        MSenRemoteServiceConsumer& aConsumer,
+                        TInt& aTxnId,
+                        HBufC8*& aRevalidationError );
+                        
+    virtual TInt SubmitL(const TDesC8& aMessage, 
+                         const TDesC8& aTransportProperties,
+                         MSenRemoteServiceConsumer& aConsumer,
+                         HBufC8*& aResponse);
+
+    virtual TInt SubmitSoapL(const TDesC8& aSoapMessage, 
+                             const TDesC8& aTransportProperties,
+                             MSenRemoteServiceConsumer& aConsumer,
+                             HBufC8*& aResponse);
+
+    virtual TInt SendSoapL( const TDesC8& aSoapMessage, 
+                            const TDesC8& aTransportProperties,
+                            MSenRemoteServiceConsumer& aConsumer,
+                            TInt& aTxnId,
+                            HBufC8*& aRevalidationError );
+    
+    virtual void StartTransaction();                             
+    virtual void TransactionCompleted();
+    virtual TInt InitializeFromL(MSenServiceDescription& aDescription, CWSStarPolicyHandler* aPolicyHandler = NULL);
+
+
+    
+    /**
+    add consumer. Eeach session has multiple consumers.From 3rd parties point of view
+    its mean 2 connection per the same service description.Consumers are distinguished by addressing id (MessagesID and RelatesTo)
+    */
+    virtual TInt AddConsumerL(MSenRemoteServiceConsumer& aConsumer);
+    
+    /**
+    remove consumer
+    */
+    virtual TInt RemoveConsumerL(MSenRemoteServiceConsumer& aConsumer);
+    
+    /**
+    Framework specific method. Process message before sending to network
+            In other words add specific headers, and store correlation info in proper consumer
+    */
+    virtual TInt MessageForSendingL( const TDesC8& aBody,
+                                     const TDesC8& aSenderID,
+                                     CSenSoapMessage*& aMessage ); //out param
+
+    /**
+    During parsing Inbound new SoapMessage is created, based on active soap version.
+    Method is called by framework
+    */
+    virtual TInt NewMessageL( CSenSoapMessage*& aMessage );
+    
+    
+    //virtual TInt ParseResponseL(const TDesC8& aResponse,CSenSoapMessage*& aMessage);
+    
+    virtual TInt ParseMessageL( CSenSoapMessage& aSOAPMessage );
+
+
+    //aConsumer is not used, becouse session holds many consumers, and first has to establish correct one
+    virtual TInt SendSoapMessageToConsumerL( CSenSoapMessage* apMessage, 
+                                             const TInt aTxnId,
+                                             MSenRemoteServiceConsumer& aConsumer,
+                                             MSenProperties* aResponseTransportProperties );
+    
+
+    virtual TInt SetTransportPropertiesL( const TDesC8& aProperties,
+                                          MSenRemoteServiceConsumer& aConsumer );
+
+    //in WS* and SCHarF methiod disabled.
+    //virtual void SetFrameworkHeadersL(CSenSoapMessage& aMsg);
+    
+    
+    virtual TInt HandleSoapFaultL( CSenSoapMessage* apSOAPMessage,
+                                   HBufC8*& aResponse);
+
+    virtual TInt HandleSoapFaultL( CSenSoapMessage* apSOAPMessage,
+                                   const TInt aErrorCode,
+                                   const TInt aTxnId,
+                                   MSenRemoteServiceConsumer& aConsumer,
+                                   MSenProperties* aTransportProperties );
+
+    virtual TBool IsExpiredL();
+    /**
+     * Clear credential for current session , make it invalid.
+     * @since S60 5.0
+     */
+    void ClearCredentialL();
+    
+    
+    /**
+     * Share token. Copy SCT and MT into new star session
+     * @since S60 5.0
+     */
+    TInt ShareTokenWithL(CWSStarServiceSession* aWSStarSessionDst, TBool& aMTwasReplaceBySCT, TBool aSeekSCT);
+    
+    
+    /**
+     * Getter of Provider ID (STS which represents this session)
+     *
+     * @return TDesC8 id of provider
+     * @since S60 5.0
+     */
+    
+    /**
+    * Overload addcredential from WebServiceSession. Calucate also state, 
+    * @since S60 5.0
+    */
+    void AddCredentialL(const TDesC8& aSecurity, TTime aValidUntil);
+    void AddCredentialL(RSenCredentialPtr aCredentialPtr, TTime aValidUntil);
+    TPtrC8 ProviderID();
+    void SetTrustAnchorL(const TDesC8& aURI);
+    TPtrC8 TrustAnchor();
+    TInt ComputeStatusL();
+    void SetSessionContext(CWSStarSessionContext* aContext);
+    CWSStarSessionContext* SessionContext();
+    TInt UpdatePolicyL(CWSStarPolicyHandler* aPolicyHandler, MSenServiceDescription* aSD);
+    
+    void AddSecurityTokenToContextL();
+
+    void AddPropertiesFromSessionContextToCredentialL();
+    
+    virtual void CredentialChanged(TSenCredentialChange aChange, TAny* aPointer);
+    void ActiveTicketObserverL();
+    //virtual TInt RefreshMTL(HBufC8*& aErrorMessage);
+    TInt RevalidateMobileTicketIfExpiredL(HBufC8*& aErrorMessage);
+    TBool ExistConsumerL();
+
+    // Add ProviderID to primary keys (in addition to Endpoint, Contract and FrameworkID):
+    TBool HasEqualPrimaryKeysL( MSenServiceDescription& aCandidate ); 
+
+	/**
+	 * DetachCredentialL
+	 *
+	 * This function  invalidates the session by deleting the credential
+	 * This also call setStatusL to recompute the status
+	 */
+	void DetachCredentialsL() ;	
+	TBool AmIHostletSession();
+
+private: 
+       
+    /**
+    * C++ default constructor.
+    */
+    CWSStarServiceSession(TDescriptionClassType aType, MSIF& aFramework);
+
+    /**
+    * By default Symbian 2nd phase constructor is private.
+    */
+    void ConstructL();
+    
+    // New functions
+    
+    
+    /**
+    * To obtain consumer during processing INBOUND. We have to dispatch using wsa:RelatesTo
+    */
+    TInt SessionConsumerL(CWSStarMessageContext*& aMessage,
+                          CWSStarSessionConsumer*& aSessionConsumer);
+    
+    /**
+    * To obtain consumer during processing OUTBOUND.
+    */
+    TInt SessionConsumerL( const TDesC8& aSenderID, CWSStarSessionConsumer*& aSessionConsumer);
+    TInt CanHandleErrorL();
+    void CreateAndParseSoapMessageL(const TDesC8& aSoapMessage, CSenSoapMessage*& aMessage, HBufC8*& aBody);
+    HBufC8* ApplyTransportPropertiesL(const TDesC8& aTransportProperties);
+    void PrepareOutCtxL(const TDesC8& aTransportProperties);
+    TBool HasSuperClass( TDescriptionClassType aType );
+   // TBool AmIHostletSession();
+    void FindAndShareSCTL();
+    
+    
+    
+    
+    void ParseToSoapMessage2L( const TDesC8& aSoapMessage, MSenRemoteServiceConsumer& aConsumer, TInt& aTxnId );
+    
+    TInt ListBinaryElementsL( RArray<TXmlEngElement>& aElementArray, TXmlEngElement& aElement );
+    
+    virtual void FillCredentialIdentifierL(CSenCredentialIdentifier& aIdentifier);
+    
+    CSenIdentityProvider* LookupIdentityProviderL();
+    void VerifyPermissionL();
+    void ClearCredentialPropertiesFromContext();
+    // Add ProviderID to primary keys (in addition to Endpoint, Contract and FrameworkID):
+    //TBool HasEqualPrimaryKeysL( MSenServiceDescription& aCandidate ); 
+
+		void ReattachCredentialsL() ;
+    
+private: // Data
+    
+    CWSStarMessageContext* iOutContext;//owned, live only within one sending
+    CWSStarMessageContext* iInContext;//owned, live only within one sending
+    
+    CWSStarSessionContext* iSessionContext;//owned
+    
+    
+    
+    //trust anchor is a pointer to providerID.
+    //ProviderId identify SD which represent STS, and in order to distinguis who validate whom;
+    //  STS has providerID which is pointed by trustAnchor in validatet WebService
+    //  Unfortuantely webService inherits same classes as STS (it is still XmlSD) so webservice has both TrustAnchor 
+    //  and ProviderId which are equal
+    HBufC8* iTrustAnchor;
+    
+    //to keep transaction chain
+    HBufC8* ipReceivedMessageIdInTrans;//owned
+    
+    TBool  iMessageThread;
+    TInt iSubmitState;
+    TInt iRetryCounter;
+    TInt iRenewCounter;
+    TInt iRedirectCounter;
+    HBufC8* iProviderID;
+    HBufC8* iTransProp;
+    TTime iClientTime; 
+    TTime iServerTime;
+    CWSStarCredentialObserver* iTicketObs;
+    };
+    
+#endif // WSSTAR_SERVICE_SESSION_H
+
+// End of File
+