messagingfw/wappushfw/pushutils/inc/chttpresponse.h
changeset 0 8e480a14352b
--- /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 <e32base.h>
+
+// User Include
+#include <thttpfields.h>
+
+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__
+