diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderReader.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderReader.h Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,477 @@ +// 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 __CWSPHEADERREADER_H__ +#define __CWSPHEADERREADER_H__ + +// System Includes +#include +#include +#include + +// User Includes +#include "cwspheadercodec.h" + +// Forward declarations +class CHeaderFieldPart; +class CHeaderFieldParam; + + +/** +@internalAll +@since 7.0 +This class is the by the WSP header codec to provide the decoding functionality required +by WSP to decode header fields from a raw binary format to a useful parsed format. The +decoding is done as stated in the WSP specifications avaialable from www.wapforum.org. +*/ +//##ModelId=3C4C41AB029F +class CWspHeaderReader : public CHeaderReader + { +public: // methods + + /** + Standard virtual destructor. + @since 7.0 + @pre Object is constructed + @post Object is destroyed + */ + //##ModelId=3C4C41AC0108 + virtual ~CWspHeaderReader(); + + /** + Standard factory 2 phase construction. + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool A handle to an opened string pool with the WSP table opened + @param aStrTable The WSP table that contains the header field names + @param aCodec A reference to the parent owning codec + @return A pointer to the newly created object + @pre None + @post Object is fully constructed + @leave KErrNoMemory + */ + //##ModelId=3C4C41AC00FD + static CWspHeaderReader* NewL(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec); + + /** + Standard factory 2 phase construction leaving a handle on the cleanup stack. + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool A handle to an opened string pool with the WSP table opened + @param aStrTable The WSP table that contains the header field names + @param aCodec A reference to the parent owning codec + @return A pointer to the newly created object + @pre None + @post Object is fully constructed with a handle on the cleanup stack + @leave KErrNoMemory + */ + //##ModelId=3C4C41AC00F3 + static CWspHeaderReader* NewLC(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec); + + /** + This method is used by the codec to decode any supported header field that + passed in. + Error Condition: Low memory conditions or invalid or corrupt data + @since 7.0 + @param aHeader A reference to the header field to decode + @pre The header field is its raw format state + @post The header field is decoded and in its parsed state + @leave KErrNoMemory + KErrNotSupported if the header field is not supported + KErrCorrupt if the data is invalid or corrupt + */ + //##ModelId=3C4C41AC00EA + virtual void DecodeHeaderL(RHeaderField& aHeader); + +protected: // methods + + /** + Standard default constructor. + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool A handle to an opened string pool with the WSP table opened + @param aStrTable The WSP table that contains the header field names + @param aCodec A reference to the parent owning codec + @pre None + @post Object is constructed + */ + //##ModelId=3C4C41AC00DF + CWspHeaderReader(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec); + +private: // methods + + /** Decodes the Content-type header field + */ + //##ModelId=3C4C41AC00D6RS + void DecodeContentTypeL(RHeaderField& aHeader) const; + + /** Decodes the Date header field + */ + //##ModelId=3C4C41AC00D4 + void DecodeDateL(RHeaderField& aHeader) const; + + /** Decodes the Last-modified header field + */ + //##ModelId=3C4C41AC00CC + void DecodeLastModifiedL(RHeaderField& aHeader) const; + + /** Decodes the Pragma header field + */ + //##ModelId=3C4C41AC00CA + void DecodePragmaL(RHeaderField& aHeader) const; + + /** Decodes the Vary header field + */ + //##ModelId=3C4C41AC00C1 + void DecodeVaryL(RHeaderField& aHeader) const; + + /** Decodes the WWW-Authenticate header field + */ + //##ModelId=3C4C41AC00B8 + void DecodeWWWAuthenticateL(RHeaderField& aHeader) const; + + /** Decodes the Set-Cookie header field + */ + //##ModelId=3C4C41AC00B6 + void DecodeSetCookieL(RHeaderField& aHeader) const; + + /** Decodes the Content-location header field + */ + //##ModelId=3C4C41AC00AC + void DecodeContentLocationL(RHeaderField& aHeader) const; + + /** Decodes the Location header field + */ + //##ModelId=3C4C41AC00A4 + void DecodeLocationL(RHeaderField& aHeader) const; + + /** Decodes the Encoding-version header field + */ + //##ModelId=3C4C41AC00A2 + void DecodeEncodingVersionL(RHeaderField& aHeader) const; + + /** Decodes the Accept-ranges header field + */ + //##ModelId=3C4C41AC0099 + void DecodeAcceptRangesL(RHeaderField& aHeader) const; + + /** Decodes the Content-encoding header field + */ + //##ModelId=3C4C41AC0090 + void DecodeContentEncodingL(RHeaderField& aHeader) const; + + /** Decodes the Content-language header field + */ + //##ModelId=3C4C41AC008E + void DecodeContentLanguageL(RHeaderField& aHeader) const; + + /** Decodes the Content-MD5 header field + */ + //##ModelId=3C4C41AC0085 + void DecodeContentMD5L(RHeaderField& aHeader) const; + + /** Decodes the Proxy-authenticate header field + */ + //##ModelId=3C4C41AC007C + void DecodeProxyAuthenticateL(RHeaderField& aHeader) const; + + /** Decodes the Server header field + */ + //##ModelId=3C4C41AC007A + void DecodeServerL(RHeaderField& aHeader) const; + + /** Decodes the Retry-after header field + */ + //##ModelId=3C4C41AC0071 + void DecodeRetryAfterL(RHeaderField& aHeader) const; + + /** Decodes the Via header field + */ + //##ModelId=3C4C41AC0068 + void DecodeViaL(RHeaderField& aHeader) const; + + /** Decodes the Trailer header field + */ + //##ModelId=3C4C41AC0066 + void DecodeTrailerL(RHeaderField& aHeader) const; + + /** Decodes the Content-range header field + */ + //##ModelId=3C4C41AC005E + void DecodeContentRangeL(RHeaderField& aHeader) const; + + /** Decodes the X-Wap-Application-Id header field + */ + //##ModelId=3C4C41AC005C + void DecodeXWapApplicationIdL(RHeaderField& aHeader) const; + + /** Decodes the X-Wap-Initiator-URI header field + */ + //##ModelId=3C4C41AC0053 + void DecodeXWapInitiatorURIL(RHeaderField& aHeader) const; + + /** Decodes the Push-flag header field + */ + //##ModelId=3C4C41AC0049 + void DecodePushFlagL(RHeaderField& aHeader) const; + + /** Decodes the Allow header field + */ + //##ModelId=3C4C41AC0040 + void DecodeAllowL(RHeaderField& aHeader) const; + + /** Decodes the Upgrade header field + */ + //##ModelId=3C4C41AC003E + void DecodeUpgradeL(RHeaderField& aHeader) const; + + /** Decodes the Warning header field + */ + //##ModelId=3C4C41AC0035 + void DecodeWarningL(RHeaderField& aHeader) const; + + /** Decodes the Profile-Warning header field + */ + void DecodeProfileWarningL(RHeaderField& aHeader) const; + +// utility helper methods + + /** Decodes the warn codes + */ + //##ModelId=3C4C41AC002C + void DecodeGenericWarnCodeL(RHeaderField& aHeader, TWspPrimitiveDecoder& aDecoder) const; + + /** Checks for NULL strings, ie strings with no but data with a NULL terminator + */ + //##ModelId=3C4C41AB03CE + TBool CheckForNullStringL(TPtrC8& aRawData, TInt& aBytesRead, TWspPrimitiveDecoder& aDecoder) const; + + /** Decodes version values + */ + //##ModelId=3C4C41AB03C3 + void DecodeGenericVersionL(RHeaderField& aHeader, TWspPrimitiveDecoder& aDecoder, TInt aIndex) const; + + /** Check the length of data is greater than a required minimum + */ + //##ModelId=3C4C41AB03B9 + inline void CheckLengthL(TPtrC8& aRawData, TInt aMinLength) const; + + /** Check for a NULL data part and adds a NULL descriptor part to the parsed data + */ + //##ModelId=3C4C41AB03AE + TBool CheckNullDesPartL(RHeaderField& aHeader, TPtrC8& aRawData, TInt aPartIndex) const; + + /** Adds a new string part to the parsed data + */ + //##ModelId=3C4C41AB039C + TInt AddNewDecoderStringPartL(RHeaderField& aHeader, TWspPrimitiveDecoder& aDecoder, TInt aIndex=0) const; + +// generic encoding methods + + /** Decodes generic integer values + */ + //##ModelId=3C4C41AB039A + void DecodeGenericIntegerValueL(RHeaderField& aHeader) const; + + /** Decodes generic new string values + */ + //##ModelId=3C4C41AB0390 + void DecodeGenericNewStringValueL(RHeaderField& aHeader) const; + + /** Decodes generic data values + */ + //##ModelId=3C4C41AB0387 + void DecodeGenericDateValueL(RHeaderField& aHeader) const; + + /** Decodes generic field names + */ + //##ModelId=3C4C41AB037E + void DecodeGenericFieldNameL(RHeaderField& aHeader) const; + + /** Decodes generic string parameter types + */ + //##ModelId=3C4C41AB0374 + TInt DecodeGenericSingleParameterL(TPtrC8& aRawParam, CHeaderFieldPart& aHeaderFieldPart) const; + + /** Decodes well known parameter tokens + */ + //##ModelId=3C4C41AB0368 + void DecodeWellKnownParamTokenL(TWspPrimitiveDecoder& aDecoder, TInt& aBytesRead, + TPtrC8& aRawParamBlock, CHeaderFieldPart& aHeaderFieldPart) const; + + /** Decodes untyped parameter types + */ + //##ModelId=3C4C41AB0355 + void DecodeUntypedParamL(TWspPrimitiveDecoder& aDecoder, TInt& aBytesRead, + TPtrC8& aRawParamBlock, CHeaderFieldPart& aHeaderFieldPart) const; + + /** Decodes generic parameter tokens + */ + //##ModelId=3C4C41AB034A + TInt DecodeGenericParamTokenL(TWspPrimitiveDecoder& aDecoder, const TStringTable& aStrTable, + THTTPHdrVal& aParamValue, RStringF& aParamDesValue) const; + + /** Decodes character-sets + */ + //##ModelId=3C4C41AB033F + void GetCharacterSetFromValueL(TInt aValue, RStringF& aCharSetStr) const; + + /** Decodes generic challenge data + */ + //##ModelId=3C4C41AB0335 + void DecodeGenericChallengeL(RHeaderField& aHeader) const; + +// generic part methods + + /** Sets a new part + */ + //##ModelId=3C4C41AB032B + CHeaderFieldPart& SetNewPartL(RHeaderField& aHeader, TInt aPartIndex, THTTPHdrVal& aPartVal) const; + + /** Sets a new integer part + */ + //##ModelId=3C4C41AB0318 + CHeaderFieldPart& SetNewIntegerPartL(RHeaderField& aHeader, TInt aPartIndex, TInt aValue) const; + + /** Sets a new case insensitive string part + */ + //##ModelId=3C4C41AB030D + CHeaderFieldPart& SetNewFStringPartL(RHeaderField& aHeader, TInt aPartIndex, TPtrC8 aValue) const; + + /** Sets a new case sensitive string part + */ + //##ModelId=3C4C41AB02FB + CHeaderFieldPart& SetNewStringPartL(RHeaderField& aHeader, TInt aPartIndex, TPtrC8 aValue) const; + + /** Sets an existing case insensitive string part + */ + //##ModelId=3C4C41AB02F0 + CHeaderFieldPart& SetFStringPartL(RHeaderField& aHeader, TInt aPartIndex, RStringF aStrVal) const; + + /** Sets a new date value part + */ + //##ModelId=3C4C41AB02E5 + CHeaderFieldPart& SetNewDatePartL(RHeaderField& aHeader, TInt aPartIndex, TDateTime& aValue) const; + + /** Adds a new param to the supplied part + */ + //##ModelId=3C4C41AB02D1 + CHeaderFieldParam& SetNewParamL(CHeaderFieldPart& aHeaderPart, TPtrC8 aParamName, THTTPHdrVal aParamValue) const; + +private: // attributes + + /** Handle to an opened string pool with the WSP header field names table opened + */ + //##ModelId=3C4C41AB02C9 + RStringPool iStrPool; + + /** Reference to the WSP header field names table + */ + //##ModelId=3C4C41AB02BF + const TStringTable& iStrTable; + + /** Reference to the parent owning codec + */ + //##ModelId=3C4C41AB02B3 + CWspHeaderCodec& iCodec; + }; + +inline void CWspHeaderReader::CheckLengthL(TPtrC8& aRawData, TInt aMinLength) const + { + if(aRawData.Length() < aMinLength) + User::Leave(KErrCorrupt); + } + +/** +@internalAll +@since 7.0 +This class is the by the WSP header codec to provide the decoding functionality required +by WSP to decode header fields from a raw binary format to a useful parsed format. This +decoder is the default decoder for headers that have no specific decoding pattern and +expects text-string format data as defined WSP specifications avaialable from www.wapforum.org. +*/ +class CWspDefaultHdrReader : public CHeaderReader + { +public: // methods + + /** + Standard virtual destructor. + @since 7.0 + @pre Object is constructed + @post Object is destroyed + */ + //##ModelId=3C4C41AC0108 + virtual ~CWspDefaultHdrReader(); + + /** + Standard factory 2 phase construction. + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool A handle to an opened string pool + @return A pointer to the newly created object + @pre None + @post Object is fully constructed + @leave KErrNoMemory + */ + static CWspDefaultHdrReader* NewL(RStringPool aStrPool); + + /** + Standard factory 2 phase construction leaving a handle on the cleanup stack. + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool A handle to an opened string pool + @return A pointer to the newly created object + @pre None + @post Object is fully constructed with a handle on the cleanup stack + @leave KErrNoMemory + */ + static CWspDefaultHdrReader* NewLC(RStringPool aStrPool); + + /** + This method is used by the codec to decode any header field that is + passed in. Assumes the header field value is a text-string. + Error Condition: Low memory conditions or invalid or corrupt data + @since 7.0 + @param aHeader A reference to the header field to decode + @pre The header field is its raw format state + @post The header field is decoded and in its parsed state + @leave KErrNoMemory + KErrNotSupported if the header field is not supported + KErrCorrupt if the data is invalid or corrupt + */ + virtual void DecodeHeaderL(RHeaderField& aHeader); + +protected: // methods + + /** + Standard default constructor. + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool A handle to an opened string pool + @pre None + @post Object is constructed + */ + //##ModelId=3C4C41AC00DF + CWspDefaultHdrReader(RStringPool aStrPool); + +private: // attributes + + /** + Handle to an opened string pool + */ + RStringPool iStrPool; + }; + +#endif // __CWSPHEADERREADER_H__