diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderWriter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/httpprotocolplugins/wspheadercodec/CWspHeaderWriter.h Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,456 @@ +// 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 __CWSPHEADERWRITER_H__ +#define __CWSPHEADERWRITER_H__ + +// System Includes +#include +#include +#include + +// User Includes +#include "cwspheadercodec.h" + +// Forward declarations +class CHeaderFieldParam; + +/** +@since 7.0 +This class provides the encoding functionality for encoding all of the supported +headers. The single method EncodeHeaderL() is used passing in the header field +and the particular header field is then encoded into its faw format. +*/ +//##ModelId=3C4C41A600FD +class CWspHeaderWriter : public CHeaderWriter + { +public: // methods + + /** + Standard virtual destructor + @since 7.0 + @pre Fully constructed object + @post Object is destroyed + */ + //##ModelId=3C4C41A6027C + virtual ~CWspHeaderWriter(); + + /** + Standard factory 2 phase construction + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool Handle to an opened string pool with the WSP string table already opened + @param aStrTable The WSP string table to use for the header field names + @param aCodec The codec that owns this header writer + @return A pointer to the newly constructed class + @pre None + @post Object is constructed + */ + //##ModelId=3C4C41A60272 + static CWspHeaderWriter* 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 Handle to an opened string pool with the WSP string table already opened + @param aStrTable The WSP string table to use for the header field names + @param aCodec The codec that owns this header writer + @return A pointer to the newly constructed class + @pre None + @post Object is constructed with a handle on the cleanup stack + */ + //##ModelId=3C4C41A60267 + static CWspHeaderWriter* NewLC(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec); + + /** + This method will encode the header field that is passed in into its raw + form. + Error Condition: Invalid or corrupt data formats and out of memeory conditions + @since 7.0 + @param aHeader The header field to encode + @pre The header field is in its parsed state + @post The header field is in its raw format state + @leave KErrNotSupported If the header field is not supported + KErrNoMemory Out of memory conditions + KErrCorrupt If the data is invalid or is corrupt + */ + //##ModelId=3C4C41A6025E + virtual void EncodeHeaderL(RHeaderField& aHeader); + + /** + This method encodes the field name into its encoded token value. For WSP + transport the encoded token must be a short integer where the top bit is + set to 1. This method will NOT set the top bit to 1. + @since 7.0 + @param aFieldName The name of the field to encode + @return The encoded token value for the header field name. This value will always be + between 0 and 127 inclusive or KErrNotFound if the header name does not have + an encoded token value. + */ + //##ModelId=3C4C41A6025C + TInt EncodeFieldName(RStringF aFieldName) const; + +protected: // methods + + /** + Standard default constructor. + @since 7.0 + @param aStrPool Handle to an opened string pool with the WSP string table already opened + @param aStrTable The WSP string table to use for the header field names + @param aCodec The codec that owns this header writer + @pre None + @post Object is constructed + */ + //##ModelId=3C4C41A60252 + CWspHeaderWriter(RStringPool aStrPool, const TStringTable& aStrTable, CWspHeaderCodec& aCodec); + +private: // methods + + /** + Encodes the 'Accept' header + */ + //##ModelId=3C4C41A60249 + void EncodeAcceptL(RHeaderField& aHeader) const; + + /** + Encodes the 'Accept-charset' header + */ + //##ModelId=3C4C41A60240 + void EncodeAcceptCharsetL(RHeaderField& aHeader) const; + + /** + Encodes the 'Accept-encoding' header + */ + //##ModelId=3C4C41A6023E + void EncodeAcceptEncodingL(RHeaderField& aHeader) const; + + /** + Encodes the 'Accept-language' header + */ + //##ModelId=3C4C41A60235 + void EncodeAcceptLanguageL(RHeaderField& aHeader) const; + + /** + Encodes the 'Allow' header + */ + //##ModelId=3C4C41A6022C + void EncodeAllowL(RHeaderField& aHeader) const; + + /** + Encodes the 'Authorization' header + */ + //##ModelId=3C4C41A6022A + void EncodeAuthorizationL(RHeaderField& aHeader) const; + + /** + Encodes the 'Content-encoding' header + */ + //##ModelId=3C4C41A60222 + void EncodeContentEncodingL(RHeaderField& aHeader) const; + + /** + Encodes the 'Content-language' header + */ + //##ModelId=3C4C41A60220 + void EncodeContentLanguageL(RHeaderField& aHeader) const; + + /** + Encodes the 'Content-location' header + */ + //##ModelId=3C4C41A60217 + void EncodeContentLocationL(RHeaderField& aHeader) const; + + /** + Encodes the 'Content-MD5' header + */ + //##ModelId=3C4C41A6020E + void EncodeContentMD5L(RHeaderField& aHeader) const; + + /** + Encodes the 'Content-range' header + */ + //##ModelId=3C4C41A6020C + void EncodeContentRangeL(RHeaderField& aHeader) const; + + /** + Encodes the 'Content-type' header + */ + //##ModelId=3C4C41A60203 + void EncodeContentTypeL(RHeaderField& aHeader) const; + + /** + Encodes the 'Cookie' header + */ + //##ModelId=3C4C41A601FA + void EncodeCookieL(RHeaderField& aHeader) const; + + /** + Encodes the 'Date' header + */ + //##ModelId=3C4C41A601F8 + void EncodeDateL(RHeaderField& aHeader) const; + + /** + Encodes the 'Encoding-version' header + */ + //##ModelId=3C4C41A601F0 + void EncodeEncodingVersionL(RHeaderField& aHeader) const; + + /** + Encodes the 'Expect' header + */ + //##ModelId=3C4C41A601EE + void EncodeExpectL(RHeaderField& aHeader) const; + + /** + Encodes the 'From' header + */ + //##ModelId=3C4C41A601E4 + void EncodeFromL(RHeaderField& aHeader) const; + + /** + Encodes the 'Last-modified' header + */ + //##ModelId=3C4C41A601DA + void EncodeLastModifiedL(RHeaderField& aHeader) const; + + /** + Encodes the 'Pragma' header + */ + //##ModelId=3C4C41A601D2 + void EncodePragmaL(RHeaderField& aHeader) const; + + /** + Encodes the 'Profile' header + */ + void EncodeProfileL(RHeaderField& aHeader) const; + + /** + Encodes the 'Profile-Diff' header + */ + void EncodeProfileDiffL(RHeaderField& aHeader) const; + + /** + Encodes the 'Range' header + */ + //##ModelId=3C4C41A601D0 + void EncodeRangeL(RHeaderField& aHeader) const; + + /** + Encodes the 'Referer' header + */ + //##ModelId=3C4C41A601C7 + void EncodeRefererL(RHeaderField& aHeader) const; + + /** + Encodes the 'TE' header + */ + //##ModelId=3C4C41A601BE + void EncodeTEL(RHeaderField& aHeader) const; + + /** + Encodes the 'Trailer' header + */ + //##ModelId=3C4C41A601BC + void EncodeTrailerL(RHeaderField& aHeader) const; + + /** + Encodes the 'Upgrade' header + */ + //##ModelId=3C4C41A601B2 + void EncodeUpgradeL(RHeaderField& aHeader) const; + + /** + Encodes the 'User-agent' header + */ + //##ModelId=3C4C41A601A9 + void EncodeUserAgentL(RHeaderField& aHeader) const; + + /** + Encodes the 'Via' header + */ + //##ModelId=3C4C41A601A0 + void EncodeViaL(RHeaderField& aHeader) const; + + /** + Encodes the 'Warning' header + */ + //##ModelId=3C4C41A6019E + void EncodeWarningL(RHeaderField& aHeader) const; + + /** + Encodes the 'X-Wap-Application-Id' header + */ + //##ModelId=3C4C41A60195 + void EncodeXWapApplicationIdL(RHeaderField& aHeader) const; + +// Generic encoding methods + + /** + Encodes generic headers that have a date value + */ + //##ModelId=3C4C41A6018C + void GenericEncodeDateL(RHeaderField& aHeader) const; + + /** + Encodes generic headers that have a text string value + */ + //##ModelId=3C4C41A6018A + void GenericEncodeTextStringL(RHeaderField& aHeader) const; + +// Helper methods + + /** + Encodes a parameter value. The method returns a heap based descriptor containing + the encoded buffer. The caller takes ownership of the buffer. + */ + //##ModelId=3C4C41A60180 + void EncodeParameterL(const CHeaderFieldParam& aHeaderFieldParam, CWspHeaderEncoder& aEncoder) const; + + /** + Encodes a single 'Q' value. The method returns a heap based descriptor containing + the encoded buffer. The caller takes ownership of the buffer. + */ + //##ModelId=3C4C41A60177 + HBufC8* EncodeQValueL(RStringF aQValue) const; + + /** + Encodes a single version value. The method returns the encoded version value of the + version passed in as a parameter in a string format. The method will return 0 if + the version should be encoded as a text-value. + */ + //##ModelId=3C4C41A6016E + TUint8 EncodeVersionValueL(RStringF aVersionValue) const; + + /** + Encodes a header name. The method returns an integer value of the length of the + header name. + */ + //##ModelId=3C4C41A60164 + TInt EncodeHeaderNameL(RHeaderField& aHeader) const; + + /** + Encodes a single character set value. The method returns the encoded charset value + of the passed in string. + */ + //##ModelId=3C4C41A60150 + TInt GetCharacterSetValue(RStringF aCharSet) const; + + /** + Checks the passed in string for any invalid characters as specified in RFC2616. + */ + //##ModelId=3C4C41A6014E + TInt CheckTokenText(RStringF aTokenText) const; + + /** + Checks the passed in string for any invalid characters as specified in RFC2616. + */ + //##ModelId=3C4C41A60144 + TInt CheckTextString(RStringF aTextString) const; + + /** + Gets encoding for content-type text value with correct WSP version control. + Returns KErrNotFound if no encoding is available + */ + TInt EncodeContentTypeValue(THTTPHdrVal& aContentType) const; + + TInt EncodeParameterTokenValue(RStringF aParameterName) const; + + +private: // attributes + + //##ModelId=3C4C41A6013C + RStringPool iStrPool; + + //##ModelId=3C4C41A60130 + const TStringTable& iStrTable; + + //##ModelId=3C4C41A6011F + CWspHeaderCodec& iCodec; + }; + +/** +@since 7.0 +This class provides the encoding functionality for headers that are supported +by the WSP Header Codec. This encoder provides default functionality and +encodes the header field as a text-string as defined in the WSP specifications +at www.wapforum.org. +*/ +class CWspDefaultHdrWriter : public CHeaderWriter + { +public: // methods + + /** + Standard virtual destructor + @since 7.0 + @pre Fully constructed object + @post Object is destroyed + */ + virtual ~CWspDefaultHdrWriter(); + + /** + Standard factory 2 phase construction + Error Condition: Low memory conditions + @since 7.0 + @param aStrPool Handle to an opened string pool with the WSP string table already opened + @return A pointer to the newly constructed class + @pre None + @post Object is constructed + */ + static CWspDefaultHdrWriter* 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 Handle to an opened string pool with the WSP string table already opened + @return A pointer to the newly constructed class + @pre None + @post Object is constructed with a handle on the cleanup stack + */ + static CWspDefaultHdrWriter* NewLC(RStringPool aStrPool); + + /** + This method will encode the header field that is passed in into its raw + form. + Error Condition: Invalid or corrupt data formats and out of memeory conditions + @since 7.0 + @param aHeader The header field to encode + @pre The header field is in its parsed state + @post The header field is in its raw format state + @leave KErrNotSupported If the header field is not supported + KErrNoMemory Out of memory conditions + KErrCorrupt If the data is invalid or is corrupt + */ + virtual void EncodeHeaderL(RHeaderField& aHeader); + +protected: // methods + + /** + Standard default constructor. + @since 7.0 + @param aStrPool Handle to an opened string pool with the WSP string table already opened + @pre None + @post Object is constructed + */ + CWspDefaultHdrWriter(RStringPool aStrPool); + +private: // attributes + + RStringPool iStrPool; + }; + +#endif // __CWSPHEADERWRITER_H__