realtimenetprots/sipfw/SDP/src/SdpRtpmapValue.cpp
changeset 0 307788aac0a8
--- /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 <s32strm.h>
+#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 );
+    
+    // <encoding name>
+    TPtrC8 encName( restValue.Left( pos ) );    
+    
+    restValue.Set( restValue.Right( restValue.Length() - pos - 1 ) );
+    pos = restValue.Locate( KSlashChar );
+
+    // <clock rate> <encoding parameters>
+    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;
+    }