diff -r 000000000000 -r 62f9d29f7211 webservices/wshostlettransportplugin/inc/senhostlettransportplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webservices/wshostlettransportplugin/inc/senhostlettransportplugin.h Thu Jan 07 16:19:19 2010 +0200 @@ -0,0 +1,190 @@ +/* +* 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_HOSTLET_TRANSPORT_PLUGIN +#define SEN_HOSTLET_TRANSPORT_PLUGIN + +#include +#include +#include + +#include + +#include "sentransport.h" +#include "senpointermap.h" // from Utils\inc + + +// CONSTANTS +_LIT8(KSenHostletTransportUriScheme, "hostlet"); + +// FORWARD DECLARE +class MSenProvider; +class CSenProvider; +class CSenActiveHostletRequest; +class CSenHostletRequest; +class CSenHostletResponse; +class CSenSyncRequester; +class CSenLayeredXmlProperties; +class CSenTransportProperties; +class MSenTransportContext; + +// TYPEDEFS +typedef RSenPointerMap RConsumerMap; +typedef RSenPointerMap RSessionMap; + +typedef RSenPointerMap RLocalRequestMap; + + + +class CSenHostletTransportPlugin : public CSenTransport + { + public: + + // Constructors: + static CSenHostletTransportPlugin* NewL(CSenTransportContext* apCtx); + static CSenHostletTransportPlugin* NewLC(CSenTransportContext* apCtx); + + // Destructor: + virtual ~CSenHostletTransportPlugin(); + + // from MSenTransport + virtual TInt SubmitL(const TDesC8& aEndpoint, + const TDesC8& aMessage, + const TDesC8& aTransportProperties, + HBufC8*& aResponse, + MSenRemoteServiceConsumer& aConsumer); + + virtual TInt SendL(const TDesC8& aEndpoint, + const TDesC8& aMessage, + const TDesC8& aTransportProperties, + MSenServiceSession& aReplyTo, + MSenRemoteServiceConsumer& aConsumer, // "addressee", could be CSenIdentifier + TInt& aTxnId); + + virtual TInt SetPropertiesL(const TDesC8& aProperties, + MSenLayeredProperties::TSenPropertiesLayer aTargetLayer, + MSenRemoteServiceConsumer* aConsumer); + virtual TInt PropertiesL(HBufC8*& aProperties); + virtual TInt CompleteTransaction(const TInt aTxnId, const TInt aStatus = KErrNone); + virtual TInt CancelTransaction(const TInt aTxnId); + virtual TPtrC8 CSenHostletTransportPlugin::UriSchemeL(); + + virtual MSenProperties& PropertiesL(); + + //RConsumerMap ConsumerMap(); + //RSessionMap SessionMap(); + + private: + void ConstructL(); + CSenHostletTransportPlugin(CSenTransportContext* apCtx); + + // Helper, to locally "proxy" the provider, which was invoked *last* time + MSenProvider& ProviderL(const TDesC8& aEndpoint); + + private: // member data + CSenSyncRequester* ipRequester; + CSenProvider* iInvokedProvider; + TInt iStatusCode ; + TInt iTransactionID; + //RConsumerMap iConsumerMap; // values owned (TxnIds), keys not (consumers) + //RSessionMap iSessionMap; // values NOT owned (TxnIds), neither keys (sessions) + RLocalRequestMap iRequestMap; + CSenLayeredXmlProperties* ipLayeredXmlProperties; + } ; + +class CSenActiveHostletRequest : public CActive + { + friend class CSenHostletTransportPlugin; + + + + public: + + enum TLocalRequestState + { + EInvokeService = 1, + ECompleteTransaction + }; + + // Standard 2 phased constructor + static CSenActiveHostletRequest* NewLC(const TDesC8& aEndpoint, + MSenServiceSession& aReplyTo, + MSenRemoteServiceConsumer& aConsumer, + TInt aTxnId, + RLocalRequestMap& aRequestMap, + MSenTransport& aParent, + MSenTransportContext& aParentCtx); + + // C++ destructor + virtual ~CSenActiveHostletRequest(); + + MSenServiceSession& Session() const; + MSenRemoteServiceConsumer& Consumer() const; + TInt TxnId() const; + // TPtrC8 TransportProperties() const; + RLocalRequestMap& RequestMap(); + + // This method is called when txn is ready to be completed + // Note that this sets this AO in active state(!) + TInt Complete(TRequestStatus*& aStatus, TInt aCompletionCode = KErrNone); + + virtual void RunL(); + virtual void DoCancel(); + virtual TInt RunError(TInt aError); + + private: + // 2nd phase constructor + void ConstructL(); + + // C++ constructor + CSenActiveHostletRequest(const TDesC8& aEndpoint, + MSenServiceSession& aReplyTo, + MSenRemoteServiceConsumer& aConsumer, + TInt aTxnId, + RLocalRequestMap& aRequestMap, + MSenTransport& aParent, + MSenTransportContext& aParentCtx); + + CSenChunk* CSenActiveHostletRequest::FindChunkL(const TInt aTxnId, TInt& aIndex) ; + + CSenTransportProperties* NewPropertiesByTypeL( MSenProperties::TSenPropertiesClassType aType, const TDesC8& aPropertiesAsXml ); + + private: // Data + const TDesC8& iEndpoint; + TInt iCompletionCode; + MSenServiceSession& iReplyTo; + MSenRemoteServiceConsumer& iConsumer; + TInt iTxnId; + RLocalRequestMap& iRequestMap; + MSenTransport& iParent; + MSenTransportContext& iParentContext; + TPtrC8 iMessage; + TPtrC8 iProperties; + + }; + +#endif // SEN_HOSTLET_TRANSPORT_PLUGIN