applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCORxData.h
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCORxData.h	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,297 @@
+// 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 __CWSPCORXDATA_H__
+#define __CWSPCORXDATA_H__
+
+// System includes
+#include <e32base.h>
+#include <http/framework/crxdata.h>
+
+// Forward declarations
+class MWspCORxDataCallback;
+
+
+//##ModelId=3BBD80690108
+class CWspCORxData : public CRxData
+	{
+public:	// Methods
+
+/**	@fn				NewL(CProtTransaction& aProtTrans, MRxDataObserver& aObserver, MWspCORxDataCallback&	aMethodCallback)
+	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 Rx data object.
+	@param			aObserver			A reference to the Rx data observer 
+										object.
+	@param			aMethodCallback		A reference to the callback object.
+	@return			A pointer to newly created object.
+*/
+	//##ModelId=3C4C41AD03E3
+	static CWspCORxData* NewL(
+							 CProtTransaction&		aTrasaction, 
+							 MRxDataObserver&		aObserver, 
+							 MWspCORxDataCallback&	aMethodCallback
+							 );
+
+/**	@fn				~CWspCORxData()
+	Intended Usage	:	Standard destructor.
+	@since			7.0
+*/	
+	//##ModelId=3C4C41AD03D9
+	~CWspCORxData();
+
+/**	@fn				SetResponseDataL(const TDesC8& aResponseHeaders, MHTTPDataSupplier& aResponseBody)
+	Intended Usage	:	Sets the header and body data for the request response. 
+						The header data is segmented into the individual header 
+						fields and set into the response object's headers. 
+						
+						The client is informed using the EGotResponseHeaders 
+						event. The raw field value is not decoded. This is left
+						for when the field value is required. 
+						
+						If there is any body data then the client is informed 
+						using the EGotResponseBodyData event. If there is no 
+						body data and no more primitives are expected, the 
+						RxData observer is sent the EResponseComplete status.
+
+						The more data flag that indicates if there is more data
+						to be received for this transaction in subsequent 
+						S-MethodResultData primitives to follow.							
+	@since			7.0
+	@leave			The function will leave if setting the header data or body 
+					data fails.
+	@param			aResponseHeaders	A reference to a buffer with the the 
+										header data.
+	@param			aResponseBody		A reference to the data supplier object
+										for the body data.
+	@param			aMoreResponseData	A flag indicating that there is more data
+										to be received for this transaction in 
+										subsequent S-MethodResultData primitives 
+										to follow.										.
+	@pre			A S-MethodResult primitive has been received.
+	@post			The data supplier for thebody data is stored. The header 
+					data has been segmented into the individual header fields 
+					and set in the response object.
+*/
+	//##ModelId=3C4C41AD0392
+	void SetResponseDataL(const TDesC8& aResponseHeaders, MHTTPDataSupplier& aResponseBody, TBool aMoreResponseData);
+
+/**	@fn				UpdateResponseDataL(const TDesC8& aTrailerHeaders, TBool aMoreResponseData)
+	Intended Usage	:	Fetches any extra body data from the stored data 
+						supplier. Trailer header data is only allowed if this is
+						the last S-MethodResultData primitive. 
+						
+						If this is the last primitive and there is some header 
+						data, this is segmented into the individual header 
+						fields and added to the response object's headers. The 
+						raw field value is not decoded. This is left for when 
+						the field value is required. 
+
+						The client is sent the EGotResponseTrailerHeaders event.
+					
+						If there is any extra body data and the client has 
+						already released the previous batch of body data, then 
+						the EGotResponseBodyData event is sent.
+
+						The more data flag that indicates if there is more data
+						to be received for this transaction in subsequent 
+						S-MethodResultData primitives to follow.							
+	@since			7.0
+	@leave			The function will leave with KWspErrNotExpectingTrailers if 
+					there is trailer header data but more S-MethodResulData 
+					primitives are expected. Also, it will leave if it fails to 
+					update the body data.
+	@param			aTrailerHeaders		A reference to a buffer with the encoded 
+										trailer headers. This must be empty 
+										unless this is the last S-MethodResultData
+										primitive.
+	@param			aMoreResponseData	A flag indicating that there is more data
+										to be received for this transaction in 
+										subsequent S-MethodResultData primitives 
+										to follow.										.
+	@pre			A S-MethodResultData primitive has been received.
+	@post			Any trailer header data is segmented into the individual 
+					header fields and added to the response object's headers.
+					The client is notified of more body data if there is any
+					and the previous batch of data has been released.
+*/
+	//##ModelId=3C4C41AD036A
+	void UpdateResponseDataL(const TDesC8& aTrailerHeaders, TBool aMoreResponseData);
+
+private:	// Methods from CRxData
+
+/**	@fn				void ResetRxData()
+	@see			CRxData
+*/
+	//##ModelId=3C4C41AD034C
+	virtual void ResetRxData(); 
+
+private:	// Methods from MHTTPDataSupplier
+
+/**	@fn				GetNextDataPart(TPtrC8& aDataPart)
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41AD0324
+	virtual TBool GetNextDataPart(TPtrC8& aDataPart);
+
+/**	@fn				ReleaseData()
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41AD0310
+	virtual void ReleaseData();
+
+/**	@fn				OverallDataSize()
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41AD02FC
+	virtual TInt OverallDataSize();
+
+/**	@fn				Reset()
+	@see			MHTTPDataSupplier
+*/
+	//##ModelId=3C4C41AD02E8
+	virtual TInt Reset();
+
+private:	// Methods
+
+/**	@fn				CWspCORxData(CProtTransaction& aTransaction, MRxDataObserver& aObserver, MWspCORxDataCallback&	aMethodCallback)
+	Intended Usage	:	First phase constructor.
+	@since			7.0
+	@param			aTransaction		The protocol transaction object associated
+										with the Rx data object.
+	@param			aObserver			A reference to the Rx data observer 
+										object.
+	@param			aMethodCallback		A reference to the callback object.
+*/
+	//##ModelId=3C4C41AD02AC
+	CWspCORxData(
+				CProtTransaction&		aTransaction, 
+				MRxDataObserver&		aObserver, 
+				MWspCORxDataCallback&	aMethodCallback
+				);
+
+/**	@fn				SetHeaderDataL(const TDesC8& aResponseHeaders)
+	Intended Usage	:	
+	@since			7.0
+	@leave			
+	@param			aResponseHeaders	A reference a buffer with the header
+										data.
+	@pre			A S-MethodResult primitive has been received.
+	@post			The trailer header data has been segmented into the 
+					individual header fields and set in the response object.
+*/
+	//##ModelId=3C4C41AD0298
+	void SetHeaderDataL(const TDesC8& aResponseHeaders);
+
+/**	@fn				SetBodyDataL(MHTTPDataSupplier& aResponseBody)
+	Intended Usage	:	
+	@since			7.0
+	@leave			
+	@param			aResponseBody	A reference to the data supplier object for
+									the body data.
+	@pre			A S-MethodResult primitive has been received. The 
+					EGotResponseHeaders event has been sent.
+	@post			The body data supplier is stored.
+*/
+	//##ModelId=3C4C41AD027A
+	void SetBodyDataL(MHTTPDataSupplier& aResponseBody);
+
+/**	@fn				UpdateHeaderDataL(const TDesC8& aTrailerHeaders)
+	Intended Usage	:	
+	@since			7.0
+	@leave			
+	@param			aTrailerHeaders	A reference to a buffer with the encoded 
+									trailer headers. This must be empty unless
+									this is the last S-MethodResultData	
+									primitive.
+	@pre			A S-MethodResultData primitive has been received.
+	@post			Any extra header data is segmented into the individual 
+					header fields and added to the response object's headers.
+*/
+	//##ModelId=3C4C41AD0266
+	void UpdateHeaderDataL(const TDesC8& aTrailerHeaders);
+
+/**	@fn				UpdateBodyDataL()
+	Intended Usage	:	
+	@since			7.0
+	@leave			
+	@pre			A S-MethodResultData primitive has been received.
+	@post			Any extra body data is appended to the buffer.
+*/
+	//##ModelId=3C4C41AD025C
+	void UpdateBodyDataL();
+
+/**	@fn				ResponseCompleteL()
+	Informs the observer that the response is complete. Also, if there are 
+	trailer headers, the client is sent the EGotResponseTrailerHeaders event.
+	@since			7.0
+	@pre			All the response data has been received and sent to the client.
+	@post			The observer has been told that the response is complete. If 
+					trailer headers have been received, the client is sent the
+					EGotResponseTrailerHeaders event.
+*/
+	void ResponseCompleteL();
+
+private:	// Attributes
+
+	/** A reference to the method callback object.
+	*/
+	//##ModelId=3C4C41AD0252
+	MWspCORxDataCallback&	iMethodCallback;
+
+	/** A pointer to the data supplier for the body data - not owned.
+	*/
+	//##ModelId=3C4C41AD0240
+	MHTTPDataSupplier*		iBodyDataSupplier;
+
+	/** A flag that indicates whether subsequent S-MethodResultData primitives 
+		are expected for the response.
+	*/
+	//##ModelId=3C4C41AD0236
+	TBool					iMoreData;
+
+	/** A flag to indicate whether there are more data chunks to be obtained from
+		the data supplier object for the current SDU.
+	*/
+	TBool					iLastChunk;
+
+	/** A flag that indicates whether there is a current response body data part.
+	*/
+	//##ModelId=3C4C41AD022A
+	TBool					iGotBodyData;
+
+	/** A descriptor pointer to a buffer containing the current reponse body 
+		data part.
+	*/
+	//##ModelId=3C4C41AD0204
+	TPtrC8					iBodyData;
+
+	/** The overall size of the body data. If this is not known, e.g. the 
+		response is divided over several primitives, then this is set to 
+		KErrNotFound.
+	*/
+	//##ModelId=3C4C41AD01F8
+	TInt					iOverallDataSize;
+
+	/** A flag that indicates the there are trailer headers.
+	*/
+	TBool					iHasTrailer;
+
+	};
+
+#endif	// __CWSPCORXDATA_H__