realtimenetprots/sipfw/SIP/Client/src/CSIPResponseElements.cpp
changeset 0 307788aac0a8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/Client/src/CSIPResponseElements.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,226 @@
+// Copyright (c) 2004-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          : CSIPResponseElements.cpp
+// Part of       : SIPClient
+// Version       : SIP/4.0 
+//
+
+
+
+#include "sipresponseelements.h"
+#include "sipmessageelements.h"
+#include "sipstrings.h"
+#include "sipstrconsts.h"
+#include "_sipcodecdefs.h"
+
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPResponseElements*
+CSIPResponseElements::NewL (TUint aStatusCode, RStringF aReasonPhrase)
+	{
+    CSIPResponseElements* self = 
+		CSIPResponseElements::NewLC(aStatusCode,aReasonPhrase);
+    CleanupStack::Pop (self);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::NewLC
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPResponseElements*
+CSIPResponseElements::NewLC (TUint aStatusCode, RStringF aReasonPhrase)
+	{
+	CSIPResponseElements* self = new(ELeave)CSIPResponseElements;
+    CleanupStack::PushL (self);
+    self->ConstructL (aStatusCode,aReasonPhrase);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::CSIPResponseElements
+// -----------------------------------------------------------------------------
+//
+CSIPResponseElements::CSIPResponseElements ()
+	{
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CSIPResponseElements::ConstructL (TUint aStatusCode,
+									   RStringF aReasonPhrase)
+	{
+    SetStatusCodeL (aStatusCode);
+	iReasonPhrase = aReasonPhrase.Copy();
+    iMessageElements = CSIPMessageElements::NewL();
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::~CSIPResponseElements
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPResponseElements::~CSIPResponseElements () 
+	{
+    delete iMessageElements;
+    iReasonPhrase.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::SetStatusCodeL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CSIPResponseElements::SetStatusCodeL (TUint aStatusCode)
+	{
+	const TUint KMinStatusCode = 101;
+	const TUint KMaxStatusCode = 699; 
+	__ASSERT_ALWAYS (aStatusCode >= KMinStatusCode && 
+	                 aStatusCode <= KMaxStatusCode,
+	                 User::Leave(KErrArgument));
+	iStatusCode = aStatusCode;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::StatusCode
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TUint CSIPResponseElements::StatusCode() const
+	{
+	return iStatusCode;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::SetReasonPhraseL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void 
+CSIPResponseElements::SetReasonPhraseL (RStringF aReasonPhrase)
+	{
+	iReasonPhrase.Close();
+	iReasonPhrase = aReasonPhrase.Copy();
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::ReasonPhrase
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSIPResponseElements::ReasonPhrase () const
+	{
+	return iReasonPhrase;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::FromHeader
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPFromHeader* CSIPResponseElements::FromHeader () const
+    {
+    return iMessageElements->From();
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::ToHeader
+// -----------------------------------------------------------------------------
+//	
+EXPORT_C const CSIPToHeader* CSIPResponseElements::ToHeader () const
+    {
+    return iMessageElements->To();
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::CSeqHeader
+// -----------------------------------------------------------------------------
+//		
+EXPORT_C const CSIPCSeqHeader* CSIPResponseElements::CSeqHeader() const
+    {
+    return iMessageElements->CSeq();
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::MessageElements
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CSIPMessageElements& 
+CSIPResponseElements::MessageElements () const
+    {
+    return *iMessageElements;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::MessageElements
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CSIPMessageElements& CSIPResponseElements::MessageElements ()
+    {
+    return *iMessageElements;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::InternalizeL
+// -----------------------------------------------------------------------------
+//
+CSIPResponseElements* CSIPResponseElements::InternalizeL(
+    RReadStream& aReadStream)
+	{
+	CSIPResponseElements* self =
+		CSIPResponseElements::InternalizeLC(aReadStream);
+	CleanupStack::Pop(self);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::InternalizeLC
+// -----------------------------------------------------------------------------
+//
+CSIPResponseElements* 
+CSIPResponseElements::InternalizeLC (RReadStream& aReadStream)
+	{
+	CSIPResponseElements* self = new(ELeave)CSIPResponseElements;
+    CleanupStack::PushL (self);
+    self->DoInternalizeL(aReadStream);
+    return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::DoInternalizeL
+// -----------------------------------------------------------------------------
+//
+void CSIPResponseElements::DoInternalizeL (RReadStream& aReadStream)
+	{
+	iStatusCode = aReadStream.ReadUint16L();
+	TUint32 reasonPhraseLength = aReadStream.ReadUint32L();
+	HBufC8* reasonPhraseBuf = HBufC8::NewLC(reasonPhraseLength);
+	TPtr8 reasonPhrasePtr(reasonPhraseBuf->Des());
+	aReadStream.ReadL(reasonPhrasePtr,reasonPhraseLength);
+	iReasonPhrase = SIPStrings::Pool().OpenFStringL(reasonPhrasePtr);
+	CleanupStack::PopAndDestroy(reasonPhraseBuf);
+    iMessageElements = CSIPMessageElements::InternalizeL(aReadStream);
+	}
+
+// -----------------------------------------------------------------------------
+// CSIPResponseElements::ExternalizeL
+// -----------------------------------------------------------------------------
+//
+void CSIPResponseElements::ExternalizeL (RWriteStream& aWriteStream) const
+	{
+	aWriteStream.WriteUint16L(iStatusCode);
+	TPtrC8 reasonPhrase(iReasonPhrase.DesC());	
+	aWriteStream.WriteUint32L(reasonPhrase.Length());
+	aWriteStream.WriteL(reasonPhrase);
+    iMessageElements->ExternalizeL(aWriteStream);
+	}