diff -r 000000000000 -r 307788aac0a8 realtimenetprots/sipfw/SIP/Codec/src/CSIPPAccessNetworkInfoHeader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/realtimenetprots/sipfw/SIP/Codec/src/CSIPPAccessNetworkInfoHeader.cpp Tue Feb 02 01:03:15 2010 +0200 @@ -0,0 +1,251 @@ +// 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 : CSIPPAccessNetworkInfoHeader.cpp +// Part of : SIP Codec +// Interface : SDK API, SIP Codec API +// Version : SIP/4.0 +// + + + +#include "sippaccessnetworkinfoheader.h" +#include "CSIPPAccessNetworkInfoHeaderParams.h" +#include "SIPSyntaxCheck.h" +#include "sipcodecerr.h" +#include "sipstrings.h" +#include "sipcodecutils.h" +#include "sipstrconsts.h" +#include "_sipcodecdefs.h" + + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::DecodeL +// ---------------------------------------------------------------------------- +// +EXPORT_C CSIPPAccessNetworkInfoHeader* + CSIPPAccessNetworkInfoHeader::DecodeL(const TDesC8& aValue) + { + __ASSERT_ALWAYS(aValue.Length() > 0, + User::Leave (KErrSipCodecPAccessNetworkInfoHeader)); + + CSIPPAccessNetworkInfoHeader* header = + new(ELeave) CSIPPAccessNetworkInfoHeader; + CleanupStack::PushL(header); + header->ConstructL(); + header->ParseL(aValue); + CleanupStack::Pop(header); + return header; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::NewL +// ---------------------------------------------------------------------------- +// +EXPORT_C CSIPPAccessNetworkInfoHeader* + CSIPPAccessNetworkInfoHeader::NewL(RStringF aAccessType) + { + CSIPPAccessNetworkInfoHeader* self = + CSIPPAccessNetworkInfoHeader::NewLC(aAccessType); + CleanupStack::Pop(self); + return self; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::NewLC +// ---------------------------------------------------------------------------- +// +EXPORT_C CSIPPAccessNetworkInfoHeader* + CSIPPAccessNetworkInfoHeader::NewLC(RStringF aAccessType) + { + CSIPPAccessNetworkInfoHeader* self = + new (ELeave)CSIPPAccessNetworkInfoHeader; + CleanupStack::PushL(self); + self->ConstructL(aAccessType); + return self; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::~CSIPPAccessNetworkInfoHeader +// ---------------------------------------------------------------------------- +// +EXPORT_C CSIPPAccessNetworkInfoHeader::~CSIPPAccessNetworkInfoHeader() + { + iAccessType.Close(); + delete iParams; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::CSIPPAccessNetworkInfoHeader +// ---------------------------------------------------------------------------- +// +CSIPPAccessNetworkInfoHeader::CSIPPAccessNetworkInfoHeader() +: CSIPParameterHeaderBase(';') + { + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::ConstructL +// ---------------------------------------------------------------------------- +// +void CSIPPAccessNetworkInfoHeader::ConstructL() + { + iParams = new (ELeave) CSIPPAccessNetworkInfoHeaderParams; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::ConstructL +// ---------------------------------------------------------------------------- +// +void CSIPPAccessNetworkInfoHeader::ConstructL(RStringF aAccessType) + { + ConstructL(); + SetAccessTypeL(aAccessType); + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::ConstructL +// ---------------------------------------------------------------------------- +// +void CSIPPAccessNetworkInfoHeader::ConstructL( + const CSIPPAccessNetworkInfoHeader& aHeader) + { + SetAccessTypeL(aHeader.AccessType()); + iParams = CSIPPAccessNetworkInfoHeaderParams::NewL(*(aHeader.iParams)); + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::SetAccessTypeL +// ---------------------------------------------------------------------------- +// +EXPORT_C void CSIPPAccessNetworkInfoHeader::SetAccessTypeL(RStringF + aAccessType) + { + RStringF tmp = + SIPCodecUtils::CheckAndCreateTokenL( + aAccessType.DesC(), KErrSipCodecPAccessNetworkInfoHeader); + iAccessType.Close(); + iAccessType = tmp; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::AccessType +// ---------------------------------------------------------------------------- +// +EXPORT_C RStringF CSIPPAccessNetworkInfoHeader::AccessType() const + { + return iAccessType; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::CloneL +// ---------------------------------------------------------------------------- +// +EXPORT_C CSIPHeaderBase* CSIPPAccessNetworkInfoHeader::CloneL() const + { + CSIPPAccessNetworkInfoHeader* header = + new(ELeave) CSIPPAccessNetworkInfoHeader; + CleanupStack::PushL(header); + header->ConstructL(*this); + CleanupStack::Pop(header); + return header; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::Name +// ---------------------------------------------------------------------------- +// +EXPORT_C RStringF CSIPPAccessNetworkInfoHeader::Name() const + { + return SIPStrings::StringF(SipStrConsts::EPAccessNetworkInfoHeader); + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::ExternalizeSupported +// From CSIPHeaderBase: +// ---------------------------------------------------------------------------- +// +EXPORT_C TBool CSIPPAccessNetworkInfoHeader::ExternalizeSupported () const + { + return EFalse; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::PreferredPlaceInMessage +// ---------------------------------------------------------------------------- +// +CSIPHeaderBase::TPreferredPlace +CSIPPAccessNetworkInfoHeader::PreferredPlaceInMessage() const + { + return CSIPHeaderBase::EMiddleBottom; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::BaseDecodeL +// ---------------------------------------------------------------------------- +// +RPointerArray +CSIPPAccessNetworkInfoHeader::BaseDecodeL(const TDesC8& aValue) + { + CSIPPAccessNetworkInfoHeader* header = DecodeL(aValue); + CleanupStack::PushL(header); + RPointerArray headers; + User::LeaveIfError (headers.Append(header)); + CleanupStack::Pop(header); + return headers; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::ToTextMandatoryPartLC +// ---------------------------------------------------------------------------- +// +HBufC8* CSIPPAccessNetworkInfoHeader::ToTextMandatoryPartLC() const + { + return iAccessType.DesC().AllocLC(); + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::ParseMandatoryPartL +// ---------------------------------------------------------------------------- +// +void CSIPPAccessNetworkInfoHeader::ParseMandatoryPartL( + const TDesC8& aMandatoryPart) + { + __ASSERT_ALWAYS(aMandatoryPart.Length() > 0, + User::Leave (KErrSipCodecPAccessNetworkInfoHeader)); + + TLex8 lex(aMandatoryPart); + lex.SkipSpace(); + RStringF accessType = SIPStrings::Pool().OpenFStringL(lex.Remainder()); + CleanupClosePushL(accessType); + SetAccessTypeL(accessType); + CleanupStack::PopAndDestroy(&accessType); + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::Params +// ---------------------------------------------------------------------------- +// +const CSIPParamContainerBase& CSIPPAccessNetworkInfoHeader::Params() const + { + return *iParams; + } + +// ---------------------------------------------------------------------------- +// CSIPPAccessNetworkInfoHeader::Params +// ---------------------------------------------------------------------------- +// +CSIPParamContainerBase& CSIPPAccessNetworkInfoHeader::Params() + { + return *iParams; + }