diff -r b23410e29e22 -r 8873e6835f7b contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdptypedtime.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contentmgmt/referencedrmagent/RefTestAgent/localsdp/src/sdptypedtime.cpp Thu May 27 14:32:46 2010 +0300 @@ -0,0 +1,206 @@ +// Copyright (c) 2010 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: +// Name : SdpTypedTime.cpp +// Part of : Local SDP Codec +// Version : 1.0 +// + + + +#include +#include "sdptypedtime.h" +#include "_sdpdefs.h" +#include "sdpcodecerr.h" +#include "sdpcodecstringconstants.h" +#include "sdpcodecstringpool.h" + +// LOCAL CONSTANTS +const TUint KMaxTInt64Digits = 30; + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::TSdpTypedTime +// Contructor +// ----------------------------------------------------------------------------- +// +EXPORT_C TSdpTypedTime::TSdpTypedTime() +: iValue(0), iUnit(ETimeUnitNone) + { + } + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::TSdpTypedTime +// Contructor +// ----------------------------------------------------------------------------- +// +EXPORT_C TSdpTypedTime::TSdpTypedTime(TInt64 aValue, TUnit aUnit) +: iValue(aValue), iUnit(aUnit) + { + } + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::operator == +// Checks if two TSdpTypedTimes are equal +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool TSdpTypedTime::operator == (const TSdpTypedTime& aObj) const + { + return iValue == aObj.iValue && iUnit == aObj.iUnit; + } + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::SetValue +// Sets typed time value +// ----------------------------------------------------------------------------- +// +EXPORT_C void TSdpTypedTime::SetValue(TInt64 aValue, TUnit aUnit) + { + iValue = aValue; + iUnit = aUnit; + } + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::ExternalizeL +// Externalizes the typed time to stream +// ----------------------------------------------------------------------------- +// +void TSdpTypedTime::ExternalizeL(RWriteStream& aStream) const + { + aStream.WriteUint32L( I64HIGH( iValue ) ); + aStream.WriteUint32L( I64LOW( iValue ) ); + aStream.WriteInt16L(iUnit); + } + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::InternalizeL +// Internalizes typed time from stream +// ----------------------------------------------------------------------------- +// +TSdpTypedTime TSdpTypedTime::InternalizeL(RReadStream& aStream) + { + TUint32 high = aStream.ReadUint32L(); + TUint32 low = aStream.ReadUint32L(); + TInt64 value = MAKE_TINT64( high, low ); + TUnit unit = static_cast(aStream.ReadInt16L()); + TSdpTypedTime typedTime(value, unit); + return typedTime; + } + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::EncodeL +// Writes attributes in proper format to the stream +// ----------------------------------------------------------------------------- +// +void TSdpTypedTime::EncodeL(RWriteStream& aStream) const + { + TBuf8 number; + number.AppendNum( iValue ); + aStream.WriteL( number ); + + RStringPool pool = SdpCodecStringPool::StringPoolL(); + const TDesC8& timeDays = pool.StringF( + SdpCodecStringConstants::ETimeUnitDays, + SdpCodecStringConstants::Table).DesC(); + const TDesC8& timeHours = pool.StringF( + SdpCodecStringConstants::ETimeUnitHours, + SdpCodecStringConstants::Table).DesC(); + const TDesC8& timeMinutes = pool.StringF( + SdpCodecStringConstants::ETimeUnitMinutes, + SdpCodecStringConstants::Table).DesC(); + const TDesC8& timeSeconds = pool.StringF( + SdpCodecStringConstants::ETimeUnitSeconds, + SdpCodecStringConstants::Table).DesC(); + + if (iUnit != ETimeUnitNone) + { + TBuf8<1> unit; + if (iUnit == ETimeUnitDays) + { + unit.Append(timeDays); + } + else if (iUnit == ETimeUnitHours) + { + unit.Append(timeHours); + } + else if (iUnit == ETimeUnitMinutes) + { + unit.Append(timeMinutes); + } + else if (iUnit == ETimeUnitSeconds) + { + unit.Append(timeSeconds); + } + else + {} + + aStream.WriteL(unit); + } + } + +// ----------------------------------------------------------------------------- +// TSdpTypedTime::DecodeL +// Decodes typed time from TDesC +// ----------------------------------------------------------------------------- +// +TSdpTypedTime TSdpTypedTime::DecodeL(const TDesC8& aText) + { + TLex8 typedTimeLex(aText); + TSdpTypedTime typedTime; + User::LeaveIfError(typedTimeLex.Val(typedTime.iValue, EDecimal)); + + if (typedTimeLex.Peek() != 0) + { + TPtrC8 unitString = typedTimeLex.NextToken(); + + RStringPool pool = SdpCodecStringPool::StringPoolL(); + const TDesC8& timeDays = pool.StringF( + SdpCodecStringConstants::ETimeUnitDays, + SdpCodecStringConstants::Table).DesC(); + const TDesC8& timeHours = pool.StringF( + SdpCodecStringConstants::ETimeUnitHours, + SdpCodecStringConstants::Table).DesC(); + const TDesC8& timeMinutes = pool.StringF( + SdpCodecStringConstants::ETimeUnitMinutes, + SdpCodecStringConstants::Table).DesC(); + const TDesC8& timeSeconds = pool.StringF( + SdpCodecStringConstants::ETimeUnitSeconds, + SdpCodecStringConstants::Table).DesC(); + + if (unitString.Compare(timeDays) == 0) + { + typedTime.iUnit = ETimeUnitDays; + } + else if (unitString.Compare(timeHours) == 0) + { + typedTime.iUnit = ETimeUnitHours; + } + else if (unitString.Compare(timeMinutes) == 0) + { + typedTime.iUnit = ETimeUnitMinutes; + } + else if (unitString.Compare(timeSeconds) == 0) + { + typedTime.iUnit = ETimeUnitSeconds; + } + else + { + User::Leave(KErrSdpCodecTypedTime); + } + } + else + { + typedTime.iUnit = ETimeUnitNone; + } + + return typedTime; + }