Msrp/MsrpHeader/src/CMsrpByteRangeHeader.cpp
branchMSRP_FrameWork
changeset 25 505ad3f0ce5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Msrp/MsrpHeader/src/CMsrpByteRangeHeader.cpp	Sat Jun 12 14:30:11 2010 +0530
@@ -0,0 +1,292 @@
+/*
+* Copyright (c) 2009-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:
+* MSRP Implementation
+*
+*/
+
+// CLASS HEADER
+#include "CMsrpByteRangeHeader.h"
+
+// EXTERNAL INCLUDES
+
+// INTERNAL INCLUDES
+#include "MsrpCommon.h"
+#include "TMSRPHeaderUtil.h"
+#include "msrpstrings.h"
+#include "msrpstrconsts.h"
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPByteRangeHeader* CMSRPByteRangeHeader::NewLC(
+	TInt aStart, TInt aEnd, TInt aTotal )
+	{
+	CMSRPByteRangeHeader* self = new (ELeave) CMSRPByteRangeHeader(
+		aStart, aEnd, aTotal );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPByteRangeHeader* CMSRPByteRangeHeader::NewL(
+	TInt aStart, TInt aEnd, TInt aTotal )
+	{
+	CMSRPByteRangeHeader* self = CMSRPByteRangeHeader::NewLC(
+		aStart, aEnd, aTotal );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::NewL
+// -----------------------------------------------------------------------------
+//
+CMSRPByteRangeHeader* CMSRPByteRangeHeader::NewL( )
+	{
+	CMSRPByteRangeHeader* self = new (ELeave) CMSRPByteRangeHeader( );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+	CleanupStack::Pop( self );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::CMSRPByteRangeHeader
+// -----------------------------------------------------------------------------
+//
+CMSRPByteRangeHeader::CMSRPByteRangeHeader(
+	TInt aStart, TInt aEnd, TInt aTotal )
+	: iStartPosition( aStart ),
+	iEndPosition( aEnd ),
+	iTotalBytes( aTotal )
+    {
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::CMSRPByteRangeHeader
+// -----------------------------------------------------------------------------
+//
+CMSRPByteRangeHeader::CMSRPByteRangeHeader( )
+    {
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMSRPByteRangeHeader::ConstructL( ) const
+	{
+	MSRPStrings::OpenL();
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::~CMSRPByteRangeHeader
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPByteRangeHeader::~CMSRPByteRangeHeader()
+	{
+	MSRPStrings::Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::InternalizeValueL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPByteRangeHeader* CMSRPByteRangeHeader::InternalizeValueL(
+	RReadStream& aReadStream )
+	{
+	CMSRPByteRangeHeader* self = CMSRPByteRangeHeader::NewL();
+	CleanupStack::PushL( self );
+	self->DoInternalizeValueL( aReadStream );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::SetStartPosition
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMSRPByteRangeHeader::SetStartPosition( TInt aStartPos )
+	{
+	iStartPosition = aStartPos;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::StartPosition
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMSRPByteRangeHeader::StartPosition( ) const
+	{
+	return iStartPosition;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::SetEndPosition
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMSRPByteRangeHeader::SetEndPosition( TInt aEndPos )
+	{
+	iEndPosition = aEndPos;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::EndPosition
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMSRPByteRangeHeader::EndPosition( )	const
+	{
+	return iEndPosition;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::SetTotalLength
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMSRPByteRangeHeader::SetTotalLength( TInt aTotal )
+	{
+	iTotalBytes = aTotal;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::TotalLength
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMSRPByteRangeHeader::TotalLength( ) const
+	{
+	return iTotalBytes;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::DoInternalizeValueL
+// -----------------------------------------------------------------------------
+//
+void CMSRPByteRangeHeader::DoInternalizeValueL( RReadStream& aReadStream )
+	{
+	TUint32 valueLength = aReadStream.ReadUint32L();
+    if( valueLength > 0 )
+        {
+		HBufC8* tempString = HBufC8::NewLC( valueLength );
+	    TPtr8 tempValue( tempString->Des() );
+	    aReadStream.ReadL( tempValue, valueLength );
+		iStartPosition = TMSRPHeaderUtil::ConvertToNumber( tempString->Des() );
+		CleanupStack::PopAndDestroy( tempString );
+
+		TUint32 valLength = aReadStream.ReadUint32L();
+	    if( valLength > 0 )
+		    {
+			HBufC8* tempStr = HBufC8::NewLC( valLength );
+			TPtr8 tempVal( tempStr->Des() );
+			aReadStream.ReadL( tempVal, valLength );
+			iEndPosition = TMSRPHeaderUtil::ConvertToNumber( tempStr->Des() );
+			CleanupStack::PopAndDestroy( tempString );
+
+			TUint32 valLgth = aReadStream.ReadUint32L();
+			if( valLgth > 0 )
+				{
+				HBufC8* tmpStr = HBufC8::NewLC( valLgth );
+				TPtr8 tmpVal( tmpStr->Des() );
+				aReadStream.ReadL( tmpVal, valLgth );
+				iTotalBytes = TMSRPHeaderUtil::ConvertToNumber( tmpStr->Des() );
+				CleanupStack::PopAndDestroy( tmpStr );
+				}
+			else
+				{
+				User::Leave( KErrArgument );
+				}
+			}
+		else
+			{
+			User::Leave( KErrArgument );
+			}
+		}
+	else
+		{
+		User::Leave( KErrArgument );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::ExternalizeValueL
+// From CSIPHeaderBase:
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMSRPByteRangeHeader::ExternalizeValueL( RWriteStream& aWriteStream ) const
+	{
+	TBuf8< KMaxLengthOfNumbers > value;
+	// start pos
+	value.AppendNum( iStartPosition );
+	aWriteStream.WriteInt32L( value.Length() );
+	aWriteStream.WriteL( value );
+
+	// end pos
+	value.Zero();
+	value.AppendNum( iEndPosition );
+	aWriteStream.WriteInt32L( value.Length() );
+	aWriteStream.WriteL( value );
+
+	// total Length
+	value.Zero();
+	value.AppendNum( iTotalBytes );
+	aWriteStream.WriteInt32L( value.Length() );
+	aWriteStream.WriteL( value );
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::Name
+// -----------------------------------------------------------------------------
+//
+RStringF CMSRPByteRangeHeader::Name() const
+	{
+	return MSRPStrings::StringF( MSRPStrConsts::EByteRange );
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPByteRangeHeader::ToTextValueL
+// -----------------------------------------------------------------------------
+//
+HBufC8* CMSRPByteRangeHeader::ToTextValueL() const
+	{
+	TBuf8< KMaxLengthOfNumbers > value;
+	value.AppendNum( iStartPosition, EDecimal );
+	TMSRPHeaderUtil::AppendStringL( KByteRangeSeparator, value );
+	if ( iEndPosition == KUnknownRange )
+		{
+		value.Append( KAsterisk );
+		}
+	else
+		{
+		value.AppendNum( iEndPosition, EDecimal );
+		}
+	TMSRPHeaderUtil::AppendStringL( KByteRangeTotalSeparator, value );
+
+	if ( iTotalBytes == KUnknownRange )
+		{
+		value.Append( KAsterisk );
+		}
+	else
+		{
+		value.AppendNum( iTotalBytes, EDecimal );
+		}
+	HBufC8* tempString = HBufC8::NewLC( value.Length() );
+	*tempString = value;
+	CleanupStack::Pop( tempString );
+
+	return tempString;
+	}
+
+// End of File