diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SDP/src/SdpRtpmapValue.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SDP/src/SdpRtpmapValue.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,131 @@ +// Copyright (c) 2003-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: +// Name : SdpRtpmapValue.cpp +// Part of : SDP Codec +// Version : 1.0 +// + + + +#include +#include "SdpRtpmapValue.h" +#include "SdpUtil.h" +#include "SdpCodecErr.h" +#include "SdpCodecConstants.h" +#include "_sdpdefs.h" + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// TSdpRtpmapValue::TSdpRtpmapValue +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C TSdpRtpmapValue::TSdpRtpmapValue( + const TPtrC8& aEncodingName, + const TPtrC8& aClockrate, + const TPtrC8& aEncodingParameters ) : + iEncName( aEncodingName ), + iClockrate( aClockrate ), + iEncParams( aEncodingParameters ) + { + } + +// ----------------------------------------------------------------------------- +// TSdpRtpmapValue::DecodeL +// Decodes string and puts it into parts +// ----------------------------------------------------------------------------- +// +EXPORT_C TSdpRtpmapValue TSdpRtpmapValue::DecodeL( + const TDesC8& aText ) + { + __ASSERT_ALWAYS(aText.Length() > 0 && + aText.Locate( KSlashChar ) != KErrNotFound, + User::Leave(KErrSdpCodecMediaAttributeField)); + + TInt length( aText.Length() ); + if ( aText[length - 1] == KLFChar ) + { + if ( length > 1 && aText[length - 2] == KCRChar ) + { + length--; + } + length--; + } + TPtrC8 restValue( aText.Left( length ) ); + + __ASSERT_ALWAYS(SdpUtil::IsByteString(restValue), + User::Leave(KErrSdpCodecMediaAttributeField)); + + TInt pos = restValue.Locate( KSlashChar ); + + // + TPtrC8 encName( restValue.Left( pos ) ); + + restValue.Set( restValue.Right( restValue.Length() - pos - 1 ) ); + pos = restValue.Locate( KSlashChar ); + + // + TPtrC8 encParam( KNullDesC8 ); + TPtrC8 clockRate( KNullDesC8 ); + + if ( pos == KErrNotFound ) + { + clockRate.Set( restValue ); + + __ASSERT_ALWAYS( clockRate.Length() > 0 && encParam.Length() == 0, + User::Leave( KErrSdpCodecMediaAttributeField ) ); + } + else + { + clockRate.Set( restValue.Left( pos ) ); + encParam.Set( restValue.Right( restValue.Length() - pos - 1 ) ); + + __ASSERT_ALWAYS( clockRate.Length() > 0 && encParam.Length() > 0, + User::Leave( KErrSdpCodecMediaAttributeField ) ); + } + + return TSdpRtpmapValue( encName, clockRate, encParam ); + } + +// ----------------------------------------------------------------------------- +// TSdpRtpmapValue::EncodeL +// Encodes a string into valid output string format +// ----------------------------------------------------------------------------- +// +EXPORT_C HBufC8* TSdpRtpmapValue::EncodeL() const + { + TUint length = iEncName.Length() + iClockrate.Length() + 2; + + if (iEncParams.Length() > 0) + { + length += iEncParams.Length() + 1; + } + + HBufC8* returnValue = HBufC8::NewL(length); + + TPtr8 retValPtr(returnValue->Des()); + retValPtr.Append(iEncName); + retValPtr.Append(KSlashStr); + retValPtr.Append(iClockrate); + + if (iEncParams.Length() > 0) + { + retValPtr.Append(KSlashStr); + retValPtr.Append(iEncParams); + } + + return returnValue; + }