diff -r 000000000000 -r 8e480a14352b messagingfw/wappushfw/pushutils/inc/chttpresponse.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/wappushfw/pushutils/inc/chttpresponse.h Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,368 @@ +// Copyright (c) 1998-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: +// Purpose: This file provides the definition of the CHTTPResponse class. +// The HTTP Response class encodes HTTP response headers only. It +// contains the methods used to transcode from WSP->HTTP fields +// +// + +#ifndef __CHTTPRESPONSE_H__ +#define __CHTTPRESPONSE_H__ + +// System includes +// +#include + +// User Include +#include + +const TInt KMaxLogEntrySize = KMaxFileName; + +// Define a set of macros to control logging activity +// The log server client pointer +#define __DECLARE_LOG CLogClient* iLogPtr; + +// Forward class declarations +// +class CPushMessage; + +// Class definition for CHTTPResponse +// +//##ModelId=3B712B9A0231 +NONSHARABLE_CLASS (CHTTPResponse) : public CBase +/** +@publishedAll +@deprecated +*/ + { +public: // Methods + + // Factory method to construct this class. + // + // Rtn: a new CHTTPResponse object, by ptr. Ownership is transferred to the + // caller. + // + //##ModelId=3B712B9B000A + static CHTTPResponse* NewL(); + + // Destructor for this class. Removes this object and releases memory held + // by it + // + //##ModelId=3B712B9B0000 + virtual ~CHTTPResponse(); + + // Clean out the fields buffer + // + //##ModelId=3B712B9A03D6 + void Reset(); + + // Set the fields buffer with the response received from the WAP Stack + // + // In: + // aResponse - an 8-bit descriptor field containing the origin server's + // WSP-encoded response header. Ownership is transferred to + // this class. + // + //##ModelId=3B712B9A03D4 + void AddResponse(HBufC8* aResponse); + + // Accessor to the HTTP response fields buffer + // + // Rtn: a reference to the response. Ownership is _NOT_ transferred + // + // NOTE THIS SHOULD RETURN CONST - BUT CAN'T BE CHANGED SINCE IT WOULD + // BREAK BC. + //##ModelId=3B712B9A03CA + HBufC8& Response() const; + + // Accessor to the HTTP status code (e.g. 400, 300, 200, 500) + // + // Rtn: the status code - series number only. + // + //##ModelId=3B712B9A03C1 + THttpStatusCode StatusCode() const; + + // Accessor to the HTTP detailed status code (e.g. 404, 304, 200, 501) + // + // Rtn: the status code - series and specific code value + // + //##ModelId=3B712B9A03C0 + THttpStatusCode DetailedStatusCode() const; + + // Accessor to set the HTTP response status. + // + // In: + // aCode - the WSP-encoded status code + // + //##ModelId=3B712B9A03B6 + void SetStatusCode(TInt aCode); + + // Method to find a named field, that returns null terminated + // WSP text strings. + // + // In: + // aField - the field type + // aStartIndex - the index to search from (defaults to the buffer start) + // + // Out: + // aDesc - a pointer-type descriptor into the response buffer at the + // position where the field was located. The caller must NOT + // modify the descriptor contents + // + // Rtn: TBool - set to ETrue if the field was found, EFalse otherwise + // + //##ModelId=3B712B9A0390 + TBool FindField(THttpHeaderField aField + , TPtrC8& aDesc + , TInt aStartIndex = 0) const; + + // Method to find a named field, that returns 8-bit octet data (binary + // or strings - not stipulated which). + // + // In: + // aField - the field type + // aStartIndex - the index to search from (defaults to the buffer start) + // + // Out: + // aDesc - a pointer-type descriptor into the response buffer at the + // position where the field was located. The caller must NOT + // modify the descriptor contents + // + // Rtn: TBool - set to ETrue if the field was found, EFalse otherwise + // + //##ModelId=3B712B9A0384 + TBool FindBinaryDescField(THttpHeaderField aField + , TPtrC8& aDesc + , TInt aStartIndex = 0) const; + + // Method to find a named field, that returns an EPOC date/time structure. + // + // In: + // aField - the field type + // aStartIndex - the index to search from (defaults to the buffer start) + // + // Out: + // aTime - a structure containing the time (and date) found in the header + // + // Rtn: TBool - set to ETrue if the field was found, EFalse otherwise + // + //##ModelId=3B712B9A03A2 + TBool FindField(THttpHeaderField aField + , TTime& aTime + , TInt aStartIndex = 0) const; + + // Method to find a named field within the Cache Control header + // + // In: + // aField - the field type + // + // Out: + // + // Rtn: TBool - set to ETrue if the field was found, EFalse otherwise + // + //##ModelId=3B712B9A0370 + TInt FindCacheControlFieldValue(TCacheControlFieldValue aField) const; + + // Method to find a named field within the Cache Control header, + // that returns an EPOC date/time structure. + // + // In: + // aField - the field type + // + // Out: + // aTime - a structure containing the time (and date) found in the header field + // + // Rtn: TBool - set to ETrue if the field was found, EFalse otherwise + // + //##ModelId=3B712B9A035C + TBool ExtractCacheControlTime(TCacheControlFieldValue aField, TTime& aTime) const; + + // Method to search for the content type encoded in the response header + // + // Out: + // aDesc - a pointer-type descriptor into the appropriate element of an + // array prefilled with all the content types that have WSP + // encodings. e.g. "text/vnd.wap.wml". The contents of the + // descriptor must NOT be modified. + // + //##ModelId=3B712B9A0348 + void ContentType(TPtrC8& aDesc) const; + + // Method to search for the realm encoded in the response header, when the + // response challenges the client for HTTP authentication (code 401) + // + // Out: + // aDesc - a pointer-type descriptor into the response header buffer + // positioned at the realm string within the challenge. The + // contents of the descriptor must NOT be modified. + // + // Rtn: TBool - set to ETrue if a www-authenticate realm was found, EFalse + // otherwise + // + //##ModelId=3B712B9A033F + TBool FindRealm(TPtrC8& aRealm) const; + + // Method to search for the character set encoded in the Content-Type + // field ofthe response header + // + // Out: + // aDesc - a pointer-type descriptor into the appropriate element of an + // array prefilled with all the character sets that have WSP + // encodings. e.g. "utf-8". The contents of the descriptor must + // NOT be modified. + // + // Rtn: TBool - set to ETrue if a character set was found, EFalse if not + // + //##ModelId=3B712B9A032A + TBool CharSet(TPtrC8& aDesc) const; + +protected: // Methods + + // Normal constructor - do non-allocating creation of this class + // + CHTTPResponse(); + + // Second phase construction - any allocation for this class must take place + // here. Sets up the resources required by an HTTP Response. + // + //##ModelId=3B712B9A0322 + void ConstructL(); + + //friend class declaration - only need the following function + friend class CPushMessage; + // Method to locate a named field in the response header, starting at the + // specified index position. + // + // In: + // aField - the header field type + // aStartIndex - the (optional) position in the header to start searching + // + // Rtn: TInt - the index position of the required field _value_ (not the + // field name), or KErrNotFound otherwise. + // + //##ModelId=3B712B9A030D + TInt LocateField(THttpHeaderField aField, TInt aStartIndex = 0) const; + + // Perform a look-up of content type given a WSP encoding value, used as + // an index. + // + // In: + // aIndex - the WSP encoding value + // + // Rtn: const TText8* - the required content type text - NOT to be changed + // + //##ModelId=3B712B9A0352 + const TText8* ContentType(TInt aContentTypeCode) const; + + // Perform a look-up of character set given a WSP encoding value, used as + // an index. + // + // In: + // aCharsetCode - the index into the content types table/ + // + // Rtn: const TText8* - the required 8-bit character set text - NOT to be + // changed by the caller + // + //##ModelId=3B712B9A0334 + const TText8* CharSet(TInt aCharsetCode) const; + +private: // Attributes + + // The 8-bit buffer used to store the HTTP response fields + // + //##ModelId=3B712B9A02AA + HBufC8* iResponse; + + // The HTTP Status code (coarse - ie. series only, e.g. 100, 200 etc.) + // + //##ModelId=3B712B9A0296 + THttpStatusCode iStatusCode; + + // The detailed HTTP Status code (within series, e.g. 102, 204, 401 etc.) + // + //##ModelId=3B712B9A0282 + THttpStatusCode iDetailedStatusCode; + + // Declare the CLogClient pointer + //__DECLARE_LOG + +private: // Methods + + // Do a conversion from 32-bit UIntVar encoding into 32-bit integer + // + TInt ParseUIntVar(const TDesC8& aBuffer, TInt& aVal) const; + + // Extract a WSP encoded MultiOctet Integer encoding into 32-bit integer + // + // In: + // aSource - the source Multi-Octet integer + // + // Out: + // aInt - the 32-bit resulting integer + // + //##ModelId=3B712B9A02F8 + void ExtractMultiOctetInteger(TInt& aInt, const TPtrC8& aSource) const; + + // Method to find a named field within the Cache Control header + // + // In: + // aSource - the descriptor containing the date value + // aFrom - The position in the descriptor to start from + // + // Out: + // aTime - a structure containing the time (and date) found in the descriptor + // + //##ModelId=3B712B9A02E4 + void ExtractFieldDateValue(const TPtrC8& aSource, TInt aFrom, TTime& aTime) const; + + // Method to find a named field within the Cache Control header + // + // In: + // aField - the field type + // + // Out: + // the found aCacheControl string + // + // Rtn: TInt - set to KErrNotFound if the field was not found, + // otherwise the position in the cache control descriptor that the field was found + // + //##ModelId=3B712B9A0372 + TInt FindCacheControlFieldValue(TCacheControlFieldValue aField,TPtrC8& aCacheControl) const; + + //##ModelId=3B712B9A02DA + //void Panic(THttpPanicCode aPanicCode) const; + + // Spare methods for future BC. Const- and non-const versions to assist + // the caller in preserving const-ness. + // + //##ModelId=3B712B9A02D0 + //virtual TAny* Extend_CHTTPResponse(TAny* aArgs); + //##ModelId=3B712B9A02C6 + //virtual TAny* Extend_CHTTPResponse_const(TAny* aArgs) const; + +#if defined _DEBUG + // Debug method definition to allow class invariant testing + // Called by the standard macro __TEST_INVARIANT + // + //##ModelId=3B712B9A02BD + void __DbgTestInvariant() const; + + //##ModelId=3B712B9A02B2 + void DumpToLog(const TDesC8& aData) const; +#endif + + }; + +#endif // __CHTTPRESPONSE_H__ +