servicediscoveryandcontrol/pnp/test/upnp/upnpmessage/src/rhttpheaders.cpp
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servicediscoveryandcontrol/pnp/test/upnp/upnpmessage/src/rhttpheaders.cpp	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,295 @@
+// 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:
+//
+
+// System includes
+#include <e32std.h>
+#include <http/thttphdrval.h>
+
+// Local includes
+#include "CHeaders.h"
+#include "rhttpheaders.h"
+
+
+EXPORT_C THTTPHdrVal::THTTPHdrVal()
+	{
+	iType = KNoType;
+	}
+
+EXPORT_C
+THTTPHdrVal::THTTPHdrVal(TInt aIntVal)
+	{
+	SetInt(aIntVal);
+	}
+
+EXPORT_C
+THTTPHdrVal::THTTPHdrVal(RStringF aStrVal)
+	{
+	SetStrF(aStrVal);
+	}
+EXPORT_C
+THTTPHdrVal::THTTPHdrVal(RString aStrVal)
+	{
+	SetStr(aStrVal);
+	}
+
+EXPORT_C
+THTTPHdrVal::THTTPHdrVal(TDateTime aDateVal)
+	{
+	SetDateTime(aDateVal);
+	}
+
+//
+// Clone this header value
+//
+
+EXPORT_C
+THTTPHdrVal THTTPHdrVal::Copy() const
+	{
+	THTTPHdrVal ret = *this;
+	if (iType == KStrVal)
+		Str().Copy();
+	if (iType == KStrFVal)
+		StrF().Copy();
+	return ret;
+	}
+
+
+//
+// Accessors
+//
+
+EXPORT_C
+THTTPHdrVal::THTTPValType THTTPHdrVal::Type() const
+	{
+	return iType;
+	}
+
+EXPORT_C
+TInt THTTPHdrVal::Int() const
+	{
+	__ASSERT_DEBUG(iType == KTIntVal, User::Invariant());//HTTPPanic::Panic(HTTPPanic::EHeaderInvalidType));
+	return iVal;
+	}
+	
+EXPORT_C
+RStringF THTTPHdrVal::StrF() const
+	{
+	__ASSERT_DEBUG(iType == KStrFVal, User::Invariant());//HTTPPanic::Panic(HTTPPanic::EHeaderInvalidType));
+	return *reinterpret_cast<const RStringF*>(&iVal);
+	}
+EXPORT_C
+RString THTTPHdrVal::Str() const
+	{
+	__ASSERT_DEBUG(iType == KStrVal, User::Invariant());//HTTPPanic::Panic(HTTPPanic::EHeaderInvalidType));
+	return *reinterpret_cast<const RString*>(&iVal);
+	}
+
+EXPORT_C
+TDateTime THTTPHdrVal::DateTime() const
+	{
+	__ASSERT_DEBUG(iType == KDateVal, User::Invariant());//HTTPPanic::Panic(HTTPPanic::EHeaderInvalidType));
+	return reinterpret_cast<const TTime*>(&iVal)->DateTime();
+	}
+
+EXPORT_C
+void THTTPHdrVal::SetInt(TInt aIntVal)
+	{
+	iVal  = aIntVal;
+	iType = KTIntVal;
+	}
+
+EXPORT_C
+void THTTPHdrVal::SetStr(RString aStrVal)
+	{
+	*reinterpret_cast<RString*>(&iVal) = aStrVal;
+	iType = KStrVal;
+	}
+EXPORT_C
+void THTTPHdrVal::SetStrF(RStringF aStrVal)
+	{
+	*reinterpret_cast<RStringF*>(&iVal) = aStrVal;
+	iType = KStrFVal;
+	}
+
+EXPORT_C
+void THTTPHdrVal::SetDateTime(TDateTime aDateVal)
+	{
+	*reinterpret_cast<TTime*>(&iVal) = aDateVal;
+	iType	  = KDateVal;
+	}
+
+EXPORT_C
+TBool THTTPHdrVal::operator==(THTTPHdrVal aVal) const
+	{
+	TBool ret = EFalse;
+	if (aVal.iType == iType)
+		{
+		switch (iType)
+			{
+		case KTIntVal:
+			ret = (aVal.iVal == iVal);
+			break;
+		case KStrVal:
+		case KStrFVal:
+		case KDateVal:
+			ret = (aVal.iVal == iVal && aVal.iMoreSpace == iMoreSpace);
+			break;
+		default:
+			User::Invariant();//HTTPPanic::Panic(HTTPPanic::EHeaderInvalidType);
+			break;
+			}
+		}
+	return ret;
+	}
+
+EXPORT_C
+TBool THTTPHdrVal::operator!=(THTTPHdrVal aVal) const
+	{
+	return !operator==(aVal);
+	}
+
+
+
+
+
+EXPORT_C
+void RHTTPHeaders::SetFieldL(RStringF aFieldName, THTTPHdrVal aFieldValue)
+	{
+	iImplementation->SetFieldL(aFieldName, aFieldValue);
+	}
+
+EXPORT_C
+void RHTTPHeaders::SetFieldL(RStringF aFieldName, THTTPHdrVal aFieldValue,
+						RStringF aParamName, THTTPHdrVal aParamValue)
+	{
+	iImplementation->SetFieldL(aFieldName, aFieldValue, aParamName, aParamValue);
+	}
+
+EXPORT_C
+void RHTTPHeaders::SetRawFieldL(RStringF aFieldName, const TDesC8& aOtaFieldData, const TDesC8& aFieldSeparator)
+	{
+	iImplementation->SetRawFieldL(aFieldName, aOtaFieldData, aFieldSeparator);
+	}
+
+EXPORT_C
+TInt RHTTPHeaders::RemoveField(RStringF aFieldName)
+	{
+	return iImplementation->RemoveField(aFieldName);
+	}
+
+
+EXPORT_C TInt RHTTPHeaders::RemoveFieldPart(RStringF aFieldName, TInt aIndex)
+	{
+	TRAPD(err,iImplementation->RemoveFieldPartL(aFieldName, aIndex));
+	return err;
+	}
+
+EXPORT_C void RHTTPHeaders::RemoveAllFields()
+	{
+	iImplementation->RemoveAllFields();
+	}
+
+
+EXPORT_C 
+TInt RHTTPHeaders::FieldPartsL(RStringF aFieldName) const
+	{
+	return iImplementation->FieldPartsL(aFieldName);
+	}
+
+EXPORT_C TInt RHTTPHeaders::GetField(RStringF aFieldName, TInt aPartIdx, 
+									 THTTPHdrVal& aHeaderValue) const
+	{
+	return iImplementation->GetField(aFieldName, aPartIdx, aHeaderValue);
+	}
+
+EXPORT_C
+TInt RHTTPHeaders::GetRawField(RStringF aFieldName, TPtrC8& aRawFieldData) const
+	{
+	return iImplementation->GetRawField(aFieldName, aRawFieldData);
+	}
+
+EXPORT_C
+TInt RHTTPHeaders::GetParam(RStringF aFieldName, RStringF aParamName, 
+							THTTPHdrVal& aValue, TInt aPartIdx) const
+	{
+	return iImplementation->GetParam(aFieldName, aParamName, aValue, aPartIdx);
+	}
+
+EXPORT_C void RHTTPHeaders::SetParamL(RStringF aFieldName, RStringF aParamName, 
+									  THTTPHdrVal aParamValue, TInt aPartIdx)
+	{
+	iImplementation->SetParamL(aFieldName, aParamName, aParamValue, aPartIdx);
+	}
+
+EXPORT_C
+THTTPHdrFieldIter RHTTPHeaders::Fields() const
+	{
+	return iImplementation->Fields();
+	}
+
+
+
+EXPORT_C
+THTTPHdrFieldIter::~THTTPHdrFieldIter()
+	{
+	// does nothing
+	}
+
+EXPORT_C
+void THTTPHdrFieldIter::First()
+	{
+	// Check existence of the field name array in CHeaders. If it hasn't been created yet
+	// then we must start off 'at the end'.  This is indicated by the position index set
+	// to KErrNotFound
+	iPosIdx = 0;
+	CheckInvalidation();
+	}
+
+EXPORT_C
+TBool THTTPHdrFieldIter::AtEnd() const
+	{
+	return (iPosIdx == KErrNotFound);
+	}
+
+EXPORT_C
+void THTTPHdrFieldIter::operator++()
+	{
+	// Do nothing if we're already at the end
+	if (iPosIdx >= 0)
+		{
+		++iPosIdx;
+		CheckInvalidation();
+		}
+	}
+
+EXPORT_C
+RStringTokenF THTTPHdrFieldIter::operator()()
+	{
+	CheckInvalidation();
+	if (iPosIdx > KErrNotFound)
+		return iHeaders->iFields[iPosIdx].iFieldName;
+	else
+		return RStringF();
+	}
+
+void THTTPHdrFieldIter::CheckInvalidation()
+	{
+	// iPosIdx may have been valid after the last use of operator() but
+	// if an item was subsequently removed from the collection the iterator
+	// may have gone off the end.
+	if (iPosIdx >= iHeaders->iFields.Count())
+		iPosIdx = KErrNotFound; // Hit the end
+	}
+