diff -r f1578314b8da -r 505ad3f0ce5c Msrp/MsrpHeader/src/CMsrpByteRangeHeader.cpp --- /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