servicediscoveryandcontrol/pnp/test/upnp/upnpmessage/inc/rhttpheaders.h
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servicediscoveryandcontrol/pnp/test/upnp/upnpmessage/inc/rhttpheaders.h	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,191 @@
+// Copyright (c) 2008-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	__RHTTPHEADERS_H__
+#define	__RHTTPHEADERS_H__
+
+// System includes
+#include <http/thttphdrfielditer.h>
+#include <http/thttphdrval.h>
+
+
+class RHTTPHeaders
+/** 
+The collection of headers (or more correctly, header fields)
+associated with a message. Header (fields) can be created, read and
+modified. They may be composed of several parts (by repeated
+invocations of API methods, see below) and may be assigned one or
+more parameters.  Individual field parts and parameters take
+values described using THTTPHdrVal.
+@publishedAll
+@released
+@see RHTTPMessage
+@see THTTPHdrVal
+*/
+	{
+ public:
+	/** Default constructor
+	*/
+	inline RHTTPHeaders();
+
+	/**Getter methods
+		Methods for reading data.
+	*/
+	//@{
+	/** Obtain the number of parts in the named header field's value,
+		Simple headers are created with a single part following one
+		call to SetFieldL. Subsequent calls to SetFieldL create
+		additional parts if the field exists already.
+		@leave KErrNoMemory
+		@param aFieldName The header name
+		@return The number of parts, or zero if the field does not exist.  */
+	IMPORT_C TInt FieldPartsL(RStringF aFieldName) const;
+
+	/** Obtain the named header field's value. The index
+		of a part within the field must be specified. Parts are indexed
+		from 0 and fields with only one part return the entire field for index 0
+		@param aFieldName The header name
+		@param aPartIdx The index of the part
+		@param aHeaderValue The header field value
+		@return An error condition. Returns KErrNotFound if there is not  a field with the 
+				specifed field name
+	*/
+	IMPORT_C TInt GetField(RStringF aFieldName, 
+								  TInt aPartIdx, THTTPHdrVal& aHeaderValue) const;
+
+	/** Obtain an Raw representation of the named header
+		field's value.  Note that general client use of this method is
+		strongly discouraged since it exposes the Raw representation of particular headers.  
+		However it may be needed for some cases where received headers could not be
+		decoded by HTTP.  It will normally be used internally when
+		preparing header data to be transmitted with a request.
+		@param aFieldName The field name, e.g, 'Content-Type'
+		@param aRawFieldData The field's data content, in an appropriate Raw form 
+		@return An error condition. Returns KErrNotFound if there is not  a field with the 
+				specifed field name
+	*/
+	IMPORT_C TInt GetRawField(RStringF aFieldName, 
+							   TPtrC8& aRawFieldData) const;
+
+	/** Obtain the value of a named parameter, associated with the
+		named header field.  An optional index to a part within the
+		header field may be supplied, if not it is assumed that it is
+		the first part.
+		@param aFieldName The header name
+		@param aParamName The parameter name
+		@param aReturn The returned value. Note that this
+		must be Copy()d by the caller, if it wants to keep the value.
+		@param aPartIdx The optional index of the part
+		@return An error condition. Returns KErrNotFound if there is not  a field with the 
+				specifed field name  */
+	IMPORT_C TInt GetParam(RStringF aFieldName, 
+								  RStringF aParamName, 
+								  THTTPHdrVal& aReturn,
+								  TInt aPartIdx = 0) const;
+
+	/** Access the fields within this header collection, via an
+		iterator.  Each application of the iterator returns the name
+		of the next field type.  This may then be accessed via
+		RHTTPHeaders methods.
+		@return The iterator.  */
+	IMPORT_C THTTPHdrFieldIter Fields() const;
+	//@}
+
+	/** Setter Methods
+		Methods for writing data.
+	*/
+	//@{
+	/** Set a named field in the header.  On the first instance that
+		this API method is used for a given field name, the first will
+		be created.  On subsequent calls, the same field will be
+		extended to have several parts, with a new part created to
+		hold the supplied value.
+		@param aFieldName The field name, e.g, 'Content-Type'
+		@param aFieldValue The field value, e.g. 'text/html' */
+	IMPORT_C void SetFieldL(RStringF aFieldName, THTTPHdrVal aFieldValue);
+
+	/** Set a named field in the header, and associate with it the
+		supplied parameter. If the field doesn't already exist it will
+		be created along with a parameter; if it does exist, then a
+		new part will be created along with the parameter.
+		@param aFieldName The field name, e.g. 'Accept'
+		@param aFieldValue The field value. e.g. 'text/plain'
+		@param aParamName The parameter name, e.g. 'q'
+		@param aParamValue The parameter value, e.g. '0.3' */
+	IMPORT_C void SetFieldL(RStringF aFieldName, THTTPHdrVal aFieldValue,
+							RStringF aParamName, THTTPHdrVal aParamValue);
+
+	/** Set a parameter in an existing header. 
+		@param aFieldName The field name, e.g. 'Accept'
+		@param aPartIdx The part of the header to add the parameter to
+		@param aParamName The parameter name, e.g. 'q'
+		@param aParamValue The parameter value, e.g. '0.3'
+		@leave KErrNotFoud if the field, or the part within the field doesn't exist
+	*/
+	IMPORT_C void SetParamL(RStringF aFieldName, RStringF aParamName, THTTPHdrVal aParamValue, TInt aPartIdx);
+
+	/** Set a named field in the header to contain the supplied Raw header
+		data. If the header already exists then a LF and the new data will be added to the existing data. This is used to
+		indicate that there are multiple instances of this header
+
+
+		Note that general client use of this method is strongly
+		discouraged since it exposes the raw representation of particular headers.  
+		However it may be needed for some cases where headers to be transmitted have no encoding known
+		to HTTP.  It will normally be used internally when receiving data from a service provider.
+		@param aFieldName The field name, e.g, 'Content-Type'
+		@param aRawFieldData The field's data content, in a raw form
+		@param aFieldSeparator The header field separator
+	*/
+	IMPORT_C void SetRawFieldL(RStringF aFieldName, 
+							   const TDesC8& aRawFieldData,
+							   const TDesC8& aFieldSeparator);
+
+	/** Remove, entirely, the named header field from the header
+		collection. All its parts and associated parameters (where
+		they exist) are also removed.
+		@param aFieldName The field name.
+		@return KErrNone if the removal is successful; KErrNotFound if
+		the field didn't exist within the headers.  */
+	IMPORT_C TInt RemoveField(RStringF aFieldName);
+
+	/** Remove a single part of a header field. Just the part and any associated paramters are removed. If this 
+		results in no parts being present in the header then it will also be removed
+		@param aFieldName The header name
+		@param aIndex The particular part of the field to be removed
+		@return KErrNone if the removal is sucessful; KErrNotFound if the header didn't exist. No exception is raised if 
+		the particular value is not found as part of that header */
+	IMPORT_C TInt RemoveFieldPart(RStringF aFieldName, TInt aIndex);
+
+	/** Remove all the fields of this header collection
+	*/
+	IMPORT_C void RemoveAllFields();
+
+	//@}
+
+
+private:
+	friend class CHeaders;
+	CHeaders* iImplementation;
+	};
+
+
+inline RHTTPHeaders::RHTTPHeaders()
+		: iImplementation(NULL)
+	{
+	}
+
+
+#endif  // __RHTTPHEADERS_H__