diff -r 000000000000 -r f5a58ecadc66 servicediscoveryandcontrol/pnp/test/upnp/upnpmessage/src/rhttpheaders.cpp --- /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 +#include + +// 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(&iVal); + } +EXPORT_C +RString THTTPHdrVal::Str() const + { + __ASSERT_DEBUG(iType == KStrVal, User::Invariant());//HTTPPanic::Panic(HTTPPanic::EHeaderInvalidType)); + return *reinterpret_cast(&iVal); + } + +EXPORT_C +TDateTime THTTPHdrVal::DateTime() const + { + __ASSERT_DEBUG(iType == KDateVal, User::Invariant());//HTTPPanic::Panic(HTTPPanic::EHeaderInvalidType)); + return reinterpret_cast(&iVal)->DateTime(); + } + +EXPORT_C +void THTTPHdrVal::SetInt(TInt aIntVal) + { + iVal = aIntVal; + iType = KTIntVal; + } + +EXPORT_C +void THTTPHdrVal::SetStr(RString aStrVal) + { + *reinterpret_cast(&iVal) = aStrVal; + iType = KStrVal; + } +EXPORT_C +void THTTPHdrVal::SetStrF(RStringF aStrVal) + { + *reinterpret_cast(&iVal) = aStrVal; + iType = KStrFVal; + } + +EXPORT_C +void THTTPHdrVal::SetDateTime(TDateTime aDateVal) + { + *reinterpret_cast(&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 + } +