applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCOTransaction.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCOTransaction.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,420 @@
+// Copyright (c) 2001-2009 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:
+//
+
+#ifndef __CWSPCOTRANSACTION_H__
+#define __CWSPCOTRANSACTION_H__
+
+// System includes
+#include <e32base.h>
+#include <wsp/mwspcomethodcallback.h>
+#include <wsp/wsptypes.h>
+#include <http/framework/cprottransaction.h>
+#include <http/framework/httplogger.h>
+
+// User includes
+#include "mwspprimitivesendercallback.h"
+#include "mwspcorxdatacallback.h"
+#include "mwspcotxdatacallback.h"
+#include "cwspheaderutils.h"
+
+// Forward declarations
+class MWspCapabilityViewer;
+class MWspCOMethodInvoker;
+class CWspPrimitiveSender;
+class MWspCOMethodObserver;
+
+// Types used for arguments in this file (e.g. TWspBearer) are from the Wap namespace
+using namespace Wap;
+
+// @todo docing
+
+//##ModelId=3BBD80610048
+class CWspCOTransaction : public CProtTransaction, public MWspCOMethodCallback,
+												   public MWspPrimitiveSenderCallback,
+												   public MWspCORxDataCallback,
+												   public MWspCOTxDataCallback
+	{
+public:	// Methods
+
+/**	@fn				NewL(RHTTPTransaction aTransaction, MWspCOMethodInvoker& aMethodInvoker, MWspCapabilityViewer& aNegotiatedCapInfo, CWspHeaderUtils& aHdrUtils)
+	Intended Usage	:	Static factory constructor.
+	@since			7.0
+	@leave			Leaves with KErrNoMemory if there was not enough memory to
+					create the object.
+	@param			aTransaction		The HTTP transaction object associated
+										with this WSP method transaction.
+	@param			aMethodInvoker		A reference to the method invoker object.
+	@param			aNegotiatedCapInfo	A reference to the negotiated capability
+										info.
+	@param			aObserver			A reference to the method observer.
+	@param			aHdrUtils			A reference to the WSP header utilities
+	@return			A pointer to newly created object.
+*/
+	//##ModelId=3C4C41A3032A
+	static CWspCOTransaction* NewL(
+								   RHTTPTransaction			aTransaction, 
+								   MWspCOMethodInvoker&		aMethodInvoker, 
+								   MWspCapabilityViewer&	aNegotiatedCapInfo,
+								   MWspCOMethodObserver&	aObserver,
+								   CWspHeaderUtils&			aHdrUtils
+								   );
+
+/** @fn				~CWspCOTransaction()
+	Intended Usage	:	Standard destructor.
+	@since			7.0
+*/
+	//##ModelId=3C4C41A3030C
+	~CWspCOTransaction();
+
+/**	@fn				InitRequestL()
+
+	@since			7.0
+*/
+	void InitRequestL();
+
+/**	@fn				NotifyMoreRequestData()
+
+	@since			7.0
+*/
+	void NotifyMoreRequestData();
+
+/**	@fn				AbortRequest()
+
+	@since			7.0
+*/
+	void AbortRequest();
+
+/**	@fn				Suicide()
+	Intended Usage	:	The client has closed the RHTTPTransaction that this 
+						object wraps. The protocol base base class has also 
+						transferred ownership of this object to the sub-class, 
+						the WSP protocol handler. This function ensures cleanup
+						of this object. If the WSP method transaction was in 
+						the Null state, then the object deletes itself. If the 
+						WSP method transaction is in the Aborting state, then 
+						the object will delete itself once it receives the 
+						S-MethodAbort.ind primitive.
+	@since			7.0
+	@todo			finish docing
+	@pre			The client has closed the RHTTPTransaction that this object
+					wraps.
+	@post			If the WSP method transaction was in the Null state, then 
+					the object has deleted itself. If the WSP method transaction
+					is in the Aborting state, then the object will delete itself
+					once it receives the S-MethodAbort.ind primitive.
+*/
+	//##ModelId=3C4C41A3029E
+	void Suicide();
+
+/**	@fn				GetWspHeaderUtils() const
+	Intended Usage	:	This method provides access to the WSP header utilities.
+	@since			7.0
+	@return			A reference to the WSP header utilities
+*/
+	//##ModelId=3C4C41A30276
+	CWspHeaderUtils& GetWspHeaderUtils() const;
+
+private:	// Methods from CProtTransaction
+
+/**	@fn				CreateTxDataL()
+	@see			CProtTransaction
+*/
+	//##ModelId=3C4C41A3023A
+	virtual void CreateTxDataL();
+
+/**	@fn				CreateRxDataL(MRxDataObserver& aObserver)
+	@see			CProtTransaction
+*/
+	//##ModelId=3C4C41A301D5
+	virtual void CreateRxDataL(MRxDataObserver& aObserver);
+
+private:	// Methods from MWspCOMethodCallback
+
+/** @fn				MethodInvokeCnf()
+	@see			MWspCOMethodCallback
+*/
+	//##ModelId=3C4C41A30199
+	virtual void MethodInvokeCnf();
+
+/** @fn				MethodInvokeDataCnf()
+	@see			MWspCOMethodCallback
+*/
+	//##ModelId=3C4C41A30059
+	virtual void MethodInvokeDataCnf();
+
+/** @fn				MethodAbortInd(TWSPReason aReason)
+	@see			MWspCOMethodCallback
+*/
+	//##ModelId=3C4C41A203E7
+	virtual void MethodAbortInd(TWspReason aReason);
+
+/** @fn				MethodResultInd(TInt aStatus, const TDesC8& aResponseHeaders, MHTTPDataSupplier& aResponseBody, TBool aMoreData)
+	@see			MWspCOMethodCallback
+*/
+	//##ModelId=3C4C41A2033D
+	virtual void MethodResultInd(
+								TInt					aStatus, 
+								const TDesC8&			aResponseHeaders, 
+								MHTTPDataSupplier&		aResponseBody,
+								TBool					aMoreData
+								);
+
+/** @fn				MethodResultDataInd(const TDesC8& aTrailerHeaders, TBool aMoreData)
+	@see			MWspCOMethodCallback
+*/
+	//##ModelId=3C4C41A202EC
+	virtual void MethodResultDataInd(const TDesC8& aTrailerHeaders, TBool aMoreData);
+
+private:	// Methods from MWspPrimitiveSenderCallback
+
+/**	@fn				SendPrimitiveL(TWspPrimitive aPrimitive)
+	@see			MWspPrimitiveSenderCallback
+*/
+	//##ModelId=3C4C41A2029C
+	virtual void SendPrimitiveL(TWspPrimitive aPrimitive);
+
+/** @fn				WspPrimitiveSenderCallbackError(TInt aError)
+	@see			MWspPrimitiveSenderCallback
+*/
+	//##ModelId=3C4C41A20256
+	virtual TInt WspPrimitiveSenderCallbackError(TInt aError);
+
+private:	// Methods from MWspCORxDataCallback
+
+/**	@fn				AbortResponse()
+	@see			MWspCORxDataCallback
+*/
+	//##ModelId=3C4C41A20210
+	virtual void AbortResponse();
+
+/**	@fn				SendResponsePrimitive()
+	@see			MWspCORxDataCallback
+*/
+	//##ModelId=3C4C41A201F2
+	virtual void SendResponsePrimitive();
+
+private:	// Methods from MWspCOTxDataCallback
+
+/**	@fn				SendInvokePrimitive()
+	Informs the Tx Data object observer that it should send a S-MethodInvoke or
+	S-MethodInvokeData primitive.
+	@since			7.0
+*/
+	virtual void SendInvokePrimitive();
+
+/**	@fn				AbortInvoke()
+	Informs the Tx Data object observer that the method should be aborted.
+	@see			7.0
+*/
+	virtual void AbortInvoke();
+
+private:	// Methods
+
+/**	@fn				CWspCOTransaction(RHTTPTransaction aTransaction, MWspCOMethodInvoker& aMethodInvoker, MWspCapabilityViewer& aNegotiatedCapInfo, CWspHeaderUtils& aHdrUtils)
+	Intended Usage	:	First phase constructor.
+	@since			7.0
+	@param			aTransaction		The HTTP transaction object associated
+										with this WSP method transaction.
+	@param			aMethodInvoker		A reference to the method invoker object.
+	@param			aNegotiatedCapInfo	A reference to the negotiated capability
+										info.
+	@param			aObserver			A reference to the method observer.
+	@param			aHdrUtils			A reference to the WSP header utilities
+*/
+	//##ModelId=3C4C41A20120
+	CWspCOTransaction(
+					  RHTTPTransaction			aTransaction, 
+					  MWspCOMethodInvoker&		aMethodInvoker, 
+					  MWspCapabilityViewer&		aNegotiatedCapInfo,
+					  MWspCOMethodObserver&		aObserver,
+					  CWspHeaderUtils&			aHdrUtils
+					  );
+
+/**	@fn				ConstructL()
+	Intended Usage	:	Second phase constructor. Does any necessary allocations.
+	@since			7.0
+	@pre			First phase construction has been done.
+	@post			The object is fully initialised.
+*/
+	//##ModelId=3C4C41A20116
+	void ConstructL();
+
+/**	@fn				MethodInvoke()
+	Intended Usage	:	Invokes the method. Sends the S-MethodInvoke.req 
+						primitive. Ensures that the Server SDU size and the
+						Server message size are observed. Will leave if either
+						of these session capabilities are exceeded.
+	@since			7.0
+	@pre			The WSP method transaction is in the Null state.
+	@post			The S-MethodInvoke.req primitive has been sent and the WSP
+					method transaction is in the Requesting state.
+*/
+	//##ModelId=3C4C41A302F8
+	void MethodInvoke();
+
+/**	@fn				MethodInvokeData()
+	Intended Usage	:
+	@since			7.0
+	@todo			finish docing
+	@pre			The WSP method transaction is in the Requesting state.
+	@post			The S-MethodInvokeData.req primitive has been sent and the
+					WSP method transaction remains in the Requesting state.
+*/
+	//##ModelId=3C4C41A302D0
+	void MethodInvokeData();
+
+/**	@fn				MethodAbort()
+	Intended Usage	:
+	@since			7.0
+	@todo			finish docing
+	@pre			The WSP method transaction is not in the Null or Aborting 
+					state.
+	@post			The S-MethodAbort.req primitive has been sent and the WSP
+					method transaction is in the Aborting state.
+*/
+	//##ModelId=3C4C41A302BC
+	void MethodAbort();
+
+/**	@fn				MethodResultRes()
+	Intended Usage	:
+	@since			7.0
+	@post			The WSP method transaction is in the Waiting or Completing
+					state.
+	@pre			The WSP method transaction is in the Waiting2 state if the 
+					request response is not complete and there are subsequent 
+					S-MethodResultData primitives to be received. If the request
+					response is complete, then the WSP method transaction is in
+					the Null state.
+*/
+	void MethodResultRes();
+
+/**	@fn				MethodResultDataRes()
+	Intended Usage	:
+	@since			7.0
+	@post			The WSP method transaction is in the Waiting2 or Completing
+					state.
+	@pre			The WSP method transaction remains in the Waiting2 state if 
+					the request response is not complete and there are 
+					subsequent S-MethodResultData primitives to be received. If
+					the request response is complete, then the WSP method 
+					transaction is in the Null state.
+*/
+	void MethodResultDataRes();
+
+/**	@fn				ProcessResponseDataL(const TDesC8& aResponseHeaders, MHTTPDataSupplier& aResponseBody, TBool aMoreData)	
+
+	@since			7.0
+	@param			aResponseHeaders	A reference to a buffer	that provides 
+										the encoded response headers.
+	@param			aResponseBody		A reference to a data supplier object
+										that provides the data associated 
+										with the response.
+	@param			aMoreData			A flag to indicate whether subsequent
+										S-MethodResultData primitives are to be
+										received for this transaction.
+*/
+	void ProcessResponseDataL(const TDesC8& aResponseHeaders, MHTTPDataSupplier& aResponseBody, TBool aMoreData);
+
+/**	@fn				void PostResProcessing()
+	Does the necessary processing given that either a S-MethodResult.res or a
+	S-MethodResultData.res primitive has just been sent. If the method state is
+	Completing, then the method moves into the Null state, and if the self-
+	destruction has been flagged, the object deletes itself. If the method is
+	not in the Completing state, then it is in the Waiting2 state, and it does
+	not change state.
+	@since			7.0
+	@pre			The method is in either the Completing or the Waiting2 state.
+	@post			The method is in either in the Null state or has remained in 
+					the Waiting2 state.
+*/
+	void PostResProcessing();
+
+/**	@fn				ResetFlags()
+	Intended Usage	:	Resets all the flags in the object.
+	@since			7.0
+	@post			All flags are set to EFalse.
+*/
+	//##ModelId=3C4C41A20057
+	void ResetFlags();
+
+private:	// Attributes
+
+	/** HTTP logger handle (debug only)
+	*/
+	__DECLARE_LOG
+
+	/** A reference to the CO Transaction Invoker object. Owned by the transport 
+		handler.
+	*/
+	//##ModelId=3C4C41A2004D
+	MWspCOMethodInvoker&		iMethodInvoker;
+
+	/** An object that holds the negotiated capabilties for the current Wsp 
+		session.
+	*/
+	//##ModelId=3C4C41A20039
+	MWspCapabilityViewer&		iNegotiatedCapInfo;
+
+	/** A reference to the method observer.
+	*/
+	//##ModelId=3C4C41A20025
+	MWspCOMethodObserver&		iObserver;
+
+	/** A reference to the WSP header utilities
+	*/
+	//##ModelId=3C4C438001E5
+	CWspHeaderUtils&			iHdrUtils;
+
+	/** The state of the WSP method transaction.
+	*/
+	//##ModelId=3C4C41A20007
+	TWspMethodState				iMethodState;	
+
+	/** A flag to indicate whether there is more data to send in subsequent
+		S-MethodInvokeData primitives.
+	*/
+	//##ModelId=3C4C41A103DB
+	TBool						iMoreRequestData;
+
+	/** A flag to incidcate whether the S-MethodResult.res primitive has been sent.
+	*/
+	TBool						iSentMethodResultRes;
+
+	/** A flag to indicate whether the client aborted the method.
+	*/
+	//##ModelId=3C4C41A1039F
+	TBool						iClientMethodAbort;
+
+	/** A flag that inducates whether the final S-MethodResult.res or 
+		S-MethodResultData.res primitive is waiting to be sent.
+	*/
+	TBool						iFinalResPending;
+
+	/** A flag to indicate that the client has closed the transaction and that
+		once the S-MethodAbort.ind primitive is received, the object must self-
+		destruct.
+	*/
+	//##ModelId=3C4C41A10383
+	TBool						iSuicide;
+
+	/** An active object that is used to invoke the sending of certain WSP
+		primitives.
+	*/
+	//##ModelId=3C4C41A10377
+	CWspPrimitiveSender*		iPrimitiveSender;
+
+	};
+
+#endif	// __CWSPCOTRANSACTION_H__