diff -r 000000000000 -r 62f9d29f7211 webservices/wsstar/wsstarplugin/inc/wsstarservicesession.h --- /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 +#include +#include +#include "sensoapmessagedom2.h" + +class CWSStarCredentialObserver; +// CONSTANTS +namespace WSStarSession + { + _LIT8(KProviderIDTag, ""); + _LIT8(KProviderIDEndTag, ""); + _LIT8(KTrustAnchorTag, ""); + _LIT8(KTrustAnchorEndTag, ""); + _LIT8(KPOPBase64Tag, ""); + _LIT8(KPOPBase64EndTag, ""); + _LIT8(KTokenTypeTag, ""); + _LIT8(KTokenTypeEndTag, ""); + _LIT8(KSTRTag, ""); + _LIT8(KSTREndTag, ""); + _LIT8(KBinaryTypeTag, ""); + _LIT8(KBinaryTypeEndTag, ""); + + _LIT8(KClusterTypeTag, ""); + _LIT8(KClusterEndTypeTag, ""); + + _LIT8(KServiceInterval, ""); + _LIT8(KServiceIntervalEnd, ""); + + + //related to ticket + _LIT8(KPhoneTimeWhenMTResolvedTag, ""); + _LIT8(KPhoneTimeWhenMTResolvedEndTag, ""); + _LIT8(KCreatedTag, ""); + _LIT8(KCreatedEndTag, ""); + //_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& 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 +