Msrp/MsrpHeader/src/CMsrpFailureReportHeader.cpp
branchMSRP_FrameWork
changeset 25 505ad3f0ce5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Msrp/MsrpHeader/src/CMsrpFailureReportHeader.cpp	Sat Jun 12 14:30:11 2010 +0530
@@ -0,0 +1,197 @@
+/*
+* 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 "CMsrpFailureReportHeader.h"
+
+// EXTERNAL INCLUDES
+
+// INTERNAL INCLUDES
+#include "msrpstrings.h"
+#include "msrpstrconsts.h"
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPFailureReportHeader* CMSRPFailureReportHeader::NewLC(
+	const RStringF& aType )
+	{
+	CMSRPFailureReportHeader* self = new (ELeave) CMSRPFailureReportHeader();
+    CleanupStack::PushL( self );
+    self->ConstructL( aType );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPFailureReportHeader* CMSRPFailureReportHeader::NewL(
+	const RStringF& aType )
+	{
+	CMSRPFailureReportHeader* self = CMSRPFailureReportHeader::NewLC( aType );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::NewL
+// -----------------------------------------------------------------------------
+//
+CMSRPFailureReportHeader* CMSRPFailureReportHeader::NewL( )
+	{
+	CMSRPFailureReportHeader* self = new (ELeave) CMSRPFailureReportHeader();
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+	CleanupStack::Pop( self );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::CMSRPFailureReportHeader
+// -----------------------------------------------------------------------------
+//
+CMSRPFailureReportHeader::CMSRPFailureReportHeader()
+    {
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMSRPFailureReportHeader::ConstructL(
+	RStringF aType )
+	{
+	MSRPStrings::OpenL();
+	iReportType = aType.Copy();
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMSRPFailureReportHeader::ConstructL( )
+	{
+	MSRPStrings::OpenL();
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::~CMSRPFailureReportHeader
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPFailureReportHeader::~CMSRPFailureReportHeader()
+	{
+	MSRPStrings::Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::InternalizeValueL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPFailureReportHeader* CMSRPFailureReportHeader::InternalizeValueL(
+	RReadStream& aReadStream )
+	{
+	CMSRPFailureReportHeader* self = CMSRPFailureReportHeader::NewL( );
+	CleanupStack::PushL( self );
+	self->DoInternalizeValueL( aReadStream );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::DoInternalizeValueL
+// -----------------------------------------------------------------------------
+//
+void CMSRPFailureReportHeader::DoInternalizeValueL( RReadStream& aReadStream )
+	{
+	// value must be in stringpool
+	TUint32 valueLength = aReadStream.ReadUint32L();
+    if( valueLength > 0 )
+        {
+	    HBufC8* tempBuffer = HBufC8::NewLC( valueLength );
+	    TPtr8 tempValue( tempBuffer->Des() );
+	    aReadStream.ReadL( tempValue, valueLength );
+
+		// let's check if the value matches the supported content-types
+		RStringF tempString = MSRPStrings::StringF( MSRPStrConsts::EYes );
+		if( tempString.DesC() == tempValue )
+			{
+			// OK
+			iReportType = tempString.Copy();
+			}
+		else
+			{
+			RStringF tempStr = MSRPStrings::StringF( MSRPStrConsts::ENo );
+			if( tempStr.DesC() == tempValue )
+				{
+				// OK
+				iReportType = tempStr.Copy();
+				}
+			else
+				{
+				RStringF tmpStr = MSRPStrings::StringF( MSRPStrConsts::EPartial );
+				if( tmpStr.DesC() == tempValue )
+					{
+					// OK
+					iReportType = tmpStr.Copy();
+					}
+				else
+					{
+					// not supported
+			        CleanupStack::PopAndDestroy( tempBuffer );
+					User::Leave( KErrNotSupported );
+					}
+				}
+			}
+        CleanupStack::PopAndDestroy( tempBuffer );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::ExternalizeValueL
+// From CSIPHeaderBase:
+// -----------------------------------------------------------------------------
+//
+void CMSRPFailureReportHeader::ExternalizeValueL( RWriteStream& aWriteStream ) const
+	{
+	aWriteStream.WriteInt32L( iReportType.DesC().Length() );
+	aWriteStream.WriteL( iReportType.DesC() );
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::Name
+// -----------------------------------------------------------------------------
+//
+RStringF CMSRPFailureReportHeader::Name() const
+	{
+	return MSRPStrings::StringF( MSRPStrConsts::EFailureReport );
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPFailureReportHeader::ToTextValueL
+// -----------------------------------------------------------------------------
+//
+HBufC8* CMSRPFailureReportHeader::ToTextValueL() const
+	{
+    if( iReportType.DesC().Length() )
+        {
+        return iReportType.DesC().AllocL();
+        }
+	return NULL;
+	}
+
+// End of File