--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SIP/Codec/src/CSIPContentDispositionHeader.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,316 @@
+// 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 : CSIPContentDispositionHeader.cpp
+// Part of : SIP Codec
+// Version : SIP/4.0
+//
+
+
+
+
+#include "sipcontentdispositionheader.h"
+#include "CSIPHeaderGenericParams.h"
+#include "CSIPTokenizer.h"
+#include "sipcodecerr.h"
+#include "SIPSyntaxCheck.h"
+#include "sipstrings.h"
+#include "sipstrconsts.h"
+#include "sipcodecutils.h"
+#include "_sipcodecdefs.h"
+
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::DecodeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSIPContentDispositionHeader*
+CSIPContentDispositionHeader::DecodeL (const TDesC8& aValue)
+ {
+ CSIPContentDispositionHeader* contentDispositionHeader =
+ new(ELeave) CSIPContentDispositionHeader;
+ CleanupStack::PushL(contentDispositionHeader);
+ contentDispositionHeader->ConstructL();
+ contentDispositionHeader->ParseL(aValue);
+ CleanupStack::Pop(contentDispositionHeader);
+ return contentDispositionHeader;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSIPContentDispositionHeader* CSIPContentDispositionHeader::NewL(
+ const TDesC8& aDispType)
+ {
+ CSIPContentDispositionHeader* self =
+ CSIPContentDispositionHeader::NewLC(aDispType);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::NewLC
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSIPContentDispositionHeader*
+CSIPContentDispositionHeader::NewLC(const TDesC8& aDispType)
+ {
+ CSIPContentDispositionHeader* self=
+ new(ELeave) CSIPContentDispositionHeader();
+ CleanupStack::PushL(self);
+ self->ConstructL(aDispType);
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::CSIPContentDispositionHeader
+// ----------------------------------------------------------------------------
+//
+CSIPContentDispositionHeader::CSIPContentDispositionHeader()
+: CSIPParameterHeaderBase(';')
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSIPContentDispositionHeader::ConstructL()
+ {
+ iParams = new(ELeave)CSIPHeaderGenericParams;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CSIPContentDispositionHeader::ConstructL (const TDesC8& aDispType)
+ {
+ ConstructL ();
+ SetDispTypeL (aDispType);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::ConstructL
+// ----------------------------------------------------------------------------
+//
+void
+CSIPContentDispositionHeader::ConstructL (const TDesC8& aDispType,
+ const TDesC8& aHandlingParam)
+ {
+ ConstructL ();
+ SetDispTypeL(aDispType);
+ iParams->SetParamL(
+ SIPStrings::StringF(SipStrConsts::EHandling),aHandlingParam);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::ConstructL
+// ----------------------------------------------------------------------------
+//
+void
+CSIPContentDispositionHeader::ConstructL (const CSIPContentDispositionHeader&
+ aSIPContentDispositionHeader)
+ {
+ iParams =
+ CSIPHeaderGenericParams::NewL(
+ *(aSIPContentDispositionHeader.iParams));
+ SetDispTypeL(aSIPContentDispositionHeader.DispType());
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::~CSIPContentDispositionHeader
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSIPContentDispositionHeader::~CSIPContentDispositionHeader()
+ {
+ delete iParams;
+ delete iDispType;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::CloneL
+// From CSIPHeaderBase:
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSIPHeaderBase* CSIPContentDispositionHeader::CloneL () const
+ {
+ CSIPContentDispositionHeader* clone =
+ new (ELeave) CSIPContentDispositionHeader;
+ CleanupStack::PushL(clone);
+ clone->ConstructL(*this);
+ CleanupStack::Pop(clone);
+ return clone;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::Name
+// From CSIPHeaderBase:
+// ----------------------------------------------------------------------------
+//
+EXPORT_C RStringF CSIPContentDispositionHeader::Name () const
+ {
+ return SIPStrings::StringF(SipStrConsts::EContentDispositionHeader);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::SetDispTypeL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void
+CSIPContentDispositionHeader::SetDispTypeL (const TDesC8& aDispType)
+ {
+ SIPCodecUtils::CheckAndSetValueL(iDispType,
+ aDispType,
+ KErrSipCodecContentDispositionHeader);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::DispType
+// ----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CSIPContentDispositionHeader::DispType() const
+ {
+ if (iDispType != 0)
+ {
+ return *iDispType;
+ }
+ return KNullDesC8;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeaderr::ToTextMandatoryPartLC
+// From CSIPHeaderBase:
+// ----------------------------------------------------------------------------
+//
+HBufC8* CSIPContentDispositionHeader::ToTextMandatoryPartLC () const
+ {
+ TUint encodedLength = 0;
+ if(iDispType != 0)
+ {
+ encodedLength += iDispType->Length();
+ }
+
+ HBufC8* encodedHeader = HBufC8::NewLC (encodedLength);
+ TPtr8 encodedHeaderPtr = encodedHeader->Des();
+
+ encodedHeaderPtr.Append(*iDispType);
+ return encodedHeader;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::InternalizeValueL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CSIPHeaderBase* CSIPContentDispositionHeader::InternalizeValueL(
+ RReadStream& aReadStream)
+ {
+ CSIPContentDispositionHeader* self =
+ new(ELeave)CSIPContentDispositionHeader;
+ CleanupStack::PushL(self);
+ self->DoInternalizeValueL(aReadStream);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::DoInternalizeValueL
+// ----------------------------------------------------------------------------
+//
+void CSIPContentDispositionHeader::DoInternalizeValueL(
+ RReadStream& aReadStream)
+ {
+ iDispType = SIPCodecUtils::ReadDescFromStreamL(aReadStream);
+ iParams = CSIPHeaderGenericParams::InternalizeL (aReadStream);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::ExternalizeValueL
+// From CSIPHeaderBase:
+// ----------------------------------------------------------------------------
+//
+void CSIPContentDispositionHeader::ExternalizeValueL(
+ RWriteStream& aWriteStream) const
+ {
+ aWriteStream.WriteUint32L (iDispType->Length());
+ if (iDispType->Length() > 0)
+ {
+ aWriteStream.WriteL (DispType());
+ }
+ iParams->ExternalizeL (aWriteStream);
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::PreferredPlaceInMessage
+// From CSIPHeaderBase:
+// ----------------------------------------------------------------------------
+//
+CSIPHeaderBase::TPreferredPlace
+CSIPContentDispositionHeader::PreferredPlaceInMessage () const
+ {
+ return CSIPHeaderBase::EBottom;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::BaseDecodeL
+// From CSIPHeaderBase:
+// ----------------------------------------------------------------------------
+//
+RPointerArray<CSIPHeaderBase>
+CSIPContentDispositionHeader::BaseDecodeL(const TDesC8& aValue)
+ {
+ CSIPContentDispositionHeader* contentDispositionHeader =
+ new(ELeave) CSIPContentDispositionHeader;
+ CleanupStack::PushL(contentDispositionHeader);
+ contentDispositionHeader->ConstructL();
+ contentDispositionHeader->ParseL (aValue);
+ RPointerArray<CSIPHeaderBase> headerArray;
+ User::LeaveIfError (headerArray.Append(contentDispositionHeader));
+ CleanupStack::Pop(); // contentDispositionHeader
+ return headerArray;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::Params
+// From CSIPParameterHeaderBase:
+// ----------------------------------------------------------------------------
+//
+const CSIPParamContainerBase& CSIPContentDispositionHeader::Params () const
+ {
+ return *iParams;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::Params
+// From CSIPParameterHeaderBase:
+// ----------------------------------------------------------------------------
+//
+CSIPParamContainerBase& CSIPContentDispositionHeader::Params ()
+ {
+ return *iParams;
+ }
+
+// ----------------------------------------------------------------------------
+// CSIPContentDispositionHeader::ParseMandatoryPartL
+// ----------------------------------------------------------------------------
+//
+void
+CSIPContentDispositionHeader::ParseMandatoryPartL(const TDesC8& aMandatoryPart)
+ {
+ __ASSERT_ALWAYS (aMandatoryPart.Length() > 0,
+ User::Leave (KErrSipCodecContentDispositionHeader));
+ TLex8 lex(aMandatoryPart);
+ lex.SkipSpace();
+ SetDispTypeL(lex.Remainder());
+ }