diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/httpprotocolplugins/WspProtocolHandler/CWspCORxData.h --- /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 +#include + +// 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__