applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCOTxData.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCOTxData.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,363 @@
+// 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 __CWSPCOTXDATA_H__
+#define __CWSPCOTXDATA_H__
+
+// System includes
+#include <e32base.h>
+#include <http/framework/ctxdata.h>
+
+// Forward declarations
+class MWspCOTxDataCallback;
+class MWspCapabilityViewer;
+class MHTTPDataSupplier;
+
+// @todo docing
+
+//##ModelId=3BBD80700021
+class CWspCOTxData : public CTxData
+	{
+public:	// Methods
+
+/**	@fn				NewL(CProtTransaction& aTransaction, MWspCOTxDataCallback& aObserver, MWspCapabilityViewer& aNegotiatedCapInfo)
+	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 protocol transaction object 
+										associated with the Tx data object.
+	@param			aObserver			A reference to the Tx data observer
+	@param			aNegotiatedCapInfo	A reference to the negotiated 
+										capability viewer object.
+	@return			A pointer to newly created object.
+*/
+	//##ModelId=3C4C41A801D3
+	static CWspCOTxData* NewL(
+							 CProtTransaction&		aTransaction, 
+							 MWspCOTxDataCallback&	aObserver, 
+							 MWspCapabilityViewer&	aNegotiatedCapInfo
+							 );
+
+/**	@fn				~CWspCOTxData()
+	Intended Usage	:	Standard destructor.
+	@since			7.0
+*/
+	//##ModelId=3C4C41A801C9
+	~CWspCOTxData();
+
+/**	@fn				RequestHeadersData()
+	Intended Usage	:	Provides a buffer with the request headers.
+	@since			7.0
+	@return			A const reference to a buffer that contains the	request 
+					headers.
+*/
+	//##ModelId=3C4C41A801B5
+	const TDesC8& RequestHeadersData();
+
+/**	@fn				RequestBodyData()
+	Intended Usage	:	Provides the data supplier object for the request 
+						body data. This data supplier supplies the more data
+						flag via the return from GetNextDataPart().
+	@since			7.0
+	@return			A reference to a MHTTPDataSupplier object that provides the
+					request body.
+*/
+	//##ModelId=3C4C41A801AB
+	MHTTPDataSupplier& RequestBodyData();
+
+/**	@fn				SetRequestDataL()
+	Intended Usage	:
+	@since			7.0
+	@todo			finish docing
+*/
+	//##ModelId=3C4C41A80197
+	void SetRequestDataL();
+
+/**	@fn				ReceivedCnf()
+	The cnf for the current invoke primitive has been received. If there is more
+	data to send, then the observer is asked to send an S-MethodInvokeData 
+	primitive. If there is no more data to send and the request is not complete
+	then wait for the client to send more data.
+	@since			7.0
+	@pre			The state is either EDone or EGotMoreData.
+	@post			The has changed to EIdle if the originally EDone. This 
+					indicates that the request is complete. If the state was
+					EGotMoreData then the state is EDone if the remaining data
+					can be sent in the next SDU, EGotMoreData if the remaining
+					data cannot be all sent in the next SDU, or EWaitForData if
+					the request is not complete and remaining data does not fill
+					the next SDU.
+*/
+	void ReceivedCnf();
+
+/**	@fn				NotifyMoreRequestData()
+	Intended Usage	:	The client has got more request data. 
+	@since			7.0
+	@post			The fact that the client has nore request data has been flagged.
+*/
+	//##ModelId=3C4C41A80179
+	void NotifyMoreRequestData();
+	
+private:	// Methods from MHTTPDataSupplier
+
+/**	@fn				GetNextDataPart(TPtrC8& aDataPart)
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41A8013C
+	virtual TBool GetNextDataPart(TPtrC8& aDataPart);
+
+/**	@fn				ReleaseData()
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41A80128
+	virtual void ReleaseData();
+
+/**	@fn				OverallDataSize()
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41A80114
+	virtual TInt OverallDataSize();
+
+/**	@fn				Reset()
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41A80100
+	virtual TInt Reset();
+
+private:	// Methods
+
+/**	@fn				CWspCOTxData(CProtTransaction& aTransaction, MWspCOTxDataCallback& aObserver, MWspCapabilityViewer& aNegotiatedCapInfo)
+	Intended Usage	:	First phase constructor.
+	@since			7.0
+	@param			aTransaction		The protocol transaction object 
+										associated with the Tx data object.
+	@param			aObserver			A reference to the Tx observer.
+	@param			aNegotiatedCapInfo	A reference to the negotiated 
+										capability viewer object.
+*/
+	//##ModelId=3C4C41A8009C
+	CWspCOTxData(
+				CProtTransaction&		aTransaction, 
+				MWspCOTxDataCallback&	aObserver, 
+				MWspCapabilityViewer&	aNegotiatedCapInfo
+				);
+
+/**	@fn				SetSessionPropertyL(TInt aProperty, THTTPHdrVal aFieldValue)
+	Intended Usage	:
+	@since			7.0
+	@todo			docing
+	@param			aProperty		An integer specifying the property to be 
+									set.
+	@param			aFieldValue		The value the property is to be set to.
+	@post			The property has been set to the specified value/
+*/
+	//##ModelId=3C4C41A80056
+	void SetSessionPropertyL(TInt aProperty, THTTPHdrVal aFieldValue);
+
+/**	@fn				SetHeaderDataL(RHTTPRequest aRequest)
+	Intended Usage	:
+	@since			7.0
+	@todo			finish docing
+	@param			aRequest	The request object.
+	@pre
+	@post
+*/
+	//##ModelId=3C4C41A8002E
+	void SetHeaderDataL(RHTTPRequest aRequest);
+
+/**	@fn				EncodeHeadersL(RHTTPHeaders aHeaders)
+	Intended Usage	:
+	@since			7.0
+	@todo			finish docing
+	@param			aHeaders	The headers object
+	@pre
+	@post
+*/
+	//##ModelId=3C4C41A80006
+	void EncodeHeadersL(RHTTPHeaders aHeaders);
+
+/**	@fn				SetBodyDataL(MHTTPDataSupplier& aRequestBody)
+	Intended Usage	:
+	@since			7.0
+	@todo			finish docing
+	@param			aRequestBody	The data supplier for the request body data.
+	@pre
+	@post
+*/
+	//##ModelId=3C4C41A703D0
+	void SetBodyDataL(MHTTPDataSupplier& aRequestBody);
+
+/**	@fn				UpdateBodyData()
+	Intended Usage	:
+	@since			7.0
+	@todo			finish docing
+	@pre
+	@post
+*/
+	//##ModelId=3C4C41A703C6
+	void UpdateBodyData();
+
+/**	@fn				CalculateUIntVarLength(TUint32 aUint)
+	Intended Usage	:	A utility function to calculate how many bytes are
+						required to represent a number in UIntVar format, as
+						defined by the WSP Specification, July 2001.
+	@since			7.0
+	@param			aUint	The unsigned positive number for which to calculate
+							the length of its UIntVar representation.
+	@return			The number of bytes required to represent the input integer
+					as a UIntVar.
+*/
+	//##ModelId=3C4C41A70394
+	TInt CalculateUIntVarLength(TUint32 aUint);
+
+/**	@fn				UpdateState()
+
+	@since			7.0
+*/
+	void UpdateState();
+
+/** @fn				CheckTrailer()
+
+	@since			7.0
+*/
+	void CheckTrailer();
+
+/**	@fn				DecideObserverAction()
+
+	@since			7.0
+*/
+	void DecideObserverAction();
+
+/**	@fn				Cleanup()
+
+	@since			7.0
+*/
+	void Cleanup();
+
+private:	// Enums
+
+	/** The TRequestState type represents the states of the 
+		request data object.
+	*/
+	enum TRequestState
+		{
+		/**
+		*/
+		EIdle					= 0,
+		/**
+		*/
+		EDone,
+		/**
+		*/
+		EGotMoreData,
+		/**
+		*/
+		EWaitForMoreData,
+		/**
+		*/
+		EAbortMethod
+		};
+
+private:	// Attributes
+
+	/** The state of the request data.
+	*/
+	TRequestState			iState;
+
+	/**	A reference to Tx data callback object.
+	*/
+	//##ModelId=3C4C41A7038A
+	MWspCOTxDataCallback&	iObserver;
+
+	/** A reference to the negotiated capability viewer.
+	*/
+	//##ModelId=3C4C41A70376
+	MWspCapabilityViewer&	iNegotiatedCapInfo;
+
+	/** A pointer to the request body data supplier. Not owned.
+	*/
+	//##ModelId=3C4C41A70362
+	MHTTPDataSupplier*		iBodyDataSupplier;
+
+	/** A buffer with the encoded request header data.
+	*/
+	//##ModelId=3C4C41A70350
+	HBufC8*					iHeaderData;
+
+	/** A buffer with the encoded request trailer header data.
+	*/
+	//##ModelId=3C4C41A70344
+	HBufC8*					iTrailerData;
+
+	/** A buffer with the current request data.
+	*/
+	HBufC8*					iBodyData;
+
+	/** A flag indicating that there are trailer header data.
+	*/
+	//##ModelId=3C4C41A70312
+	TBool					iHasTrailer;
+
+	/** A flag that indicates whether all the request data has been received 
+		from the client.
+	*/
+	//##ModelId=3C4C41A702F4
+	TBool					iRequestComplete;
+
+	/** A flag that indicates whether there is a current request body data part.
+	*/
+	//##ModelId=3C4C41A702D6
+	TBool					iGotBodyData;
+
+	/** A descriptor pointer to a buffer containing the current request body 
+		data part.
+	*/
+	//##ModelId=3C4C41A702C4
+	TPtrC8					iDataPart;
+
+	/** The overall size of the body data. If this is not known, e.g. the 
+		resquest is divided over several primitives, then this is set to 
+		KErrNotFound.
+	*/
+	//##ModelId=3C4C41A702B8
+	TInt					iOverallDataSize;
+
+	/** The remaining server SDU space for the current primitive.
+	*/
+	//##ModelId=3C4C41A702A6
+	TUint32					iRemainingSDUSpace;
+
+	/** The remaining server message space.
+	*/
+	//##ModelId=3C4C41A7029A
+	TUint32					iRemainingMessageSpace;
+
+	/** A flag to indicate whether LDT is supported.
+	*/
+	//##ModelId=3C4C41A70287
+	TBool					iSupportLDT;
+
+	/** The length of the trailer header info.
+	*/
+	TUint32					iTrailerInfoLength;
+
+	/** A flag to indicate wether the Server Message is limited.
+	*/
+	TBool					iLimitedMessageSize;
+
+	};
+
+#endif	// __CWSPCOTXDATA_H__