Msrp/MsrpHeader/src/CMsrpReport.cpp
branchMSRP_FrameWork
changeset 58 cdb720e67852
child 59 b365c991829c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Msrp/MsrpHeader/src/CMsrpReport.cpp	Thu Nov 25 13:59:42 2010 +0200
@@ -0,0 +1,207 @@
+/*
+* =============================================================================
+*  Name          : CMSRPReport.cpp
+*  Part of       : MSRP API
+*  Version       : %version: 1 % << Don't touch! Updated by Synergy at check-out.
+*
+*  Copyright © 2009 Nokia. All rights reserved.
+*  This material, including documentation and any related
+*  computer programs, is protected by copyright controlled by
+*  Nokia Corporation. All rights are reserved. Copying,
+*  including reproducing, storing, adapting or translating, any
+*  or all of this material requires the prior written consent of
+*  Nokia Corporation. This material also contains confidential
+*  information which may not be disclosed to others without the
+*  prior written consent of Nokia Corporation.
+* =============================================================================
+*/
+
+// CLASS HEADER
+#include "CMSRPReport.h"
+
+// EXTERNAL INCLUDES
+//#include <e32base.h>
+#include <MsrpStrConsts.h>
+
+// INTERNAL INCLUDES
+#include "MsrpCommon.h"
+#include "CMSRPFromPathHeader.h"
+#include "CMSRPToPathHeader.h"
+#include "CMSRPMessageIdHeader.h"
+#include "CMSRPByteRangeHeader.h"
+#include "CMSRPContentTypeHeader.h"
+#include "CMSRPFailureReportHeader.h"
+#include "CMSRPSuccessReportHeader.h"
+#include "CMSRPStatusHeader.h"
+
+// -----------------------------------------------------------------------------
+// CMSRPReport::CMSRPReport
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPReport::CMSRPReport()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPReport::~CMSRPReport
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPReport::~CMSRPReport()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPReport::InternalizeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPReport* CMSRPReport::InternalizeL( RReadStream& aReadStream )
+	{
+	CMSRPReport* self = new (ELeave) CMSRPReport();
+	CleanupStack::PushL( self );
+    self->DoInternalizeL( aReadStream );
+	CleanupStack::Pop( self );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPReport::DoInternalizeL
+// -----------------------------------------------------------------------------
+//
+void CMSRPReport::DoInternalizeL( RReadStream& aReadStream )
+	{
+	TUint8 dataType( 0 );
+
+	// read the identifier
+	if ( aReadStream.ReadUint8L() != 102 )
+		{
+		User::Leave( KErrArgument );
+		}
+
+	do
+		{
+		dataType = aReadStream.ReadUint8L();
+
+		switch( dataType )
+			{
+			case 1: // from path
+				{
+				iFromPath = CMSRPFromPathHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+			case 2: // to path
+				{
+				iToPath = CMSRPToPathHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+			case 3: // message id
+				{
+				iMessageId = CMSRPMessageIdHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+			case 4: // byte range
+				{
+				iByteRange = CMSRPByteRangeHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+			case 5: // content type
+				{
+				iContentType = CMSRPContentTypeHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+			case 6: // failure report
+				{
+				iFailureReport = CMSRPFailureReportHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+			case 7: // success report
+				{
+				iSuccessReport = CMSRPSuccessReportHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+			case 8: // status
+				{
+				iStatusHeader = CMSRPStatusHeader::InternalizeValueL( aReadStream );
+				break;
+				}
+
+			default:
+				{
+				// nothing to do
+				break;
+				}
+			}
+
+		} while( dataType );
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPReport::ExternalizeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMSRPReport::ExternalizeL( RWriteStream& aWriteStream )
+	{
+	// first add the MSRP Message identifier
+	aWriteStream.WriteUint8L( 102 ); // MSRP Report identifier
+
+    if( iFromPath )
+        {
+		aWriteStream.WriteUint8L(1); // more headers in the stream flag
+        iFromPath->ExternalizeValueL( aWriteStream );
+        }
+    if( iToPath )
+        {
+		aWriteStream.WriteUint8L(2); // more headers in the stream flag
+        iToPath->ExternalizeValueL( aWriteStream );
+        }
+    if ( iMessageId )
+        {
+		aWriteStream.WriteUint8L(3); // more headers in the stream flag
+        iMessageId->ExternalizeValueL( aWriteStream );
+        }
+    if( iByteRange )
+        {
+        aWriteStream.WriteUint8L(4); // more headers in the stream flag
+        iByteRange->ExternalizeValueL( aWriteStream );
+        }
+    if( iContentType )
+        {
+        aWriteStream.WriteUint8L(5); // more headers in the stream flag
+        iContentType->ExternalizeValueL( aWriteStream );
+        }
+    if( iFailureReport )
+        {
+        aWriteStream.WriteUint8L(6); // more headers in the stream flag
+        iFailureReport->ExternalizeValueL( aWriteStream );
+        }
+    if( iSuccessReport )
+        {
+        aWriteStream.WriteUint8L(7); // more headers in the stream flag
+        iSuccessReport->ExternalizeValueL( aWriteStream );
+        }
+	if ( iStatusHeader )
+		{
+		aWriteStream.WriteUint8L( 8 );
+		iStatusHeader->ExternalizeValueL( aWriteStream );
+		}
+
+	aWriteStream.WriteUint8L(0); // no more headers in the stream flag
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPReport::IsReport
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TBool CMSRPReport::IsReport( const TDesC8& aBuffer )
+	{
+	if ( aBuffer.Length() )
+		{
+		if ( aBuffer[ 0 ] == 102 )
+			{
+			return ETrue;
+			}
+		}
+
+	return EFalse;
+	}
+
+// End of File