Msrp/MsrpHeader/src/CMsrpStatusHeader.cpp
branchMSRP_FrameWork
changeset 58 cdb720e67852
child 59 b365c991829c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Msrp/MsrpHeader/src/CMsrpStatusHeader.cpp	Thu Nov 25 13:59:42 2010 +0200
@@ -0,0 +1,294 @@
+/*
+* =============================================================================
+*  Name          : CMsrpStatusHeader.cpp
+*  Part of       : MSRP API
+*  Version       : %version: 1 % << Don't touch! Updated by Synergy at check-out.
+*
+*  Copyright © 2007 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 "CMsrpStatusHeader.h"
+
+// EXTERNAL INCLUDES
+#include "msrpstrings.h"
+#include <msrpstrconsts.h>
+
+// EXTERNAL INCLUDES
+#include "MsrpCommon.h"
+#include "TMSRPHeaderUtil.h"
+#include "CMSRPResponse.h"
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPStatusHeader* CMSRPStatusHeader::NewLC( TInt aStatusCode )
+	{
+	CMSRPStatusHeader* self = new (ELeave) CMSRPStatusHeader( aStatusCode );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPStatusHeader* CMSRPStatusHeader::NewL( TInt aStatusCode )
+	{
+	CMSRPStatusHeader* self = CMSRPStatusHeader::NewLC( aStatusCode );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::NewL
+// -----------------------------------------------------------------------------
+//
+CMSRPStatusHeader* CMSRPStatusHeader::NewL( )
+	{
+	CMSRPStatusHeader* self = new (ELeave) CMSRPStatusHeader( );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+	CleanupStack::Pop( self );
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::CMSRPStatusHeader
+// -----------------------------------------------------------------------------
+//
+CMSRPStatusHeader::CMSRPStatusHeader( TInt aStatusCode )
+	: iStatusCode( aStatusCode )
+    {
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::CMSRPStatusHeader
+// -----------------------------------------------------------------------------
+//
+CMSRPStatusHeader::CMSRPStatusHeader( )
+    {
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CMSRPStatusHeader::ConstructL( ) const
+	{
+	MSRPStrings::OpenL();
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::~CMSRPStatusHeader
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPStatusHeader::~CMSRPStatusHeader()
+	{
+	MSRPStrings::Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::InternalizeValueL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CMSRPStatusHeader* CMSRPStatusHeader::InternalizeValueL(
+	RReadStream& aReadStream )
+	{
+	CMSRPStatusHeader* self = CMSRPStatusHeader::NewL( );
+	CleanupStack::PushL( self );
+	self->DoInternalizeValueL( aReadStream );
+	CleanupStack::Pop( self );
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::SetStartPosition
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CMSRPStatusHeader::SetStatusCode( TInt aStatusCode )
+	{
+	iStatusCode = aStatusCode;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::StatusCode
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CMSRPStatusHeader::StatusCode( ) const
+	{
+	return iStatusCode;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::DoInternalizeValueL
+// -----------------------------------------------------------------------------
+//
+void CMSRPStatusHeader::DoInternalizeValueL( RReadStream& aReadStream )
+	{
+	TUint32 valueLength = aReadStream.ReadUint32L();
+    if( valueLength > 0 )
+        {
+		HBufC8* tempString = HBufC8::NewLC( valueLength );
+	    TPtr8 tempValue( tempString->Des() );
+	    aReadStream.ReadL( tempValue, valueLength );
+		iStatusCode = TMSRPHeaderUtil::ConvertToNumber( tempString->Des() );
+		CleanupStack::PopAndDestroy( tempString );
+		}
+	else
+		{
+		User::Leave( KErrArgument );
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::ExternalizeValueL
+// From CSIPHeaderBase:
+// -----------------------------------------------------------------------------
+//
+void CMSRPStatusHeader::ExternalizeValueL( RWriteStream& aWriteStream ) const
+	{
+	TBuf8< KMaxLengthOfStatusCode > value;
+	// status code
+	value.AppendNum( iStatusCode, EDecimal );
+	aWriteStream.WriteInt32L( value.Length() );
+	aWriteStream.WriteL( value );
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::Name
+// -----------------------------------------------------------------------------
+//
+RStringF CMSRPStatusHeader::Name() const
+	{
+	return MSRPStrings::StringF( MSRPStrConsts::EStatus );
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::ToTextValueL
+// -----------------------------------------------------------------------------
+//
+HBufC8* CMSRPStatusHeader::ToTextValueL() const
+	{
+	TBuf8< KMaxLengthOfStatusCodeValue > statusCodeLine;
+	TMSRPHeaderUtil::AppendStringL(
+		MSRPStrings::StringF( MSRPStrConsts::EStatusNameSpace ).DesC(), statusCodeLine );
+	TMSRPHeaderUtil::AppendStringL( KSpaceChar, statusCodeLine );
+
+	statusCodeLine.AppendNum( iStatusCode, EDecimal );
+	TMSRPHeaderUtil::AppendStringL( KSpaceChar, statusCodeLine );
+
+	// then is the reason string
+	// possible codes are defined here
+	switch( iStatusCode )
+		{
+		case EAllOk:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::EAllOk ).DesC(), statusCodeLine );
+			break;
+			}
+		case EUnintelligibleRequest:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::EUnintelligibleRequest ).DesC(), statusCodeLine );
+			break;
+			}
+		case EActionNotAllowed:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::EActionNotAllowed ).DesC(), statusCodeLine );
+			break;
+			}
+		case ETimeout:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::ETimeout ).DesC(), statusCodeLine );
+			break;
+			}
+		case EStopSending:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::EStopSending ).DesC(), statusCodeLine );
+			break;
+			}
+		case EMimeNotUnderstood:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::EMimeNotUnderstood ).DesC(), statusCodeLine );
+			break;
+			}
+		case EParameterOutOfBounds:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::EParameterOutOfBounds ).DesC(), statusCodeLine );
+			break;
+			}
+		case ESessionDoesNotExist:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::ESessionDoesNotExist ).DesC(), statusCodeLine );
+			break;
+			}
+		case EUnknownRequestMethod:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::EUnknownRequestMethod ).DesC(), statusCodeLine );
+			break;
+			}
+		case ESessionAlreadyBound:
+			{
+			TMSRPHeaderUtil::AppendStringL(
+				MSRPStrings::StringF(
+				MSRPStrConsts::ESessionAlreadyBound ).DesC(), statusCodeLine );
+			break;
+			}
+
+		default:
+			{
+			// not a valid code
+			User::Leave( KErrArgument );
+			break;
+			}
+		}
+
+
+	HBufC8* tempString = HBufC8::NewLC( statusCodeLine.Length() );
+	*tempString = statusCodeLine;
+	CleanupStack::Pop( tempString );
+
+	return tempString;
+	}
+
+// -----------------------------------------------------------------------------
+// CMSRPStatusHeader::__DbgTestInvariant
+// -----------------------------------------------------------------------------
+//
+void CMSRPStatusHeader::__DbgTestInvariant() const
+	{
+#if defined(_DEBUG)
+	// to be defined
+#endif
+	}
+
+// End of File